如何隐藏片段内的软键盘?
我有一个使用ViewPager
服务几个片段的FragmentActivity
。 每个是具有以下布局的ListFragment
:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp"> <ListView android:id="@id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <EditText android:id="@+id/entertext" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
当开始活动时,软键盘显示。 为了解决这个问题,我在片段内部做了以下操作:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //Save the container view so we can access the window token viewContainer = container; //get the input method manager service imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); . . . } @Override public void onStart() { super.onStart(); //Hide the soft keyboard imm.hideSoftInputFromWindow(viewContainer.getWindowToken(), 0); }
我保存来自onCreateView
的传入ViewGroup container
参数,作为访问主活动的窗口标记的一种方法。 这运行没有错误,但键盘不隐藏调用hideSoftInputFromWindow
中的hideSoftInputFromWindow
。
最初,我尝试使用膨胀的布局,而不是container
,即:
imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);
但是这抛出了NullPointerException
,大概是因为片段本身不是一个活动,并没有一个唯一的窗口标记?
有没有办法隐藏片段内的软键盘,或者我应该在FragmentActivity
创build一个方法,并从片段内调用它?
只要你的Fragment创build了一个View,你可以在附加后使用该视图中的IBinder(窗口标记)。 例如,你可以覆盖你的Fragment中的onActivityCreated:
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); }
没有什么,但下面的代码行为我工作:
getActivity().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
如果您将以下属性添加到您的活动的清单定义中,它将完全禁止在您的活动打开时popup键盘。 希望这有助于:
(添加到您的活动的清单定义):
android:windowSoftInputMode="stateHidden"
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_my, container, false); someClass.onCreate(rootView); return rootView; }
在我的课堂上保留一个我的根视图的实例
View view; public void onCreate(View rootView) { view = rootView;
使用视图来隐藏键盘
public void removePhoneKeypad() { InputMethodManager inputManager = (InputMethodManager) view .getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); IBinder binder = view.getWindowToken(); inputManager.hideSoftInputFromWindow(binder, InputMethodManager.HIDE_NOT_ALWAYS); }
但是,对于DialogFragment
,例外情况是embedded式Dialog
焦点必须隐藏,而不是embedded式Dialog
的第一个EditText
this.getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
在Fragemnt工作这个代码
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);