Wyłączanie widoku edycji pełnoekranowej dla miękkiego wprowadzania klawiatury w krajobrazie?

Na urządzeniach z Androidem, które używają miękkich klawiatur, chcę zapobiec wyświetlaniu widoku edycji klawiatury pełnoekranowej (pokazanego poniżej) w trybie poziomym (tj. chcę zobaczyć tylko samą miękką klawiaturę i mój widok za nią).

Zakładam, że można to osiągnąć za pomocą metody setExtractViewShown(false) Na InputMethodService, ale nie jestem w stanie uzyskać dostępu do domyślnej instancji this I nie chcę implementować niestandardowej metody wprowadzania.

Widok edycji pełnoekranowej Androida

Edited to add: the view to which input is nie jest to TextView (jest to View z niestandardową implementacją InputConnection), więc android:imeOptions="flagNoExtractUi" tutaj nie będzie działać.

Author: jnic, 2010-12-02

11 answers

I w końcu odpowiedziałem na własne pytanie:

Interfejs wyciągu (tj. tryb edycji pełnoekranowej) może być wyłączony w punkcie, w którym połączenie wejściowe jest podłączone:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}
 155
Author: jnic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 16:47:21

Aby to zrobić, po prostu przejdź do activity xml i wklej android:imeOptions="flagNoExtractUi" do kodu. Hmm dość proste - ale gdzie hac to powinno być wklejone? Spójrz na kod przykładowej aktywności xml i spójrz na EditText:

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

    <EditText
        android:imeOptions="flagNoExtractUi"
        android:id="@+id/etTextInAct"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >   
        <requestFocus />
    </EditText>

</LinearLayout>

Jeśli chcesz więcej opcji dostosowywania klawiatury zobacz http://developer.android.com/guide/topics/ui/controls/text.html

 86
Author: pbaranski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-02 06:20:03

Dodaj Właściwość android:imeOptions="flagNoExtractUi" do każdego EditText w pliku XML.

 57
Author: Michael Yaworski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 02:19:10

Powyższa odpowiedź pomogła mi znaleźć rozwiązanie dla dynamicznie dodawanych Edittextów:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
 49
Author: Abdo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-02 11:59:26

Użyj android:imeOptions="flagNoFullscreen", aby osiągnąć tę funkcję.

 33
Author: ridoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-25 17:28:24

Ponadto, jeśli chcesz programowo połączyć wiele imeopcji, możesz użyć składni/.

Na przykład, aby wyłączyć pełnoekranowy widok edycji w krajobrazie i zastąpić klawisz" Next "przez" OK " (ACTION_DONE) na klawiaturze, możesz użyć:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
 11
Author: Maxime Ancelin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-08 09:15:49

Jeśli modyfikujesz bezpośrednio IME, możesz uniemożliwić wyświetlanie widoku wyodrębnionego przez nadpisanie onUpdateExtractingVisibility:

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}
 9
Author: ObsidianX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 02:34:23

Wiem, że jest trochę późno, ale dla każdego, kto jest nadal zainteresowany, oto moje rozwiązanie : W moim przypadku miałem Landscape Activity zawierające EditTextna górze i musiałem zaimplementować funkcję autouzupełniania w tym wyszukiwaniu Activity, które nakładanie się klawiatury spowodowało problem, że użytkownik nie mógł zobaczyć wyniku RecyclerView. Więc skończyło się na tym EditText w moim layoucie:

<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />
Zdrówko!
 4
Author: Arefeh Iravanchi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-16 15:16:59

Możesz użyć :

android:imeOptions="flagNoFullscreen" 

In your edittext

 3
Author: Thientvse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-27 02:54:48

Moje rozwiązanie:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"
 1
Author: dastan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 01:58:28

Możesz wywołać, aby ukryć miękką klawiaturę i wyczyścić ostrość z widoku wyszukiwania.

public void hideKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

super.clearFocus();
 0
Author: mohamed elagamy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-10 15:35:58