如何通过第一次单击更改 CardView 的边框颜色并在第二次单击时再次变回以前的颜色 Android?
How to change the border color of CardView by first clicking and again change back to previous color on Second click Android?
如何使用选择器而不是更改背景来做到这一点?
if(isSelected) {
binding.cvStainMaster.setBcackgroundResource(R.drawable.boarder_blue_corner);
binding.btnStart.setBackgroundResource(R.drawable.bg_button_primary);
isSelected = false;
}else{
binding.cvStainMaster.setBackgroundColor(Color.WHITE);
binding.btnStart.setBackgroundResource(R.drawable.button_background_with_corner);
isSelected = true;
}
我已经通过更改背景完成了。但我希望它使用选择器
使用 androidx.cardview.widget.CardView
没有任何 属性 来改变 border/stroke 颜色,但是你可以使用 Material Design Library 中的 com.google.android.material.card.MaterialCardView
来实现它,这是androidx.cardview.widget.CardView
(MaterialCardView extends CardView
).
的子类
要在你的项目中添加 MaterialCardView
首先你必须添加指向最新版本的 Material 设计库的 grandle depedency,如:implementation 'com.google.android.material:material:1.5.0'
并且你的应用程序主题必须继承来自 Theme.MaterialComponents.*
.
现在 MaterialCardView
您可以使用 app:strokeColor
属性设置指向颜色选择器的 stroke/border 颜色,以根据卡片 checked/unchecked 更改边框颜色state 和 app:strokeWidth
来设置笔划宽度。要激活 android:state_checked=true/false
状态,您还必须添加属性 android:checkable="true"
并且使用 app:checkedIconSize="0dp"
您可以删除默认的 checked-stated 图标。下面是一个用法示例:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/materialCardView"
android:layout_width="80dp"
android:layout_height="100dp"
android:checkable="true"
app:cardBackgroundColor="@android:color/holo_green_light"
app:cardForegroundColor="@android:color/transparent"
app:checkedIconSize="0dp"
app:cardCornerRadius="10dp"
app:cardElevation="2dp"
app:strokeWidth="4dp"
app:strokeColor="@color/card_border_selector"/>
</RelativeLayout>
其中 @color/card_border_selector
在 res/color/card_border_selector.xml
中定义如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/holo_orange_light" android:state_checked="true"/>
<item android:color="@android:color/holo_blue_light" android:state_checked="false"/>
</selector>
并且每次单击 MaterialCardView
时,您都必须使用 materialCardView.setChecked()
函数更改状态,如下例所示:
MaterialCardView materialCardView = findViewById(R.id.materialCardView);
materialCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
materialCardView.setChecked(!materialCardView.isChecked());
}
});
android:state_checked=false
的结果:
android:state_checked=true
的结果:
如何使用选择器而不是更改背景来做到这一点?
if(isSelected) {
binding.cvStainMaster.setBcackgroundResource(R.drawable.boarder_blue_corner);
binding.btnStart.setBackgroundResource(R.drawable.bg_button_primary);
isSelected = false;
}else{
binding.cvStainMaster.setBackgroundColor(Color.WHITE);
binding.btnStart.setBackgroundResource(R.drawable.button_background_with_corner);
isSelected = true;
}
我已经通过更改背景完成了。但我希望它使用选择器
使用 androidx.cardview.widget.CardView
没有任何 属性 来改变 border/stroke 颜色,但是你可以使用 Material Design Library 中的 com.google.android.material.card.MaterialCardView
来实现它,这是androidx.cardview.widget.CardView
(MaterialCardView extends CardView
).
要在你的项目中添加 MaterialCardView
首先你必须添加指向最新版本的 Material 设计库的 grandle depedency,如:implementation 'com.google.android.material:material:1.5.0'
并且你的应用程序主题必须继承来自 Theme.MaterialComponents.*
.
现在 MaterialCardView
您可以使用 app:strokeColor
属性设置指向颜色选择器的 stroke/border 颜色,以根据卡片 checked/unchecked 更改边框颜色state 和 app:strokeWidth
来设置笔划宽度。要激活 android:state_checked=true/false
状态,您还必须添加属性 android:checkable="true"
并且使用 app:checkedIconSize="0dp"
您可以删除默认的 checked-stated 图标。下面是一个用法示例:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/materialCardView"
android:layout_width="80dp"
android:layout_height="100dp"
android:checkable="true"
app:cardBackgroundColor="@android:color/holo_green_light"
app:cardForegroundColor="@android:color/transparent"
app:checkedIconSize="0dp"
app:cardCornerRadius="10dp"
app:cardElevation="2dp"
app:strokeWidth="4dp"
app:strokeColor="@color/card_border_selector"/>
</RelativeLayout>
其中 @color/card_border_selector
在 res/color/card_border_selector.xml
中定义如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/holo_orange_light" android:state_checked="true"/>
<item android:color="@android:color/holo_blue_light" android:state_checked="false"/>
</selector>
并且每次单击 MaterialCardView
时,您都必须使用 materialCardView.setChecked()
函数更改状态,如下例所示:
MaterialCardView materialCardView = findViewById(R.id.materialCardView);
materialCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
materialCardView.setChecked(!materialCardView.isChecked());
}
});
android:state_checked=false
的结果:
android:state_checked=true
的结果: