当 ViewPager 显示 Fragment 时 EditText 自动打开软键盘

Posted

技术标签:

【中文标题】当 ViewPager 显示 Fragment 时 EditText 自动打开软键盘【英文标题】:EditText automatically opens soft keyboard when Fragment is visible with ViewPager 【发布时间】:2012-07-04 21:08:31 【问题描述】:

我有一个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);

在我的 Fragment 中的 onCreateView 中

试过了:

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

在我的 Fragment 中的 onStart 中

试过了:

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

在我的 Fragment 中的 onCreateView 中

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

【问题讨论】:

在片段中隐藏键盘尝试: InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0); P.S inputSearch 是 EditText 字段 嗨@Mike T,在我的情况下,当软键盘弹出选项卡也移动到键盘顶部时,我正在使用带有viewpager的tablayout以及5个片段页面,我尝试了上面提到的所有内容,但我仍然没有得到答案..请帮助我 @Vijaykumar 如果我在下面的回答没有帮助,那么我就没有主意了。对不起 【参考方案1】:

This帖子有解决问题的办法。

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

【讨论】:

非常好,短而干净。谢谢【参考方案2】:
 <LinearLayout 
         android:id="@+id/layout"
        android:layout_
        android:layout_
         android:focusable="true" 
        android:focusableInTouchMode="true"         
        >

    <EditText
        android:id="@+id/retailer_search_text"
        android:layout_
        android:layout_
         />

</LinearLayout>

跟着它走。并且 EditText 应该在 LinearLayout 内。

【讨论】:

我想要的是如何在显示键盘后将焦点设置在搜索字段上!【参考方案3】:

你试过了吗?

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

【讨论】:

android:configChanges 和 android:windowSoftInputMode 的组合很重要。 您的编辑在我第一次滑动到 Fragment 的视图时有效,但之后就无效了。这绝对不是正确的做法 我知道这不是正确的方法..:) 但我也最终得到了这个肮脏的解决方案。在 onPageChangeListener 上尝试我的编辑?它适用于我的情况。 那是我尝试过的地方。它第一次起作用,但在那之后就不行了。【参考方案4】:

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

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

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

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

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

只有 2 人投票给他?虽然对我来说,在头疼了几个小时后,这是一个节省

【讨论】:

【参考方案5】:

将此添加到您在AndroidManifest.xml 中的活动标签中 keyboardHidden:不会让它自动打开软输入键盘。

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

【讨论】:

【参考方案6】:

这对我有用。

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

【讨论】:

【参考方案7】:

试试这个

exitText.setFocusableInTouchMode(true);

【讨论】:

以上是关于当 ViewPager 显示 Fragment 时 EditText 自动打开软键盘的主要内容,如果未能解决你的问题,请参考以下文章

Android Fragment + ViewPager的懒加载实现

ViewPager+Fragment第二次进入显示空白

解决ViewPager缓存导致不能实时刷新数据

如何在同一页面上的 Fragment 内创建具有 3 个 Fragment 的 ViewPager?

当 ViewPager 中的 Fragment 从 BackStack 保留时 WebView 重新加载

ViewPager + Fragment + savedInstanceState