Disabling the fullscreen editing view for soft key

2019-01-01 05:10发布

问题:

On Android devices that use soft keyboards, I want to prevent the fullscreen keyboard editing view (shown below) from appearing when in landscape mode (i.e. I want to see only the soft keyboard itself and my view behind it).

I assume this can be achieved using the setExtractViewShown(false) method on InputMethodService, but I am unable to access the default instance of this and do not want to implement a custom input method.

\"Android

Edited to add: the view to which input is going is not a TextView (it\'s a View with a custom InputConnection implementation), so android:imeOptions=\"flagNoExtractUi\" won\'t work here.

回答1:

I finally answered my own question:

The extract UI (i.e. the fullscreen editing mode) can be disabled at the point at which the input connection is hooked up:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}


回答2:

To do that simply navigate to activity xml and paste android:imeOptions=\"flagNoExtractUi\" in your code. Hmm pretty simple - but where the hac it should be pasted? Have look at code of example activity xml and look at 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>

If you want more customisation options for the keyboard see http://developer.android.com/guide/topics/ui/controls/text.html



回答3:

add the property android:imeOptions=\"flagNoExtractUi\" to each EditText in your XML file.



回答4:

The answer above helped me figure out the solution for dynamically added EditTexts:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);


回答5:

Use android:imeOptions=\"flagNoFullscreen\" to achieve that feature.



回答6:

Also, if you want to combine multiple imeOptions programaticaly, you can use the | syntax.

For example, in order to disable the fullscreen edit view in landscape and replace \"Next\" key by \"OK\" (ACTION_DONE) in keyboard, you can use:

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


回答7:

If you\'re modifying the IME directly you can prevent it from ever displaying an ExtractedView by overriding onUpdateExtractingVisibility:

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


回答8:

I know it\'s a little bit late but for anyone who is still interested, here is my solution : In my case I had a landscape Activity containing an EditText at top of it and I needed to implement autocomplete feature in this search Activity, which the overlapping keyboard caused an issue that the user could not see result of RecyclerView. So I ended up having this EditText in my 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!



回答9:

You can use :

android:imeOptions=\"flagNoFullscreen\" 

in your edittext



回答10:

My solution:

android:imeOptions=\"flagNoExtractUi|flagNoFullscreen\"


回答11:

You can call to hide soft keyboard and clear focus from searchview.

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

super.clearFocus();