永久更改按钮颜色

时间:2018-01-08 07:41:05

标签: android

我正在尝试学习Android Studio。现在我正在编写一个简单的应用程序,按下按钮后会播放声音(像木琴一样)。 你能帮我解决以下问题吗?我想改变按下的按钮的颜色UNTIL下一个按下(例如,首先所有按钮都是红色,按下一个按钮将颜色改为绿色,它是绿色,直到按下下一个按钮。 我已经在drawable中创建了xml文件,它们负责更改按钮的颜色,按下它时,但它并不是我想要的。我需要一个解决方案,将按钮保持绿色直到按下下一个按钮。

这是我的main_activity文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.adecostres.doremi.MainActivity">

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <Button
                android:id="@+id/button_do"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:elevation="0dp"
                android:background="@drawable/my_button"
                android:textColor="@android:color/white"
                android:onClick="PlaySound_1"
                android:text="DO" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <Button
                android:id="@+id/button_re"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:background="@drawable/my_button"
                android:textColor="@android:color/white"
                android:elevation="0dp"
                android:onClick="PlaySound_1"
                android:text="RE" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <Button
                android:id="@+id/button_mi"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:background="@drawable/my_button"
                android:textColor="@android:color/white"
                android:elevation="0dp"
                android:onClick="PlaySound_1"
                android:text="MI" />
        </TableRow>

    </TableLayout>

</android.support.constraint.ConstraintLayout>

3 个答案:

答案 0 :(得分:2)

首先创建点击侦听器功能,处理所有按钮点击,然后在里面编写此代码,迭代布局中的每个视图,并检查你的按钮

  for (int i = 0; i < your_layout.getChildCount(); i++) {
        View view = your_layout.getChildAt(i);
        if (view instanceof Button){
            if (view.getId() == R.id.your_clicked_button_id){
                view.setBackgroundColor(Color.GREEN);
            }else {
            view.setBackgroundColor(Color.RED);
        }
    }

这会将您的所有按钮颜色更改为红色,但您点击的按钮将为绿色

答案 1 :(得分:0)

试试这个,

维护一个全局按钮对象,说“globalButton”。

如果有任何按钮按下(例如“pressedButton”),请按照以下步骤操作

  1. if(globalButton!= null)将globalButton更改为绿色
  2. 将pressedButton更改为红色
  3. globalButton = pressedButton

答案 2 :(得分:0)

感谢您的所有反馈。现在,我想出了这个解决方案(MainActivity.java中的方法,负责按下按钮后播放声音:

public void PlaySound_1 (View v)
    {
        int sound = 0;
        dzwiek_do.setBackgroundColor(Color.RED);
        dzwiek_re.setBackgroundColor(Color.RED);
        dzwiek_mi.setBackgroundColor(Color.RED);

        if (dzwiek_do.getId() == v.getId())
        {
            sound = sound_do;
            dzwiek_do.setBackgroundColor(Color.GREEN);

        }
        else if (dzwiek_re.getId() == v.getId())
        {
            sound = sound_re;
            dzwiek_re.setBackgroundColor(Color.GREEN);

        }
        else if (dzwiek_mi.getId() == v.getId())
        {
            sound = sound_mi;
            dzwiek_mi.setBackgroundColor(Color.GREEN);

        }

        playSound(this, sound);

    }