我在Android编程方面是全新的,为了能够为旧的(android 2.3.3)设备生成应用程序,我在布局上有点乱。我在android studio的GUI编辑器中搞砸了很多东西(在我看来)是一个非常漂亮的GUI。我才注意到我在API 23中工作。这导致我的旧设备(API 10)完全搞砸了GUI,然后我开始更改所有内容,这样对于我想开发的设备来说它至少看起来不错对于。
我使用了垂直导向的LinearLayout
,在其中放置了一些TextView
和一个Chronometer
以及最后一个(我的问题的原因)a ToggleButton
单击时更改了颜色。我的ToggleButton代码如下:
<ToggleButton android:id="@+id/toggleButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="10dip"
android:enabled="true"
android:background="@drawable/toggle_button"
android:button="@android:drawable/ic_btn_speak_now"
android:buttonTint="#FFFFFF"
android:textAllCaps="false"
android:textOn="@string/toggle_on"
android:textOff="@string/toggle_off"
android:textColor="#FFFFFF"
android:gravity="center" />
在这段代码中,ic_btn_speak_now
是我在系统绘图中找到的一些扬声器图标。另一方面toggle_button
是由我写的,看起来如下:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@drawable/toggle_color" />
<corners android:radius="5dip" />
</shape>
其中toggle_color
看起来像是:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#669900"
android:state_checked="true" />
<item android:color="#cc0000"
android:state_checked="false" />
</selector>
这导致这个非常好看的按钮适用于API 23,但无法用于API 10.
我一直在四处寻找,并且到处都有其他解决方案和其他原因导致某些事情无效。我尝试了很多东西,但没有任何结果可行。我甚至省略了我的按钮的漂亮形状,希望我能够实现变色,但我也没办法做到这一点。
因此可以问我的问题如下:
赞赏每一点帮助。
答案 0 :(得分:0)
我不知道为什么我的代码不起作用,但我设法通过以编程方式更改形状来轻松解决它。因此,我在res/drawable
文件夹中创建了两个形状(每种颜色一个),如下所示:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#cc0000" />
<corners android:radius="5dip" />
</shape>
这将是red_toggle.xml
,我用另一种颜色做同样的事情green_toggle.xml
。我的ToggleButton
被更改为在点击时调用onToggle()
方法,最终看起来像:
<ToggleButton android:id="@+id/toggleButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="10dip"
android:onClick="onToggle"
android:padding="15dp"
android:background="@drawable/toggle_button"
android:button="@android:drawable/ic_btn_speak_now"
android:buttonTint="#FFFFFF"
android:textAllCaps="false"
android:textOn="@string/toggle_on"
android:textOff="@string/toggle_off"
android:textColor="#FFFFFF"
android:gravity="center" />
在我的Activity
中,我使用此方法onToggle()
执行以下操作:
public void onToggle(View view) {
//only togglebutton should be calling this method
if(((ToggleButton) view).isChecked()) {
toggle.setBackgroundResource(R.drawable.red_toggle);
} else {
toggle.setBackgroundResource(R.drawable.green_toggle);
}
}
这实际上就是我所需要的......