【问题标题】:Color change dependent of an action (Button click)取决于动作的颜色变化(按钮单击)
【发布时间】:2017-01-16 21:10:15
【问题描述】:

如何在 Android Studio (Java) 中创建一个 Switch 按钮,当其状态为 ON 时更改其轨道颜色(例如,黑色处于 ON 状态,红色处于 OFF 状态)。

我已经尝试访问 tack.xmlcolor.xml 中的颜色,但它不知道每次打开/关闭按钮时如何更改它们,尤其是切换轨道的背景颜色(我是已经能够改变整个 Btn 的背景)。你知道如何改变 Switch 轨道的背景颜色吗?

这是我的代码(MainActivity)的重要部分:

private TextView switchState;
private Switch mySwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    switchState = (TextView)findViewById(R.id.switchState);
    mySwitch = (Switch)findViewById(R.id.mySwitch);
    track = (trackColor)findViewById(R.id.trackColor);   //**!!

    // set the Switch to off
    mySwitch.setChecked(false);
    //now you need a listener to check changes in state
    mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                switchState.setText("Switch is ON!");

                mySwitch.setBackgroundColor(Color.RED);

                trackColor.setBackgroundColor(Color.RED); //**!!


            }else{
                switchState.setText("Switch is OFF!"); 



            }
        }
    });

}

}

(!!) 它无法解析符号 tracktrackColor,我无法解释原因。

track.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <size android:height="40dp"  />
    <gradient
        android:id="@+id/trackColor"/>
    <gradient
        android:height="40dp"
        android:startColor="#2979FF"
        android:endColor="#FFFF00"/>

</shape>

【问题讨论】:

    标签: android android-layout colors android-resources


    【解决方案1】:

    你可以用java代码来做:

    Button button = (Button) findViewById(R.id.buttonId);
    

    然后可以使用setOnClicklistener方法检测点击,使用setBackGroundColor方法改变按钮颜色。

    【讨论】:

    • 感谢您的回答。有效。但是在我尝试更改 Switch Btn 轨道的颜色后,它失败了,我不知道为什么。我编辑了我的问题,以便您可以看到我的代码。
    • 我不明白它在哪里或如何失败...能解释一下是什么问题吗?而且我们看不到足够的代码,你有“else”语句吗?
    • 我编辑了我的问题。现在你也可以看到“else”语句了(但没有问题,问题是它无法解析符号tracktrackColor
    • 你应该在变量的开头声明:private int track;然后track = (Integer) findViewById(R.id.trackcolor);
    • 谢谢。但是我如何能够访问android:startColor="#2979FF"android:endColor="#FFFF00"。我怎样才能改变它们(因为它们已经有了固定的颜色)? @PaLaSeul
    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 2022-01-15
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多