2010-09-06 4 views
6

Wie bestimmt Android, ob das Layout beim Anzeigen des Softkeyboards verschoben werden soll?Wie bestimmt Android, ob das Layout beim Anzeigen des Softkeyboards verschoben werden soll?

Hinweis: Ich bin mir bewusst, dass die Aktivität Eigenschaft android:windowSoftInputMode="adjustResize|adjustResize|adjustUnspecified" vorhanden ist, wie hier http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft beschrieben, aber in meinem Fall scheint es keine Auswirkungen zu haben. Das ist mein Problem:

Ich habe zwei Aktivitäten, so ziemlich das gleiche Layout, aber die erste verwendet eine ListView, die eine Liste der Schaltflächen enthält. Die zweite Aktivität enthält eine Scrollansicht mit Schaltflächen. Der Rest ist die gleiche, die gleiche Anzahl von Tasten, die gleiche Höhe der Elemente usw.

Nun, wenn ich die Suchtaste drücken Sie die Sucheingabeleiste zu öffnen, in meine ersten Aktivität, wird das gesamte Layout nach oben bewegt, . Während der zweiten Aktivität wird das Layout nicht nach oben verschoben, aber das Softkeyboard wird nur oben angezeigt. Das ist eigentlich, wie ich will, dass es sich verhält. Wie kann ich dasselbe mit meiner Aktivität erreichen, die den ListView verwendet?

In meinem Manifest habe ich zunächst keine android:windowSoftInputMode Attribut angegeben, aber selbst wenn ich es tue, macht es keinen Unterschied; Ich habe alle drei Werte ausprobiert (adjustPan, adjustResize, adjustUndefined, ohne Unterschied).

Dies ist mein Layout:

1) http://pastebin.com/5zzVxjbK

2) http://pastebin.com/KFtPuHvP

Interessanter: wenn ich in meinem Layout 1 (links meine Listview Sichtbarkeit gesetzt) ​​zu View.INVISIBLE, dann das Layout wird nicht nach oben verschoben!

alt text

+0

@Mathias Lin: Ich denke, Sie müssen etwas Code posten. nur 'listview' und' scrollview' machen nichts? Mein Vermutung ist das Layout abhängig. – Praveen

+0

Hier ist der Code, die 'Button-Sektion' heißt in beiden Fällen android: id = "@ + id/category_questions", nicht sicher, ob das der relevante Teil ist. 1) http://pastebin.com/5zzVxjbK, 2) http://pastebin.com/KFtPuHvP –

+0

Ja, ich bin sicher, es hat mit dem Layout zu tun, aber wie? Die Android-Entwickler-Dokumentation sagt in dieser Hinsicht nicht viel. –

Antwort

0

Ich kann dies mit einem RelativeLayout erreichen und Einstellung android:windowSoftInputMode="adjustPan" wie so:

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

    <include android:id="@+id/Header" layout="@layout/header" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

    <ListView android:id="@+id/android:list" android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:layout_below="@id/Header" 
     android:layout_above="@+id/Footer" /> 

    <include android:id="@id/Footer" layout="@layout/footer" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" /> 
</RelativeLayout> 

Sie der Lage sein kann, dies achive durch die Fußzeile Schwerkraft (oder layout_gravity) auf "unten" Wenn du das LinearLayout behalten willst, bin ich mir nicht sicher.

+0

Ich habe andere Aktivitäten (d. H. Mit einer ListView, die den Bildschirm 90% füllt, mit nur einem kleinen Bereich für eine Registerkarte Kopfzeile) in meiner App, wo das äußere Layout ein lineares Layout ist, und ich den Effekt nicht dort erleben. Ich sehe es nur in einigen der Aktivitäten. Ich glaube, Ihr Layout oben funktioniert, aber ich würde gerne die Logik dahinter verstehen, damit ich weiß, wie ich das vorhandene LinearLayout ändern kann und/oder was genau dieses Verhalten verursacht. Ich bin mir sicher, dass es Umgehungslösungen gibt, aber ich möchte nicht die Symptome bekämpfen, sondern die Herkunft selbst. –

+0

Haben Sie versucht, die Schwerkraft des Fußes (layout_gravity): "bottom" mit "adjustPan"? –

+0

Es scheint, dass ListViews "in Sicht" verschoben werden, wenn sie nicht am unteren Bildschirmrand verankert sind, und verwenden Sie adjustPan. Dieses Standardverhalten verhindert, dass Listenelemente von der Tastatur abgedeckt werden. –