可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.
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();