EditText 在 CardView 中不起作用

EditText is not working in CardView

我正在尝试将 EditText 或 AppCompatEditText 放入 CardView 中,但 EditText 没有获得焦点。无法找到我在布局中丢失的内容。

        <android.support.v7.widget.CardView
            android:id="@+id/card_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="14dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="14dp"
            app:cardBackgroundColor="@color/color_secondary_ultra_light">
            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/edit_username"
                android:padding="10dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@null"
                android:drawablePadding="4dp"
                android:drawableTint="@android:color/darker_gray"
                android:drawableRight="@mipmap/ic_person_black_24dp"
                android:hint="Username"
                android:inputType="textWebEmailAddress"
                android:maxLines="1"
                android:textColorHint="@android:color/darker_gray"
                android:textSize="18sp"
                android:focusable="true"
                android:clickable="true"/>
        </android.support.v7.widget.CardView>

已发布的解决方案 here 不适用于我的情况。

不要使用 A​​ppCompatEditText 而是使用 EditText 它将默认使用 AppCompatEditText

<android.support.v7.widget.CardView
            android:id="@+id/card_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="14dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="14dp"
            app:cardBackgroundColor="@color/color_secondary_ultra_light">
            <EditText
                android:id="@+id/edit_username"
                android:padding="10dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@null"
                android:drawablePadding="4dp"
                android:drawableTint="@android:color/darker_gray"
                android:drawableRight="@mipmap/ic_person_black_24dp"
                android:hint="Username"
                android:inputType="textWebEmailAddress"
                android:maxLines="1"
                android:textColorHint="@android:color/darker_gray"
                android:textSize="18sp"
                android:focusable="true"
                android:clickable="true"/>
        </android.support.v7.widget.CardView>

您可以查看 A​​ppCompatEditText 文档,EditText 默认使用它。

This will automatically be used when you use EditText in your layouts. You should only need to manually use this class when writing custom views.

使用编辑文本而不是 AppCompatEditText。

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="10dip"
    android:paddingRight="10dip"
    >
 <EditText
        android:id="@+id/Edit"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:inputType="textCapSentences|textMultiLine"
        android:overScrollMode="always"
        android:scrollbarStyle="insideInset"
        android:scrollbars="vertical"

        />
</LinearLayout>

</android.support.v7.widget.CardView>

虽然此处的解决方案应该有效,但您可以使用 hack 来节省时间。 在您的代码中:

        EditText et = (EditText)findViewById(R.id.editTextId); 
        et.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                    ((EditText) view).requestFocus();
                    InputMethodManager imm = (InputMethodManager) 
                                       getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
             }
        });

但在使用它之前,请确保您的 EditText 没有被其他视图重叠。这可能是不需要此解决方法的问题。

我已将 android:descendantFocusability="beforeDescendants" 属性 放入 CardView 中,现在它可以正常工作了。

感谢大家的努力