使用ViewPager可见Fragment时,EditText会自动打开软键盘

时间:2012-07-04 11:02:17

标签: android

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

试过:

android:descendantFocusability="beforeDescendants" 

在片段的主视图

试过:

android:windowSoftInputMode="stateHidden"

android:windowSoftInputMode="stateAlwaysHidden"

在活动的清单中

尝试:

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

在我的ViewPager的OnPageChangeListener

尝试:

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

在片段中的onCreateView

尝试:

InputMethodManager imm = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().findViewById(R.id.redeem_mobile_number).getWindowToken(), 0);
在我的片段中的onStart中

尝试:

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

在片段中的onCreateView

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

7 个答案:

答案 0 :(得分:77)

This帖子解决了这个问题。

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

答案 1 :(得分:8)

 <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中。

答案 2 :(得分:5)

你试过这个吗?

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

编辑:

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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

android:focusableInTouchMode="false"行添加到EditText的xml。

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

how to block virtual keyboard while clicking on edittext in android?

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

答案 5 :(得分:0)

这对我有用。

edittext.setInputType(InputType.TYPE_NULL);      
if (android.os.Build.VERSION.SDK_INT >= 11)   
{  
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
    edittext.setTextIsSelectable(true);  
}

答案 6 :(得分:0)

试试这个

exitText.setFocusableInTouchMode(true);