1

我正在尝试将按钮背景与资源文件进行比较。例如,我有按钮

按钮

        <Button
        android:id="@+id/btnGenre"
        android:layout_width="110dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        android:background="@drawable/frame_genre"
        android:text="POST"
        android:padding="16dp"
        android:focusable="true"
        android:clickable="true"/>

背景有drawable/frame_genre。我正在尝试将此背景与 Resouce 文件进行比较。

例如

Drawable btnBackground = holder.btnGenre.getBackground();
if(btnBackground.getConstantState() == (getResources().getDrawable(R.drawable.frame_genre).getConstantState())){
                   Toast.makeText(context, "WORKED", Toast.LENGTH_SHORT).show();
               }

那么这个if语句检查按钮有什么背景。如果是,frame_genre那么它应该继续到块。

在我的情况下,背景按钮是frame_genre并且if语句应该是 TRUE。但是由于某种原因,当我记录按钮背景Log.d(TAG, btnBackground.getConstantState().toString());frame_genre Log.d(TAG,getResources().getDrawable(R.drawable.frame_genre).getConstantState())

它打印两个不同的内存位置。

毕竟,我不明白为什么我指向的是同一个文件,即frame_genre. 谁能向我解释有什么不同?

而且我正在寻找一种检查按钮的方法,因为我想在单击后更改其背景。

4

1 回答 1

1

您需要在 drawable 中创建选择器,它是一个 xml 文件。将您的不同图像设置为可绘制状态,例如按下、正常或选中等

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btnGenre_selected" android:state_selected="true"></item>
<item android:drawable="@drawable/btnGenre_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/btnGenre_normal"></item>

</selector>

将此 xml 作为按钮的背景。

        <Button
    android:id="@+id/btnGenre"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginEnd="16dp"
    android:background="@drawable/selector_xml_name"
    android:text="POST"
    android:padding="16dp"
    android:focusable="true"
    android:clickable="true"/>

以编程方式在您的 btnGenre 上的 clickListner 上编写以下代码,

if (Objects.equals(btnGenre.getBackground().getConstantState(), this.getResources().getDrawable(R.drawable.btnGenre_selected).getConstantState()))
{
   star.setBackground(R.drawable.btnGenre_normal);
}else {
  star.setBackground(R.drawable.btnGenre_selected);
}
于 2020-04-15T15:12:47.903 回答