La disattivazione della visualizzazione a pieno schermo di modifica per l'input tastiera virtuale nel paesaggio?

StackOverflow https://stackoverflow.com/questions/4336762

Domanda

dispositivi su Android che utilizzano tastiere molli, voglio evitare che la tastiera a schermo intero editing vista (vedi sotto) di apparire in modalità paesaggio (cioè voglio vedere solo la tastiera software stesso e la mia vista dietro di esso).

Presumo che ciò può essere realizzato utilizzando il metodo setExtractViewShown(false) su InputMethodService, ma sono in grado di accedere l'istanza predefinita di questo e non voglio implementare un metodo di input personalizzato.

modifica fullscreen Android vista

A cura di aggiungere:. la vista a quale ingresso sta andando non è un TextView (è un View con un'implementazione InputConnection personalizzato), quindi android:imeOptions="flagNoExtractUi" non funziona qui

È stato utile?

Soluzione

I infine ha risposto alla mia domanda:

L'interfaccia utente estratto (cioè la modalità di modifica schermo intero) può essere disattivata in corrispondenza del punto in cui la connessione di ingresso è alto agganciato:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

Altri suggerimenti

Per fare ciò, individuare l'attività xml e incollare android:imeOptions="flagNoExtractUi" nel codice. Ma dove dovrebbe essere incollato? Dai un'occhiata al codice di esempio attività di xml e sguardo a 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>

Se volete maggiori opzioni di personalizzazione per la tastiera vedere http: / /developer.android.com/guide/topics/ui/controls/text.html

aggiungere il android:imeOptions="flagNoExtractUi" proprietà per ciascun EditText nel file XML.

La risposta di cui sopra mi ha aiutato a capire la soluzione per EditTexts aggiunti in modo dinamico:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

Usa android:imeOptions="flagNoFullscreen" per conseguire tale funzione.

Inoltre, se si desidera combinare più imeOptions programaticaly, è possibile utilizzare il | sintassi.

Per esempio, al fine di disattivare la vista edit fullscreen nel paesaggio e sostituire il tasto "Avanti" con "OK" (ACTION_DONE) in tastiera, è possibile utilizzare:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);

Se si sta modificando direttamente l'IME si può impedire che mai la visualizzazione di un ExtractedView sovrascrivendo onUpdateExtractingVisibility :

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}

Lo so che è un po 'tardi, ma per chi è ancora interessato, qui è la mia soluzione: Nel mio caso ho avuto un paesaggio attività che contiene un EditText nella parte superiore di esso e avevo bisogno di implementare completamento automatico funzionalità di questa ricerca attività , che il sovrapposizione tastiera causato un problema che l'utente non può vedere risultato di RecyclerView . Così ho finito per avere questo EditText nel mio layout:

<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />

Cheers!

È possibile utilizzare:

android:imeOptions="flagNoFullscreen" 

nel vostro EditText

La mia soluzione:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

È possibile chiamare per nascondere la tastiera morbida e chiara messa a fuoco da SearchView.

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

super.clearFocus();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top