如何在Android中的片段中完美展示软键盘?

如何在Android中的片段中完美展示软键盘?,第1张

概述我在Activity中的Fragment中有一个EditText. 我的活动布局: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_ 我在Activity中的Fragment中有一个EditText.

我的活动布局:

<?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中的片段中完美展示软键盘?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1138038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存