我使用下面的链接继续改变SwitchCompat的颜色尝试:
如何改变的SwitchCompat
注意低constrast在我的开关:
但改变所有相关的颜色值后SwitchCompat的音轨(亮灰色)保持不变。我不想改变除了颜色的外观。拇指是粉红色的,和我想要的轨道有一定的反差。我错过在我的styles.xml定义值?
我想这些值(随机非白两种颜色):
<样式名称=AppTheme父=Theme.AppCompat.Light.NoActionBar> <项目名称=colorPrimary> @色/第一< /项目> <项目名称=colorPrimaryDark> @色/秒< /项目> <项目名称=colorAccent> @色/第三< /项目> ... <项目名称=colorControlActivated> @色/第一< /项目> <项目名称=colorControlHighlight> @色/第一< /项目> <项目名称=colorControlNormal> @色/秒< /项目> <项目名称=colorSwitchThumbNormal> @色/秒< /项目> <项目名称=colorButtonNormal> @色/秒< /项目> ...>解决方案
我有同样的probrem并解决它。
<样式名称=AppTheme父=Theme.AppCompat.Light.NoActionBar> ... <! - 活动拇指颜色和放大器;活动轨迹的颜色(30%的透明度) - > <项目名称=colorControlActivated> @色彩/主题< /项目> < - !不活跃的拇指颜色 - > <项目名称=colorSwitchThumbNormal> @色/ grey300< /项目> <! - 不活动轨迹的颜色(30%的透明度) - > <项目名称=机器人:colorForeground> @色/ grey600< /项目> ... < /风格>
我读应用程序兼容性code和理解。
android.support.v7.internal.widget.TintManager.java
私人ColorStateList getSwitchTrackColorStateList(){ 如果(mSwitchTrackStateList == NULL){ 最终诠释[] []状态=新的INT [3] []; 最终诠释[]颜色=新INT [3]; INT I = 0; //禁用状态 国家[我] =新的INT [] {-android.R.attr.state_enabled}; 颜色[I] = getThemeAttrColor(android.R.attr.colorForeground,0.1F); 我++; 国家[我] =新的INT [] {android.R.attr.state_checked}; 颜色[I] = getThemeAttrColor(R.attr.colorControlActivated,0.3f); 我++; //默认启用状态 态[I] =新INT [0]; 颜色[I] = getThemeAttrColor(android.R.attr.colorForeground,0.3f); 我++; mSwitchTrackStateList =新ColorStateList(州,颜色); } 返回mSwitchTrackStateList; }I've tried using the following link to change the color of a SwitchCompat:
How to change the color of a SwitchCompat
Notice the low constrast in my switch:
But after changing all relevant color values the track (the brighter grey) of the SwitchCompat remains the same. I don't want to change the appearance except the color. The thumb is in pink, and I want the track to have some contrast. Did I miss to define a value in my styles.xml?
I tried these values (random non-white colors):
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/first</item> <item name="colorPrimaryDark">@color/second</item> <item name="colorAccent">@color/third</item> ... <item name="colorControlActivated">@color/first</item> <item name="colorControlHighlight">@color/first</item> <item name="colorControlNormal">@color/second</item> <item name="colorSwitchThumbNormal">@color/second</item> <item name="colorButtonNormal">@color/second</item> ...>解决方案
I had same probrem and solved it.
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ... <!-- Active thumb color & Active track color(30% transparency) --> <item name="colorControlActivated">@color/theme</item> <!-- Inactive thumb color --> <item name="colorSwitchThumbNormal">@color/grey300</item> <!-- Inactive track color(30% transparency) --> <item name="android:colorForeground">@color/grey600</item> ... </style>I read app compat code, and understand it.
android.support.v7.internal.widget.TintManager.java
private ColorStateList getSwitchTrackColorStateList() { if (mSwitchTrackStateList == null) { final int[][] states = new int[3][]; final int[] colors = new int[3]; int i = 0; // Disabled state states[i] = new int[] { -android.R.attr.state_enabled }; colors[i] = getThemeAttrColor(android.R.attr.colorForeground, 0.1f); i++; states[i] = new int[] { android.R.attr.state_checked }; colors[i] = getThemeAttrColor(R.attr.colorControlActivated, 0.3f); i++; // Default enabled state states[i] = new int[0]; colors[i] = getThemeAttrColor(android.R.attr.colorForeground, 0.3f); i++; mSwitchTrackStateList = new ColorStateList(states, colors); } return mSwitchTrackStateList; }
更多推荐
如何更改SwitchCompat的轨道颜色
发布评论