我的活动布局:
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="@drawable/login_bg"> ... <FrameLayout androID:ID="@+ID/fragment_container" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"/> ...</relativeLayout>
AndroIDManifest.xml中的我的Activity配置:
<activity androID:name="com.demo.LoginActivity" androID:configChanges="orIEntation|keyboardHIDden" androID:launchMode="singletop" androID:screenorIEntation="portrait" androID:theme="@style/activitytheme" />
用于在Activity中启动片段的代码:
private voID startFragment(BaseFragment fragment,String tag) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.ID.fragment_container,fragment); fragmentTransaction.addToBackStack(tag); fragmentTransaction.commitAllowingStateLoss();}
我的片段布局:
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="@color/common_background_color_white" androID:orIEntation="vertical" androID:clickable="true" androID:paddingleft="@dimen/email_common_padding_horizontal" androID:paddingRight="@dimen/email_common_padding_horizontal"> ... <com.example.Widget.lineEditVIEw androID:ID="@+ID/login_email_input" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:focusable="true" /> ...</linearLayout>
我的自定义小部件lineEditVIEw是一个子类扩展relativeLayout,它的布局:
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/input" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content"> <EditText androID:ID="@+ID/edit" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:focusable="true" androID:gravity="start|center_vertical" androID:background="@androID:color/transparent" androID:textcolor="@color/common_text_color_black" androID:maxlines="1" androID:textCursorDrawable="@drawable/common_cursor_background_orange" androID:textSize="@dimen/email_fIElds_text_size" androID:paddingBottom="@dimen/email_fIElds_text_padding_bottom"/> <VIEw androID:ID="@+ID/underline" androID:layout_below="@ID/edit" androID:layout_wIDth="match_parent" androID:layout_height="2px"/></relativeLayout>
我想根据EditText的inputType属性显示软键盘,并且可以轻松隐藏.
我尝试过但不工作或不完美:
1.根据Show keyboard for edittext when fragment starts可以显示软键盘但不能轻易隐藏(有时甚至无法隐藏)并且它根据EditText的inputType属性显示键盘.
2.我将以下代码添加到My Fragment:
@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container) { mEditText = (EditText) rootVIEw.findVIEwByID(R.ID.edit); mEditText.requestFocus(); mEditText.setFocusable(true);}@OverrIDepublic voID onResume() { mEditText.postDelayed(mShowSoftinputRunnable,400); super.onResume();}private Runnable mShowSoftinputRunnable = new Runnable() { @OverrIDe public voID run() { FragmentActivity activity = getActivity(); if (activity == null) return; inputMethodManager input = (inputMethodManager) activity.getSystemService(Context.input_METHOD_SERVICE); input.showSoftinput(mEditText,inputMethodManager.SHOW_IMPliCIT); }};
但它在我的片段中根本无法显示软键盘.
我不能将EditText放到Activity中,因为它需要重构很多代码.
有没有人有想法解决这个问题?
解决方法 这是我使用的代码,它在Fragments中运行得非常好public static voID hIDeKeyboard(Context context) { try { ((Activity) context).getwindow().setSoftinputMode(WindowManager.LayoutParams.soFT_input_STATE_ALWAYS_HIDDEN); if ((((Activity) context).getCurrentFocus() != null) && (((Activity) context).getCurrentFocus().getwindowToken() != null)) { ((inputMethodManager) context.getSystemService(Context.input_METHOD_SERVICE)).hIDeSoftinputFromWindow(((Activity) context).getCurrentFocus().getwindowToken(),0); } } catch (Exception e) { e.printstacktrace(); }}public static voID showKeyboard(Context context) { ((inputMethodManager) (context).getSystemService(Context.input_METHOD_SERVICE)).toggleSoftinput(inputMethodManager.SHOW_FORCED,inputMethodManager.HIDE_IMPliCIT_ONLY);}总结
以上是内存溢出为你收集整理的如何在Android中的片段中完美展示软键盘?全部内容,希望文章能够帮你解决如何在Android中的片段中完美展示软键盘?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)