ChatGPT解决这个技术问题 Extra ChatGPT

Disabling the fullscreen editing view for soft keyboard input in landscape?

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.

https://i.imgur.com/MB623.png

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.

Let try to see it. It's good for you. [Look to this one][1] [1]: stackoverflow.com/questions/8648401/…
i have a similar problem :( you might have any idea? stackoverflow.com/questions/36914290/…
how to apply this throughout the whole app.We are not going to add the attribute-value in every edittext in xml.
Many of the answers below recommend using flagNoExtractUi or IME_FLAG_NO_EXTRACT_UI. However,in the documentation for IME_FLAG_NO_EXTRACT_UI, which corresponds to flagNoExtractUi, it states that "Using this flag is discouraged and it may become deprecated in the future", so flagNoFullscreen is the recommended option.

j
jnic

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.
}

just simply put in your xml file android:imeOptions="flagNoExtractUi"
jnic, where did you do that override at in the soft keyboard code? SoftKeyboard.java? I tried the same override and error'd out.
You'll probably want to add the flag to the options instead of overriding what ever options were being passed in like this: outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
@user726518 how to apply this attribute on the searchbox item in action bar ?
The only thing worked when using custom View to handle keyboard. Thanks!
M
Marcin Orlowski

To do that, navigate to activity xml and paste android:imeOptions="flagNoExtractUi" in your code. But where should it 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


FYI EditorInfo.IME_FLAG_NO_EXTRACT_UI suggests using IME_FLAG_NO_FULLSCREEN instead.
M
Michael Yaworski

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


This answer is too short and doesn't meet SO quality standards. Please improve it adding some additional explanations, so that it will be useful for the community and not only for the OP.
@LorenzoDonati it's exactly what you have to do... it's a very simple answer because the solution is very simple and it's just a different way of doing it than the answers above. Also, answers can't be "too short" unless they don't answer the question, IMO.
Sorry, but this is not what the SO community thinks about it. The answers should not be limited to solve the OP's problem, they should be great answers in general. See this and this, for example.
@LorenzoDonati it is a very specific question with only one end result (but multiple ways to solve it). My answer is an addition to the other answers on this page. ALL of the answers on this page are only limited to the "OP's problem" because that's the only kind of answer that can be written. Like I said, it's specific and simple.
finally, i found the answer. thank you so much @mike yaworski
A
Abdo

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

r
ridoy

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


nice and better approach to write in xml. Works for me. Thanks
Note that in the documentation for IME_FLAG_NO_EXTRACT_UI, which corresponds to flagNoExtractUi, it states that "Using this flag is discouraged and it may become deprecated in the future", so flagNoFullscreen is the recommended option.
M
Maxime Ancelin

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);

P
Pang

My solution:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

This is a more up-to-date answer.
S
Suragch

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);
}

A
Arefeh Iravanchi

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!


T
Thientvse

You can use :

android:imeOptions="flagNoFullscreen" 

in your edittext


Is this an answer?
I try it and it work for me! (My device is android 4.1.2)
E
Eduard Malakhov

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();

关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now