繁体   English   中英

Android ViewPager 在错误的地方显示软键盘

[英]Android ViewPager show soft keyboard in the wrong place

我使用带有 3 个片段的 ViewPager。 第一个只有文本。 第二个,输入框。 第三,只有文字。

当 ViewPager 初始化时,显示软键盘,因为焦点设置在输入字段。 如果我更改片段的顺序,则不会显示软键盘。

如何使用 ViewPager 控制焦点和软键盘?

问候

到目前为止,我发现的最佳解决方案是在您的活动清单中使用android:windowSoftInputMode="stateHidden" ,然后将其添加到您的活动中。

@Override
public void onPageScrollStateChanged(int state)
{
    if (state == ViewPager.SCROLL_STATE_IDLE)
    {
        if (mViewPager.getCurrentItem() == 0)
        {
            // Hide the keyboard.
            ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
                .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0);
        }
    }
}

我没有使用onPageSelected()因为隐藏键盘动画与滑动动画有关。 而且我没有使用android:focusable技巧,因为当您滑回无输入片段时键盘不会隐藏。 虽然我想你可以将它与上面的代码结合起来。

我确信有更好的方法来做到这一点,但我遇到了同样的问题,我通过将父View设置为可聚焦来解决它。 这样,当您在页面之间滑动时,导致软键盘弹出的任何原因都不会获得焦点......

<!-- Dummy item to prevent your View from receiving focus -->
<LinearLayout
    ...
    android:focusable="true" 
    android:focusableInTouchMode="true" />

    <!-- The view(s) that are causing the keyboard to pop up each time you swipe -->
    <EditText ... />

</LinearLayout>

感谢大家,Timmmm 非常有帮助。 我终于把所有东西都整理好了,得到了一个完整的软键盘隐藏解决方案,用于标签滑动。 我有 4 个标签,每个标签上都有 editTexts,我需要在滑动时隐藏键盘。 我已将此添加到片段布局中:

<!--Fixes keboard pop-up-->
<LinearLayout
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@android:color/transparent"
    android:focusable="true"
    android:focusableInTouchMode="true">
</LinearLayout>

这已添加到活动代码中(注意与 Timmmm 的回答略有不同:我没有

mViewPager.getCurrentItem() == 0

在这里,因为我需要为每个视图隐藏键盘:

// When swiping between different sections, select the corresponding
    // tab. We can also use ActionBar.Tab#select() to do this if we have
    // a reference to the Tab.
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            if (actionBar != null) {
                actionBar.setSelectedNavigationItem(position);
            }
        }
        @Override
        public void onPageScrollStateChanged(int state)
        {
            if (state == ViewPager.SCROLL_STATE_IDLE)
            {
                // Hide the keyboard.
                ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
                        .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0);

            }
        }
    });

这是 AndroidManifest.xml 中的一个活动:

<activity
        android:name=".TestActivity"
        android:label="@string/title_activity_test"
        android:parentActivityName=".MainActivity"
        android:windowSoftInputMode="stateHidden">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.atrinax.test.MainActivity" />
</activity>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM