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 不适用于我的情况。
不要使用 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 默认使用它。
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 中,现在它可以正常工作了。
感谢大家的努力
我正在尝试将 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 不适用于我的情况。
不要使用 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 默认使用它。
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 中,现在它可以正常工作了。
感谢大家的努力