EditText在CardView中不起作用

时间:2016-11-14 12:04:17

标签: android android-edittext focus android-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在我的案例中不起作用。

5 个答案:

答案 0 :(得分:2)

请勿使用 AppCompatEditText 使用 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>

您可以查看 AppCompatEditText 文档,默认情况下EditText会使用它。

  

在布局中使用EditText时,将自动使用此选项。   编写自定义时,您只需要手动使用此类   视图。

答案 1 :(得分:1)

我已将android:descendantFocusability="beforeDescendants"属性放在 CardView 中,现在它正常运行。

感谢所有人的努力。

答案 2 :(得分:0)

使用编辑文本代替AppCompatEditText。

答案 3 :(得分:0)

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

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

        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没有被其他一些视图重叠。这可能是一个不需要这种解决方法的问题。