我使用带有3个片段的ViewPager。 第一个只有文字。 第二个是输入字段。 第三,只有文字。
初始化ViewPager时,显示软键盘,因为焦点设置为输入字段。 如果我改变片段的顺序,则不显示软键盘。
如何使用ViewPager控制焦点和软键盘?
此致
答案 0 :(得分:6)
到目前为止,我发现的最佳解决方案是在您的活动清单中使用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
技巧,因为当您向后滑动到无输入片段时,键盘不会被隐藏。虽然我想你可以将它与上面的代码结合起来。
答案 1 :(得分:1)
我确信有更好的方法可以做到这一点,但我遇到了同样的问题,我通过将父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>
答案 2 :(得分:0)
感谢所有人,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>