当EditText获得焦点时,软键盘不会出现问题

时间:2015-01-20 17:10:55

标签: android keyboard focus

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

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

这里是代码工作的XML。只需将方向更改为“垂直”'并修改高度/宽度和移除重量足以阻止键盘显示。我最初将focusable / focusableintouchmode添加到父RelativeLayout中,因为我遇到了EditText在Activity启动时立即获得焦点的问题,这解决了这个问题。

<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,但它运行了一些代码,它们的唯一作用是解析并在“完成”时修改EditText的内容。按下按钮。

所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

我解决了自己的问题:我将以下代码插入到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时,它会突出显示并且键盘会立即进行编辑。甜。