2012-12-26 21 views
19

Ich baue derzeit eine Android-Anwendung, mit der Benutzer Bilder aufnehmen und Details davon schreiben können. Die Anwendung verwendet Sherlock-Bibliotheken.Probleme mit EditText und Soft-Tastatur in einem Fragment

Ich habe ein SherlockFragment implementiert, um das Bild und einige EditText und TextView anzuzeigen, damit Benutzer Informationen des Bildes eingeben können. Wenn jedoch einer der EditText im Fokus ist, werden alle Felder hochgedrückt und die Soft-Tastatur erscheint.

Hier ist mein Layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linear" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="#FFFFFF"> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="fill_parent" 
     android:layout_height="200dip" 
     android:layout_above="@+id/textView" 
     android:layout_marginTop="20dip" 
     android:layout_marginBottom="20dip" 
     android:contentDescription="desc" /> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Title:" 
     android:textStyle="bold" 
     android:layout_above="@+id/editTextSimple" 
     android:layout_marginBottom="2dip" 
     android:textSize="15sp"/> 

    <EditText 
     android:id="@+id/editTextSimple" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/textView1" 
     android:layout_marginBottom="4dip"> 
     <requestFocus /> 
    </EditText> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Description:" 
     android:textStyle="bold" 
     android:layout_above="@+id/editTextSimple1" 
     android:layout_marginBottom="2dip" 
     android:textSize="15sp"/> 

    <EditText 
     android:id="@+id/editTextSimple1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/textView2" 
     android:layout_marginBottom="12dip"> 
    </EditText> 

    <Button android:textColor="#FF000000" 
     android:id="@+id/submitButton" 
     android:text="@string/memorySubmit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="24dip" 
     android:onClick = "submit"/> 
</RelativeLayout> 

Von dem, was ich verstehe, in einer Tätigkeit, man diese <activity android:windowSoftInputMode="...." > im Android Manifest platzieren müssen, um die Ansicht einzustellen, wenn die Soft-Tastatur aufgerufen wird. Wie stellen wir dies jedoch für Fragmente ein?

Antwort

9

Alle Fragmente eines Activity haben das gleiche Verhalten wie ihre Eltern Activity, aber wenn Sie für verschiedene Fragments unterschiedliche Verhalten der Tastatur benötigen, könnten Sie dynamisch diese Eigenschaft von Ihrem Fragment Code wie folgt ändern:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.softInputMode.SOFT_INPUT_ADJUST_PAN); 

Hoffnung das hilft!

+0

Hallo Evos! Vielen Dank für Ihre Antwort! Leider funktioniert es immer noch nicht. Ich denke, das Problem könnte an dem "android: layout_above" liegen, obwohl ich mir da nicht ganz sicher sein kann. – user1140240

+0

Haben Sie versucht, in Ihrem Manifest verschiedene Variationen dieses Parameters zu setzen? – Evos

+1

tat ich. Ich erkannte, dass das Problem im Layout selbst und nicht in der Tastatur liegt. Also habe ich eine Scroll-Ansicht implementiert und es funktioniert! Danke für deine Hilfe trotzdem. – user1140240

51

Dies funktionierte für mich in einem Szenario, in dem ich mehrere Layouts und einen Viewstub verwendete, um einen Messaging-Bildschirm zu erstellen. Platziere das in onCreate() Hoffe das hilft.

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 
+1

arbeitete für mich und speicherte meinen Tag. Fügen Sie einen Kommentar hinzu, damit andere wissen, dass das funktioniert. – dmSherazi

+1

@ kenodoggy das ist für mich beim ersten Mal geöffnet, aber wenn ich klicke und beginne, den Text einzugeben, dann ist mein Layout wieder nach oben drücken. Wie löst man das? Bitte lassen Sie es mich wissen, wenn Sie es wissen. – siva

+0

Das ist, was ich gesucht habe. Perfekt funktioniert aus einem Fragment –

2

versuchen diese getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

8

Dies kann in Fragment-Klasse verwendet werden, um den Text bearbeiten und Scroll bis Ende zu bewegen.

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
1

Ich habe dieses Problem auch in meinem Projekt auftreten, habe ich mein Projekt mit Fragmenten und Tabs entwickelt,

Wenn wir relativ Layout nehmen und oben und unten Abhängigkeit und zuletzt Taste halten mit

android: layout_alignParentBottom = "true"

dann wird es Ausgabe machen, ist die Lösung die Scrollview innerhalb Wurzel Linear oder Rel nehmen ative Layout und innerhalb ScrollView nehmen Sie eine untergeordnete Ansicht als linear oder relativ und legen Sie die gesamte Ansicht unter RelativeLayout (wenn relativ in der untergeordneten Ansicht genommen) oder keine Abhängigkeit in linear festlegen.

, dass es, es funktioniert ... :)

-1
android:launchMode="singleTask" 
    android:windowSoftInputMode="adjustPan" 

diese Änderung in manifest funktioniert gut für mich

+0

Dies wird für Aktivität funktionieren, aber er sucht nach Benutzerfragmenten ..... – NagarjunaReddy

1
android:windowSoftInputMode="adjustPan" 

die Fragmente dieser Tätigkeit im Zusammenhang Alle verhalten sich gleich, wenn Sie wollen um das Verhalten von pertikulären Fragment als das folgende zu ändern

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 
Verwandte Themen