2010-07-13 40 views
12

设置TextView的风格是任何身体知道如何在运行时设置的风格脱颖而出的TextView:安卓:在运行时

像这样

myTextView.setStyle(R.style.mystyle); 

回答

3

,你将不得不手动设置样式的每个元素你改变了,没有办法在运行时设置样式,AFAIK。

myTextView.setTextAppearance 
myTextView.setTextSize 
myTextView.setTextColor 
+0

感谢您的答案,但如果我想我要添加更多动态地选择星号复选框。在运行时似乎有知道设置样式的方法。但对我来说我想添加这个明星复选框 <复选框风格= “机器人:ATTR/starStyle” \t \t的android:layout_width = “WRAP_CONTENT” \t \t机器人:layout_height = “WRAP_CONTENT”/> 如何我可以这样做吗? – 2010-07-15 07:16:55

0

我正在尝试自己做类似的事情。

我的理由是我想用一种风格从我自己的主题,但我的用户界面布局代码完全生成(使用自定义布局构建),没有XML定义任何小部件。所以我不能在我的小部件的XML布局中设置样式 - 没有任何XML布局。

我在想,我将能够通过使用

TypedArray A =

context.obtainStyledAttributes(AttributeSet中的 组设置这种风格在我的窗口小部件的代码,INT [] ATTRS,INT defStyleAttr ,诠释defStyleRes)

这似乎(对我)说

  1. AttributeSet中的设置= NULL;因为这是XML inflater会提供的。

  2. INT [] ATTRS = R.styleable.MyWidget;定义了我想查看的属性。

  3. INT defStyleAttr = myWidgetStyle;这是一个在我的主题中定义的引用,用于MyWidget的样式。这些都是在res/values中的XML文件中定义的。 “myWidgetStyle”遵循android开发人员在其代码中使用的名称模式。

  4. 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看起来像是一个令人不快的处理对象。我会用一根很长的棍子戳它!

2

我也依然没有找到(黯然)的方式在运行时更改样式。

如果它只是改变复选框外观(如你在另一个答案的评论提到),你可以使用这个:

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文件在你可绘制的目录下。

25

非常简单,你只用setTextApparence和你的风格

myTextView.setTextAppearance(getApplicationContext(), R.style.boldText); 
+0

是否有类似于linearLayout的东西? – 2012-06-07 22:47:24

+2

根本没用! – 2013-02-19 21:30:38

+0

只是快速提示'setTextAppearance(Context context,@StyleRes int resId)'已弃用,我们应该使用'setTextAppearance(@StyleRes int resId)'代替 – AllDayAmazing 2016-07-19 23:15:52

0

的TextView(上下文的背景下,AttributeSet中的ATTRS,INT defStyle)

虽然建设可用,但似乎它的越野车,我想这和发现指定的样式不适用于我的视图。

后搜索进一步得到这个归档的bug:http://code.google.com/p/android/issues/detail?id=12683

要解决这个问题,我使用setBackgroundResource,setTextAppearance等方法大幅:)