你如何获得按钮的背景颜色?
How do you get the background color of a button?
如何获取按钮的背景颜色?我尝试了以下方法:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = findViewById(R.id.button);
btn1.setBackgroundColor(getResources().getColor(R.color.red));
//color red is added to colors.xml <color name="red">#FF0000</color>
btn1.setOnClickListener(v -> {
ColorDrawable btnColor = (ColorDrawable) btn1.getBackground();
int clr = btnColor.getColor();
if (clr == getResources().getColor(R.color.red)) {
String line = "it's red";
btn1.setText(line);
}
});
}
}
当我点击按钮时,应用程序关闭,我得到这个
java.lang.ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable
谁能解释我做错了什么?
ColorDrawable buttonColor = (ColorDrawable) button.getBackground();
int colorId = buttonColor.getColor();
if (colorID == R.color.green) {
log("color is green");
}
使用上面的方法你可以找到一个按钮颜色。
您可以将其作为可绘制对象获取:
Button mButton = (Button) findViewById(R.id.button);
Drawable buttonBackground = mButton.getBackground();
如果它是一种颜色,你可以这样做:
ColorDrawable btnColor = (ColorDrawable) button.getBackground();
取出颜色的资源id:
Int color = btnColor.getColor();
然后将其与您的颜色进行比较:
if (color == R.color.green) {
log("color is green");
}
由于您使用的是 MaterialComponents
主题,因此您的 Button
在运行时被 MaterialButton
替换。
使用 setBackgroundTintList
代替 setBackgroundColor
并使用 getBackgroundTintList()
检索ColorStateList
.
类似于:
MaterialButton button = findViewById(R.id.button);
button.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.red600)));
ColorStateList colorStateList = button.getBackgroundTintList();
int defaultColor = colorStateList.getColorForState(
new int[] { android.R.attr.state_enabled},0);
如何获取按钮的背景颜色?我尝试了以下方法:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = findViewById(R.id.button);
btn1.setBackgroundColor(getResources().getColor(R.color.red));
//color red is added to colors.xml <color name="red">#FF0000</color>
btn1.setOnClickListener(v -> {
ColorDrawable btnColor = (ColorDrawable) btn1.getBackground();
int clr = btnColor.getColor();
if (clr == getResources().getColor(R.color.red)) {
String line = "it's red";
btn1.setText(line);
}
});
}
}
当我点击按钮时,应用程序关闭,我得到这个
java.lang.ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable
谁能解释我做错了什么?
ColorDrawable buttonColor = (ColorDrawable) button.getBackground();
int colorId = buttonColor.getColor();
if (colorID == R.color.green) {
log("color is green");
}
使用上面的方法你可以找到一个按钮颜色。
您可以将其作为可绘制对象获取:
Button mButton = (Button) findViewById(R.id.button);
Drawable buttonBackground = mButton.getBackground();
如果它是一种颜色,你可以这样做:
ColorDrawable btnColor = (ColorDrawable) button.getBackground();
取出颜色的资源id:
Int color = btnColor.getColor();
然后将其与您的颜色进行比较:
if (color == R.color.green) {
log("color is green");
}
由于您使用的是 MaterialComponents
主题,因此您的 Button
在运行时被 MaterialButton
替换。
使用 setBackgroundTintList
代替 setBackgroundColor
并使用 getBackgroundTintList()
检索ColorStateList
.
类似于:
MaterialButton button = findViewById(R.id.button);
button.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.red600)));
ColorStateList colorStateList = button.getBackgroundTintList();
int defaultColor = colorStateList.getColorForState(
new int[] { android.R.attr.state_enabled},0);