[英]Programmatically Hide Soft Keyboard in ViewPager.OnPageChangeListener onPageSelected()?
我有一個帶標簽的ViewPager + ActionBar。 當我“滑動”到另一個標簽時,我想隱藏軟鍵盤,但我無法弄清楚如何。
我已經將我的Activity傳遞給FragmentPageAdapter的構造函數,所以我可以調用
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
但它沒有做任何事情(並且它位於代碼的可到達區域)...幫助?
在您的活動中,您可以執行以下操作:
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
final InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mView.getWindowToken(), 0);
}
@Override
public void onPageScrolled(int position, float offset, int offsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
我沒有使用onPageSelected()
因為隱藏鍵盤動畫與滑動動畫一起使用。 而是使用onPageScrollStateChanged()
:
@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);
}
}
}
一般的方法:
private void hideVirturalKeyboard(){
View v = getCurrentFocus();
if (v != null && v instanceof EditText) {
InputMethodManager mgr = (InputMethodManager)(v.getContext().getSystemService(Context.INPUT_METHOD_SERVIC
E));
mgr.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
簡單方法:
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
在我的情況下片段活動以下工作正常。
((CommentActivity)getActivity()).pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(txtComment.getWindowToken(), 0);
}
@Override
public void onPageScrolled(int position, float offset, int offsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
更新:這是我的片段活動,其中兩個片段(CommentFragment,AnotherFragment)在ViewPager中打開
public class CommentActivity extends FragmentActivity {
ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pager = (ViewPager) findViewById(R.id.viewPager);
.......
.......
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return CommentFragment.newInstance();
default: return AnotherFragment.newInstance();
}
}
@Override
public int getCount() {
return 2;
}
}
}
如果在CommentFragment中為EditText顯示鍵盤,並且想要切換到AnotherFragment並且想要在切換時隱藏鍵盤
public class CommentFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
.........
.........
.........
((CommentActivity)getActivity()).pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(txtComment.getWindowToken(), 0);
}
@Override
public void onPageScrolled(int position, float offset, int offsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.