Frage

Ich versuche, einen ziemlich grundlegenden Chat -Bildschirm mit einem ListView zu erstellen, in dem der Text und einen EditText unten und eine Schaltfläche "Senden" rechts neben dem EditText angezeigt werden. Alles ist funktional, aber wenn ich auf den EditText klicke, deckt die virtuelle Tastatur es ab. Der Bildschirm schwenkt ein wenig, aber nicht genug, um über der Tastatur sichtbar zu werden. Ich habe das "ordnungsgemäße" Tag in meinem Manifest und habe auch das "Adustresize" -Tag ohne Erfolg ausprobiert. Ich vermute, es hat etwas mit der Art und Weise zu tun, wie mein Layout eingerichtet ist, aber ich habe ehrlich gesagt keine Ahnung. Bitte helfen Sie!

Aktuelles Layout ...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ListView android:id="@+id/android:list" 
    android:layout_height="0dip" 
    android:layout_width="fill_parent"
    android:layout_weight="1"
    android:stackFromBottom="true">
</ListView>

<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <EditText android:id="@+id/sendMessageBox"
        android:focusable="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scrollbars="vertical"
        android:maxLines="4"
        android:text=""
        android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
        android:maxLength="1000"
        android:hint="Type your message..."
        android:imeOptions="actionSend"/>

    <Button android:id="@+id/sendMessageButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:text="Send"/>

</LinearLayout>

War es hilfreich?

Lösung

Nachdem ich anscheinend viel gesucht habe, nenne ich einen Fehler. Wenn Sie das Vollbild -Tag verwenden (um die Statusleiste aus der Aktivität zu entfernen) können Sie "Adustresize" nicht verwenden, ohne die Aktivität in eine Scrollview zu wickeln. Leider verwende ich für mich eine ListView, die ein weiteres Problem erzeugen würde. Ich habe es satt, damit herumzuspielen und werde wahrscheinlich nur das Vollbild für diese Aktivität aufgeben.

Andere Tipps

In Ihrer Manifest -Datei müssen Sie die entsprechende festlegen android:windowSoftInputMode Eigentum. Dieses Attribut ist seit API 3 gültig.

<activity
    ...
    android:windowSoftInputMode="adjustPan" >
</activity>

Optionen sind: http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

  • StateUnspecified Der Zustand der Softtastatur (unabhängig davon, ob sie versteckt oder sichtbar ist) ist nicht angegeben. Das System wählt einen geeigneten Zustand oder stützt sich auf die Einstellung im Thema. Dies ist die Standardeinstellung für das Verhalten der Softtastatur.
  • staatlich Die weiche Tastatur wird in jedem Zustand gehalten, in dem sie zuletzt war, ob sichtbar oder versteckt, wenn die Aktivität in den Vordergrund kommt.
  • "staatshidden" Die Soft -Tastatur ist versteckt, wenn der Benutzer die Aktivität auswählt - dh wenn der Benutzer positiv zur Aktivität navigiert, anstatt sich darauf zurückzusetzen, weil sie eine andere Aktivität verlassen.
  • StatealwayShidden Die weiche Tastatur ist immer verborgen, wenn das Hauptfenster der Aktivität Eingabefokus hat.
  • staatlich Die Softtastatur ist sichtbar, wenn dies normalerweise geeignet ist (wenn der Benutzer zum Hauptfenster der Aktivität vorwärts navigiert).
  • staatsalwaysvissible Die Soft -Tastatur wird sichtbar, wenn der Benutzer die Aktivität auswählt - dh wenn der Benutzer positiv auf die Aktivität navigiert, anstatt sich darauf zurückzusetzen, weil sie eine andere Aktivität verlassen.
  • ordnungsgemäß Es ist nicht spezifiziert, ob das Hauptfenster der Aktivität den Platz für die Softtastatur schafft oder ob der Inhalt der Fensterpfanne auf dem Bildschirm den aktuellen Fokus sichtbar macht. Das System wählt automatisch einen dieser Modi aus, je nachdem, ob der Inhalt des Fensters Layoutansichten enthält, mit denen der Inhalt scrollen kann. Wenn eine solche Ansicht vorhanden ist, wird das Fenster angezeigt, als das Scrollen alle Inhalt des Fensters in einem kleineren Bereich sichtbar machen kann. Dies ist die Standardeinstellung für das Verhalten des Hauptfensters.
  • adjustressize Das Hauptfenster der Aktivität wird immer geändert, um Platz für die Softtastatur auf dem Bildschirm zu schaffen.
  • Anpassung Das Hauptfenster der Aktivität wird nicht geändert, um Platz für die weiche Tastatur zu schaffen. Vielmehr wird der Inhalt des Fensters automatisch so gesteckt, dass der aktuelle Fokus niemals von der Tastatur verdeckt wird und Benutzer immer sehen können, was sie eingeben. Dies ist im Allgemeinen weniger wünschenswert als die Änderung, da der Benutzer möglicherweise die Softtastatur schließen muss, um mit verdeckten Teilen des Fensters zu erreichen und mit ihnen zu interagieren.

Wenn Sie einstellen android:windowSoftInputMode="adjustResize" Für eine Aktivität im Manifest schrumpft eine Scrollview (oder andere zusammenklappbare Ansichtsgruppen), um die weiche Tastatur aufzunehmen. Aber wenn Sie festlegen android:windowFullscreen="true" Im Thema der Aktivität wird die Scrollview nicht schrumpfen, da es gezwungen ist, den gesamten Bildschirm zu füllen. Einstellung android:fitsSystemWindows="false" In Ihrem Thema führt auch Adustressize nicht zum Laufen

Ich hatte das in meinem Androidmanifest. Es verursachte das adjustPan Um nicht richtig zu arbeiten. Ich habe den Block unten entfernt und alles funktioniert wieder gut.

<supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="false"
        android:anyDensity="false" />

Hier ist eine Problemumgehung, die ich gefunden habe. Öffnen Sie den problematischen EditText und klicken Sie auf die Rückgabetaste. Beachten Sie, dass der EditText näher an die Position verschoben wird, für die Sie schießen.

Obwohl Hacky, können Sie im Wesentlichen eine neue Linie oben im EditText gefallen.

Dies scheint auch mit einer neuen Linie unten zu funktionieren, aber Sie müssten eine Verzögerung verwenden, um die Newline erst nach der Animation der Soft -Tastatur in Position hinzuzufügen.

Beachten Sie, dass ich dieses Problem nur auf bestimmten Telefonen (Droidx) habe.

if (android.os.Build.MODEL.equals("DROIDX")) {
        inputEt.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                    String text = inputEt.getText().toString();
                    text = "\n\n" + text.trim();
                    inputEt.setText(text);  
                    inputEt.setSelection(text.length());
                }
            });
        }

Versuchen Sie hinzu android:windowSoftInputMode="adjustResize|stateVisible|stateAlwaysHidden" in deinem Manifest.

Sie können die folgenden Einstellungen ausprobieren:

<supports-screens
android:anyDensity="true"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top