2010-12-13 11 views
20

Mam układ, który używa EditText, aby umożliwić użytkownikom przeszukiwanie bazy danych i zapełnianie listy. EditText jest około 2/3 drogi od góry ekranu (umieszczony nad ImageView i poprzedzony jakimś tekstem intro).Ukrywanie SoftKeyboard EditText

Problem polega na tym, że miękka klawiatura ukrywa EditText, dzięki czemu użytkownik może " t zobaczyć, co pisze. (Wyłączyłem autodopasowanie.)

Próbowałem LinearLayout, RelativeLayout, paddings i różnych linii trasowania/centrowania, ale nadal nie mogę go uruchomić poprawnie. EditText jest albo ukryty, zostaje zepchnięty z górnej części ekranu, albo zostaje "zgnieciony" i zniekształcony.

Sugestie ???

Jednym z możliwych obejść jest przeniesienie EditText na górę ekranu. To jednak odbiega od projektu graficznego, który otrzymałem.

Innym możliwym obejściem jest dla mnie, aby klawiatura była otwarta na pełnym ekranie (ale nie wiem jak). To nadal będzie ukrywać EditText, ale mogę ponownie włączyć automatyczne sugestie, aby użytkownik mógł zobaczyć, co pisze ... coś w rodzaju ... ponieważ widzi tylko sugestie dla tego, co pisze.

Oto moja ostatnia próba. Zobacz "introFrame".

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
android:orientation="vertical"> 

<LinearLayout android:id="@+id/titleContainer" 
    android:orientation="horizontal" android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TextView android:text="@string/title_string" 
    android:textSize="15sp" android:textColor="#FFFFFF" 
    android:textStyle="bold" android:paddingLeft="5dp" 
    android:layout_height="fill_parent" android:layout_width="wrap_content" /> 
</LinearLayout> 

<FrameLayout 
android:id="@+id/introFrame" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:gravity="center_horizontal" > 
<ImageView 
    android:src="@drawable/main_search_image" 
    android:scaleType="center" 
    android:layout_gravity="center" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"/> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:paddingTop="140dp" > 
    <LinearLayout android:id="@+id/introSearchContainer" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" > 
    <LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" > 
    <EditText android:id="@+id/intro_search_box" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:hint="  Enter keyword  " 
    android:imeOptions="actionGo" 
    android:inputType="textFilter" 
    android:maxLines="1" /> 
    </LinearLayout> 
    <LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
    <Button android:id="@+id/intro_search_button" 
    android:background="@drawable/custom_button_go" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
    </LinearLayout> 
    </LinearLayout> 
    <TextView 
    android:text="@string/search_intro" 
    android:textSize="15sp" 
    android:textColor="#FFFFFF" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" /> 
</LinearLayout> 
</FrameLayout> 

<LinearLayout android:id="@+id/listContainer" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView android:id="@+id/itemlist" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:cacheColorHint="#00000000" /> 
    <TextView android:text="No data found" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:gravity="center" 
    android:textSize="16sp" android:textColor="#FFFFFF" android:id="@+id/android:empty" /> 
</LinearLayout> 

</LinearLayout> 
+0

Oto jak rozwiązał mój problem http://stackoverflow.com/a/29408773/3595514 – Rajendra

Odpowiedz

56

To, czego szukasz, to atrybut Działanie: windowSoftInputMode. Zostanie określona w pliku AndroidManifest.xml i nadać mu wartość takich jak:

  • adjustResize: „Okno główne aktywności jest zawsze zmieniany aby zrobić miejsce na miękkiej klawiatury na ekranie”.

  • adjustPan: „Okno główne aktywności nie jest zmieniany, aby zrobić miejsce na klawiaturze programowej Przeciwnie, zawartość okna są automatycznie przesuwane tak, że obecny nacisk nie jest zasłonięte przez klawiaturę, a użytkownicy mogą zawsze zobaczyć co. są na ogół mniej pożądane niż zmiana rozmiaru, ponieważ użytkownik może potrzebować zamknąć miękką klawiaturę, aby uzyskać dostęp do ukrytych części okna i wchodzić z nimi w interakcję. "

adjustResize prawdopodobnie zadziała dla Ciebie, o ile zawiniesz układ w ScrollView. Może to mieć negatywne skutki, jeśli obraz bitmapowy będzie wyświetlany w tle, ponieważ zostanie również zmieniony, w takim przypadku możesz użyć polecenia adjustPan.

<activity android:windowSoftInputMode="adjustResize" /> 

lub

<activity android:windowSoftInputMode="adjustPan" /> 

Więcej informacji jest dostępnych pod powyższym linkiem.

+5

nie działa dla mnie w Fragmentie jako dziecko FragmentActivity. – Bobbelinio

+0

to nie działa, gdy aplikacja działa w trybie pełnoekranowym. –

1

try nadając tekstowi edytować layout_weight (tj layout_weight = 1), to może mieć jakieś inne efekty na innych elementów układu, które mogą mieć do pracy, ale może to pomóc pozostać widoczne, gdy klawiatura wyskakuje:

13

To, co zadziałało, to zrzucić linijkę LinearLayout najwyższego poziomu w scrollView (ScrollView może mieć tylko jedno dziecko). Pozwoliło to na przewinięcie całej aktywności/formularza i nie zaśmiecenie EditText z fokusem.

Po pierwsze, ja się w mojej działalności:

<activity android:windowSoftInputMode="adjustPan" /> 

Potem zrobiłem rzecz Scrollview mówię:

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

    <!-- STUFF --> 

    </LinearLayout> 
</ScrollView> 
+0

Nie działa dla mnie na ICS. Każdy pomysł, jeśli dodanie stanu ukryte do windowSoftInputMode może powodować ten problem? –

+0

+1 Nareszcie! "Scrollview" był dla mnie kluczem. Dzięki! – rendon

+0

nie działa dla mnie w Fragmentie jako dziecko FragmentActivity. – Bobbelinio

2

wystarczy użyć następujących w oczywisty ...

<activity 
     android:windowSoftInputMode="adjustPan"> 
Powiązane problemy