EditText 获得焦点时软键盘不出现的问题

Issue with soft keyboard not appearing when EditText gains focus

我有一个 EditText,当用户点击它时是否出现软键盘似乎有所不同,我不明白为什么。

原来我的布局是这样的,按预期会出现键盘。用户单击 EditText,内容将突出显示,键盘将显示,一些自定义代码也会 运行。但是,由于我正在尝试更改布局,特别是将 LinearLayout 从水平方向更改为垂直方向,因此它已停止工作。现在,当用户点击 EditText 时,内容仍然突出显示,但键盘不显示。

这里是代码工作的 XML 处。只需将方向更改为 'vertical' 并修改 height/width 并移除重量就足以阻止键盘显示。我最初将 focusable/focusableintouchmode 添加到父级 RelativeLayout,因为我遇到了 Activity 启动时 EditText 立即获得焦点的问题,这解决了问题。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ocrmain_group_select_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true" android:focusableInTouchMode="true" >

<LinearLayout android:id="@+id/ocrmain_group_select_costholder"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" >

    <ImageView android:id="@+id/ocrmain_group_select_item"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="15"
        android:layout_gravity="left" />

    <EditText android:id="@+id/ocrmain_group_select_cost"
        android:focusable="true" android:focusableInTouchMode="true"
        android:layout_weight="5"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:selectAllOnFocus="true"
        android:imeOptions="actionDone"
        android:inputType="numberDecimal" />

</LinearLayout>

基本上我想把它改成这样:

<LinearLayout android:id="@+id/ocrmain_group_select_costholder"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" >

    <ImageView android:id="@+id/ocrmain_group_select_item"
        android:layout_margin="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText android:id="@+id/ocrmain_group_select_cost"
        android:layout_gravity="end"
        android:layout_marginTop="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="true" android:focusableInTouchMode="true"
        android:selectAllOnFocus="true"
        android:imeOptions="actionDone"
        android:inputType="numberDecimal" />

</LinearLayout>

这是我在用户点击时使用的一些自定义代码。

private class myCostBoxChangedListener implements EditText.OnEditorActionListener {

    @SuppressLint("NewApi")
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

        //ScrollView sView = (ScrollView) ((RelativeLayout)v.getParent().getParent()).getChildAt(1);
        //TableLayout tView = (TableLayout) sView.getChildAt(0);

        if (actionId == EditorInfo.IME_ACTION_DONE) {
            v.clearFocus();
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            calculateCheckedDialogCosts();
        }
        return false;
    }
}

我也实现了 onFocusListener,但它 运行 是一些代码,其唯一作用是在按下 'Done' 按钮时解析并可能修改 EditText 的内容。

感谢所有帮助!

我解决了我自己的问题:我将以下代码插入到我的 onFocusChangeList 中:

private class myCostBoxFocusListener implements View.OnFocusChangeListener {
    public void onFocusChange(View v, boolean hasFocus) {

        if (hasFocus) {
            InputMethodManager imm = (InputMethodManager) getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(v, InputMethodManager.SHOW_FORCED);

现在,当单击 EditText 时,它会突出显示并且会出现键盘以便立即编辑。甜