片段中未显示Android EditText键盘

时间:2015-05-11 05:56:21

标签: android android-layout android-fragments android-edittext android-softkeyboard

我在EditText添加了Fragment,但即使点击EditText,我的EditText也没有显示键盘。

这是我的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white">

    <EditText
        android:id="@+id/setting_nickname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="8"
        android:gravity="right"
        android:hint="Samantha"
        android:textColorHint="@color/nav_selected"
        android:textSize="14dp"
        android:textColor="@color/nav_selected"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" >
    </EditText>

    <EditText
        android:id="@+id/setting_country"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="8"
        android:gravity="right"
        android:hint="Samantha"
        android:textColorHint="@color/nav_selected"
        android:textSize="14dp"
        android:textColor="@color/nav_selected"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" >
    </EditText>

</LinearLayout>

我试图听取EditText

的听众
final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
edit_nickname.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        imm.showSoftInput(edit_nickname, 0);

        //edit_nickname.requestFocus();  --> fail
        //imm.showSoftInput(edit_nickname, InputMethodManager.SHOW_IMPLICIT);  --> fail
        //imm.showSoftInput(edit_nickname, InputMethodManager.SHOW_FORCED);  --> fail
    }
});

此代码未能......

final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

另外,我尝试添加LinearLayoutfocusableInTouchModefocusable,但失败了。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginTop="10dp"
    android:padding="10dp"
    android:background="@color/black_transparent"
    android:focusableInTouchMode="true"
    android:focusable="true">
    <EditText .../>
    <EditText .../>
</LinearLayout>

如果我使用<requestFocus />而不是键盘,但它仅适用于EditText中的一个。我能怎么做?为什么不显示键盘?

4 个答案:

答案 0 :(得分:1)

Try using this, it works for me

EditText myEd= (EditText)getActivity().findViewById(R.id.myEd);
myEd.requestFocus(); 
InputMethodManager mgr = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(myEd, InputMethodManager.SHOW_IMPLICIT);

答案 1 :(得分:0)

尝试在单独的线程或处理程序中执行以下代码。

 editText.postDelayed(new Runnable() {
                @Override
                public void run() {

                    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    if(imm != null)
                    imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
                }
            },1000);

答案 2 :(得分:0)

我建议您调用您的代码:

InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            keyboard.showSoftInput(edit_nickname, 0);

通过实现EditText触摸列表器方法,您得到如下结果:

edit_nickname.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            keyboard.showSoftInput(edit_nickname, 0);


            return false;
        }
    });

答案 3 :(得分:0)

试试这个..

<c:if test="${commandName == 'credentials' && empty credentials.username}">
    <c:set target="${credentials}" property="username" value="${param.netid}" />
</c:if>

希望这会有所帮助......