我的应用程序中有一些不同颜色的开关控件,并且我使用多个自定义可绘制选择器来更改颜色.
随着AppCompat v21库的发布,引入了一个新的android.support.v7.widget.SwitchCompat控件.
是否可以在没有客户可绘制选择器的情况下以编程方式更改SwitchCompat的颜色,但是使用XML或代码?
我试图TextView在用户触摸它时更改Android 小部件的背景颜色.我已经为此创建了一个选择器,它存储在res/color/selector.xml大致看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="@color/semitransparent_white"
/>
<item
android:color="@color/transparent"
/>
</selector>
Run Code Online (Sandbox Code Playgroud)
在clickable该属性TextView就是true那的利益,以备不时之需.
当我将此选择器分配给TextViewas时android:background="@color/selector",我在运行时遇到以下异常:
ERROR/AndroidRuntime(13130):引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#6:标记需要一个'drawable'属性或定义drawable的子标记
当我将属性更改为drawable时,它可以工作,但结果看起来完全错误,因为ID似乎被解释为图像引用而不是颜色引用(如"drawable"所示).
令我困惑的是,我可以直接设置颜色参考,例如"@ color/black"作为背景属性.这是按预期工作的.使用选择器不起作用.
我也可以使用选择器作为textColor没有问题.
TextView在Android中应用背景颜色选择器的正确方法是什么?
我是Android开发的新手,也是Android主题/定制的新手,看起来是一个广泛的主题......
我正在尝试给我的Switch组件一个特殊的外观和感觉,但我无法实现我想要的东西,avan在互联网上查找了很多资源.
这真让我抓狂!!
在此先感谢您的帮助,Android大师!
我在一个现有的android应用程序(v1)上工作,它是minSdkVersion ="8".
因此,应用程序使用第三方库来获取操作栏(ActionBar Sherlock)和开关(SwitchCompatLibrary):
今天,我们正在制作v2版本,minSdkVersion ="14".
我们的客户还要求我们更改默认的开关外观.
这看起来真的像最新的材料设计开关,但用橙色代替"绿 - 蓝"颜色,就像这里一样.
由于我们现在是minSdk 14,我们可以删除2个库"ActionBarSherlock"和"SwitchCompatLibrary",但这不是一个选项.的确,我们没有时间......
实际上,我尝试在我的项目的gradle文件appcompat-v7中添加依赖项,以便尝试使用带有材质主题的本机开关组件(请参阅此处),但这会因为重复的属性定义而提到错误,并提到了2个库以上.所以我不能用它,我不确定这应该有用......
dependencies {
(...)
compile project(':actionbarsherlock')
compile project(':switchCompatLibrary')
compile files('libs/android-support-v4.jar')
// incompatible avec actionbarsherlock and SwitchCompatLibrary...
// compile "com.android.support:appcompat-v7:22.0.+"
(...)
}
Run Code Online (Sandbox Code Playgroud)
所以这是执行代码.
在我的layout.xml文件中,我使用SwitchCompatLibrary开关:
<de.ankri.views.Switch
android:id="@+id/switchButtonNotification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true" />
Run Code Online (Sandbox Code Playgroud)
在我的themes.xml文件中:
<style name="Theme.Orange" parent="@style/Theme.Sherlock">
...
<!-- Theme switch with SwitchCompatLibrary -->
<item name="switchStyle">@style/switch_light</item>
<item name="textAppearance">@style/TextAppearance</item>
</style>
Run Code Online (Sandbox Code Playgroud)
使用SwitchCompatLibrary本身定义的样式信息
styles.xml:
<resources …Run Code Online (Sandbox Code Playgroud) 可能重复:
更改交换机的"打开"颜色
ToggleButton当状态从绿色(真)变为红色(假)时,我需要更改颜色.我该如何改变ToggleButton颜色?
我正在寻找仅将此颜色应用于所有开关.但默认情况下,它colorAccent取代了此主题进行切换.
装置:棉花糖.
布局:
<Switch
android:id="@+id/soundSwitch"
style="@style/SwitchStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginBottom="@dimen/large_space"
android:layout_marginRight="@dimen/medium_space"
android:layout_marginTop="@dimen/large_space"
android:checked="true"
/>
Run Code Online (Sandbox Code Playgroud)
款式-V21:
<style name="SwitchStyle" parent="Theme.AppCompat.Light">
<!-- active thumb & track color (30% transparency) -->
<item name="android:colorControlActivated">@color/switch_color</item>
<!-- inactive thumb color -->
<item name="colorSwitchThumbNormal">#f1f1f1</item>
<!-- inactive track color (30% transparency) -->
<item name="android:colorForeground">#42221f1f</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?