<button androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:theme="@style/Mybutton" />
然后将styles.xml中的Mybutton定义为
<style name="Mybutton" parent="themeOverlay.AppCompat"> <item name="colorbuttonnormal">@color/my_color</item></style>
这给了我一个按照设计支持库的按钮,背景颜色是我在colors.xml文件中用@ color / my_color定义的背景颜色.
因此,基本上它是使用androID:theme来改变colorbuttonnormal属性以获得所需的颜色.
我怎么能以编程方式获得相同的结果?基本上如果我可以做类似的事情
mybutton.settheme(R.style.Mybutton)
…然后我可以设置colorbuttonnormal来获取视图.
我无法设置它
mybutton.setBackgroundcolor(ContextCompat.getcolor(getContext(),R.color.my_color));
或者甚至不喜欢
colorStateList colorStateList = ContextCompat.getcolorStateList(getActivity(),R.color.my_color);VIEwCompat.setBackgroundTintList(mybutton,colorStateList);
这将删除触摸的设计支持库效果.
解决方法 对于button我写了这个帮助方法:public static colorStateList getbuttoncolorStateList(Context context,int accentcolor) { // get darker variant of accentcolor for button pressed state float[] colorHSV = new float[3]; color.colorToHSV(accentcolor,colorHSV); colorHSV[2] *= 0.9f; int darkerAccent = color.HSVTocolor(colorHSV); return new colorStateList( new int[][] {{androID.R.attr.state_pressed},{androID.R.attr.state_enabled},{-androID.R.attr.state_enabled}},new int[] { darkerAccent,accentcolor,getcolor(context,R.color.buttoncolorDisabled) });}
accentcolor是正常启用状态的颜色值.对于按下状态,使用较暗的accentcolor变体,对于禁用状态,我在值中定义了颜色:
<color name="buttoncolorDisabled">#dddddd</color>
使用此方法:
mbutton.setSupportBackgroundTintList(Utils.getbuttoncolorStateList(this,accentcolor));
其中mbutton是AppCompatbutton,accentcolor是颜色的值.
这适用于Lollipop及以上版本,具有触感和前棒棒糖作为标准颜色变化.
总结以上是内存溢出为你收集整理的使用AppCompat的设计效果以编程方式为Android按钮设置buttonColorNormal全部内容,希望文章能够帮你解决使用AppCompat的设计效果以编程方式为Android按钮设置buttonColorNormal所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)