关于android:当使用ViewPager可见Fragment时,EditText会自动打开软键盘

EditText automatically opens soft keyboard when Fragment is visible with ViewPager

我有一个Fragment(兼容版本),其布局中带有EditText。 我正在使用ViewFlipper在片段之间翻转。 当我到达这个特定的Fragment时,软键盘会自动打开。 这不是我想要的。 这是我试图阻止它或隐藏它。

尝试:

1
android:descendantFocusability="beforeDescendants"

在片段的主视图上

尝试:

1
android:windowSoftInputMode="stateHidden"

1
android:windowSoftInputMode="stateAlwaysHidden"

在活动的清单中

尝试:

1
2
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mViewPager.getChildAt(position).getWindowToken(), 0);

在我的ViewPager的OnPageChangeListener上

尝试:

1
2
InputMethodManager imm = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(voucherView.findViewById(R.id.redeem_mobile_number).getWindowToken(), 0);

在我的片段中的onCreateView中

尝试:

1
2
InputMethodManager imm = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().findViewById(R.id.redeem_mobile_number).getWindowToken(), 0);

在我的片段中的onStart中

尝试:

1
voucherView.findViewById(R.id.redeem_mobile_number).clearFocus();

在我的片段中的onCreateView中

在我看来,onPageChangeListener就是这样做的地方,因为其他调用在软键盘实际打开之前发生。 任何帮助都会很棒。


这篇文章解决了这个问题。

答案是将android:focusableInTouchMode="true"添加到包含EditTextLinearLayout。现在它不会自动调出软键盘。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 <LinearLayout
         android:id="@+id/layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:focusable="true"
        android:focusableInTouchMode="true"        
        >

    <EditText
        android:id="@+id/retailer_search_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

</LinearLayout>

跟着它吧。 EditText应该在LinearLayout中。


你试过这个吗?

1
2
3
4
<activity
    android:name=".YourActivityName"
    android:configChanges="keyboardHidden|orientation"
    android:windowSoftInputMode="stateHidden" />

编辑:

试试这个(我现在这是一个糟糕的但尝试这个):)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Thread splashTread = new Thread() {
        @Override
        public void run() {
            try {

                sleep(1);
            } catch (InterruptedException e) {
                // do nothing
            } finally {
                runOnUiThread(new Runnable() {
                    public void run() {
                        InputMethodManager imm = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(youreditText.getWindowToken(), 0);

                    }
                });

            }
        }
    };
    splashTread.start();


当我点击片段视图中的编辑文本时,我有一个软键盘令人不安地弹出并推动所有视图(我的应用程序是嵌套片段的应用程序 - 片段中的片段)

我在这里和互联网上尝试了十几种解决方案,但除此之外没有任何帮助,这是用XML编辑EditText本身(不是上面的视图/不是清单/不是覆盖创建活动/不是任何其他)

通过将android:focusableInTouchMode="false"行添加到EditText的xml中。

我在这个帖子上借用了ACengiz的解决方案

如何在android中点击edittext时阻止虚拟键盘?

只有2人投票给他?虽然对我而言,经过几个小时的头痛后,它仍然是一个救星


将其添加到AndroidManifest.xml中的活动代码中
keyboardHidden:不会让它自动打开软键盘。

1
2
android:configChanges="orientation|keyboardHidden|screenSize"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize|stateHidden"

试试这个

1
exitText.setFocusableInTouchMode(true);


这对我有用。

1
2
3
4
5
6
edittext.setInputType(InputType.TYPE_NULL);      
if (android.os.Build.VERSION.SDK_INT >= 11)  
{  
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
    edittext.setTextIsSelectable(true);  
}