安卓:在运行时
回答
,你将不得不手动设置样式的每个元素你改变了,没有办法在运行时设置样式,AFAIK。
myTextView.setTextAppearance
myTextView.setTextSize
myTextView.setTextColor
我正在尝试自己做类似的事情。
我的理由是我想用一种风格从我自己的主题,但我的用户界面布局代码完全生成(使用自定义布局构建),没有XML定义任何小部件。所以我不能在我的小部件的XML布局中设置样式 - 没有任何XML布局。
我在想,我将能够通过使用
TypedArray A =
context.obtainStyledAttributes(AttributeSet中的 组设置这种风格在我的窗口小部件的代码,INT [] ATTRS,INT defStyleAttr ,诠释defStyleRes)
这似乎(对我)说
AttributeSet中的设置= NULL;因为这是XML inflater会提供的。
INT [] ATTRS = R.styleable.MyWidget;定义了我想查看的属性。
INT defStyleAttr = myWidgetStyle;这是一个在我的主题中定义的引用,用于MyWidget的样式。这些都是在res/values中的XML文件中定义的。 “myWidgetStyle”遵循android开发人员在其代码中使用的名称模式。
defStyleRes = 0;我希望我不需要考虑这一点。
然后得到任何属性,如背景颜色,
彩色颜色= a.getColor(R.styleable.MyWidget_background,R.color.my_default);
a.recycle();
无论如何,这似乎确实有效。
看来,Android的构建系统方便地生成a.getColor使用正确的索引,它R.styleable.MyWidget_background名字。我没有自己创建这个名称,所以Android必须使用我的XML来完成我的样式化MyWidget。
我希望可以通过在TypedArray中搜索所需的属性来查找正确的索引,但这样做效率不高,TypedArray看起来像是一个令人不快的处理对象。我会用一根很长的棍子戳它!
唐
我也依然没有找到(黯然)的方式在运行时更改样式。
如果它只是改变复选框外观(如你在另一个答案的评论提到),你可以使用这个:
myCheckbox.setButtonDrawable(R.drawable.star_checkbox);
而且必须在绘制目录描述一个star_checkbox.xml文件复选框背景根据其状态如:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_focused="true"
android:drawable="@drawable/star_checkbox_checked_focused" />
<item android:state_checked="false" android:state_focused="true"
android:drawable="@drawable/checkbox_not_checked_focused" />
<item android:state_checked="false"
android:drawable="@drawable/checkbox_not_checked" />
<item android:state_checked="true"
android:drawable="@drawable/checkbox_checked" />
</selector>
另外你还需要相应的png文件在你可绘制的目录下。
非常简单,你只用setTextApparence和你的风格
myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
是否有类似于linearLayout的东西? – 2012-06-07 22:47:24
根本没用! – 2013-02-19 21:30:38
只是快速提示'setTextAppearance(Context context,@StyleRes int resId)'已弃用,我们应该使用'setTextAppearance(@StyleRes int resId)'代替 – AllDayAmazing 2016-07-19 23:15:52
的TextView(上下文的背景下,AttributeSet中的ATTRS,INT defStyle)
虽然建设可用,但似乎它的越野车,我想这和发现指定的样式不适用于我的视图。
后搜索进一步得到这个归档的bug:http://code.google.com/p/android/issues/detail?id=12683
要解决这个问题,我使用setBackgroundResource,setTextAppearance等方法大幅:)
- 1. 安卓:在运行时
- 2. 安卓:在运行时
- 3. 安卓:运行时错误
- 4. 安卓:运行时异常退出
- 5. 安卓倒计时计时器继续在后台运行
- 6. 安卓:在运行时创建的按钮在Java
- 7. 安卓棉花糖请求批量运行时在片段
- 8. 安卓:在后台运行,随时连接互联网
- 9. 安卓虚拟机在ubuntu系统下运行时的错误
- 10. 安卓:TextView的设置方式在运行时
- 11. 安卓应用已停止运行
- 12. 离子运行安卓不工作
- 13. 停止运行与postdelay(安卓)处理
- 14. 钛(安卓)检查运行服务
- 15. 安卓绘图方法运行缓慢
- 16. 安卓:服务没有运行
- 17. 安卓:亚行
- 18. 错误时,在安卓
- 19. 安卓移动按钮和运行时的背景
- 20. 安卓工作室2.3即时运行不工作
- 21. 如何构建运行时(安卓)按钮
- 22. 启动从AlertDialog(安卓)长时间运行的任务
- 23. 安卓apk版本很好,但运行时显示ClassDefNotFound错误
- 24. 安卓:从相机和画廊运行时异常
- 25. 安卓服务调用OnCreated运行时无意间
- 26. 安卓游戏计时器:在60fps运行时,计数10毫秒(16.66ms)
- 27. 安卓ViewFlipper行为
- 28. 安卓:setVisibility不行
- 29. 时间戳 - 安卓
- 30. 错误而在安卓在Android Studio中运行的程序
感谢您的答案,但如果我想我要添加更多动态地选择星号复选框。在运行时似乎有知道设置样式的方法。但对我来说我想添加这个明星复选框 <复选框风格= “机器人:ATTR/starStyle” \t \t的android:layout_width = “WRAP_CONTENT” \t \t机器人:layout_height = “WRAP_CONTENT”/> 如何我可以这样做吗? – 2010-07-15 07:16:55