如何在Android上的类中设置R.style?
我知道我们可以在创建视图时在Android的layout.xml上设置自定义样式。
但是,我不知道为什么Android没有设置样式的方法...... 虽然我知道视图构造函数可以设置样式,但我不知道什么是AttributeSet...
例如,我有一个styles.xml
<style name="button">
<!-- All -->
<item name="android:layout_width">64dip</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_marginBottom">1dip</item>
<item name="android:layout_marginLeft">0dip</item>
<item name="android:layout_marginRight">0dip</item>
<item name="android:layout_marginTop">1dip</item>
<item name="android:background">@color/button_background_color_list</item>
<!-- Image -->
<item name="android:button">@null</item>
<item name="android:drawablePadding">-5dip</item>
<!-- Text -->
<item name="android:textColor">@color/button_label_color_list</item>
<item name="android:textSize">9dip</item>
<item name="android:textStyle">normal</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:padding">0dip</item>
<item name="android:singleLine">true</item>
<item name="android:ellipsize">marquee</item>
<item name="android:marqueeRepeatLimit">marquee_forever</item>
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
</style>
<!-- RadioButton 1 -->
<style name="button_1" parent="@style/button">
<item name="android:drawableTop">@drawable/button_1_selector</item>
<item name="android:text">One</item>
</style>
<!-- RadioButton 2 -->
<style name="button_2" parent="@style/button">
<item name="android:drawableTop">@drawable/button_2_selector</item>
<item name="android:text">Two</item>
</style>
,我可以像这样在layout.xml中使用样式,
<RadioButton android:id="@+id/radiobutton_1"
style="@style/button_1"/>
<RadioButton android:id="@+id/radiobutton_2"
style="@style/button_2"/>
但我不能使用样式在这样的课程中,
RadioButton rb = new RadioButton(this);
rb.setStyle(R.style.button_1);
有人可以帮助我吗?
最后,我得到了一个解决方案来修复它......但这不是一个好的解决方案。
我创建一个custom_layout.xml,
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_button_1"
style="@style/button_1">
</Button>
并在一个类中创建它,
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = (View) inflater.inflate(R.layout.custom_layout, null);
Button rb = (Button)view.findViewById(R.id.custom_button_1);
然后,我可以使用我自己的样式。
I know that we can set the custom style on Android layout.xml when we are creating the view.
However, I don't know why Android does not have a method to set style...
Although I know the view constructor can set the style, I don't know what is the AttributeSet...
For example, I have a styles.xml
<style name="button">
<!-- All -->
<item name="android:layout_width">64dip</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_marginBottom">1dip</item>
<item name="android:layout_marginLeft">0dip</item>
<item name="android:layout_marginRight">0dip</item>
<item name="android:layout_marginTop">1dip</item>
<item name="android:background">@color/button_background_color_list</item>
<!-- Image -->
<item name="android:button">@null</item>
<item name="android:drawablePadding">-5dip</item>
<!-- Text -->
<item name="android:textColor">@color/button_label_color_list</item>
<item name="android:textSize">9dip</item>
<item name="android:textStyle">normal</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:padding">0dip</item>
<item name="android:singleLine">true</item>
<item name="android:ellipsize">marquee</item>
<item name="android:marqueeRepeatLimit">marquee_forever</item>
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
</style>
<!-- RadioButton 1 -->
<style name="button_1" parent="@style/button">
<item name="android:drawableTop">@drawable/button_1_selector</item>
<item name="android:text">One</item>
</style>
<!-- RadioButton 2 -->
<style name="button_2" parent="@style/button">
<item name="android:drawableTop">@drawable/button_2_selector</item>
<item name="android:text">Two</item>
</style>
and I can use the style at layout.xml like this,
<RadioButton android:id="@+id/radiobutton_1"
style="@style/button_1"/>
<RadioButton android:id="@+id/radiobutton_2"
style="@style/button_2"/>
But I cannot use style at a class like,
RadioButton rb = new RadioButton(this);
rb.setStyle(R.style.button_1);
Could any one help me??
Finally, I get a solution to fix it..., but it is not a good solution.
I create a custom_layout.xml,
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_button_1"
style="@style/button_1">
</Button>
And Create it in a class,
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = (View) inflater.inflate(R.layout.custom_layout, null);
Button rb = (Button)view.findViewById(R.id.custom_button_1);
Then, I can use my own style.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在设置内容视图之前,您可以通过应用 setTheme(R.style.your_theme) 来更改整个主题。
请参阅此链接
http://mrbool。 com/how-to-change-the-layout-theme-of-an-android-application/25837
You can change whole theme by applying setTheme(R.style.your_theme) before you set your content view.
refere this link
http://mrbool.com/how-to-change-the-layout-theme-of-an-android-application/25837
您应该阅读应用样式和主题。
“样式”基本上是通过 AttributeSet 传递给您的一堆标签,因此如果您的样式包含类似
android:typeface="simple"
的内容,您可以从中提取它>属性集
。有很多标准的 Android 属性(这些属性在 View 及其子类的“XML 属性”中的文档中指定),这些属性由 View 本身处理,您可以定义自己的属性。
如果您自己创建视图而不是通过扩展布局 XML,则需要自己创建 AttributeSet(例如通过
Xml.asAttributeSet()
)。You should read up on Applying Styles and Themes.
A "style" is basically a bunch of tags that are being passed to you through the AttributeSet, so if your style contains something like
android:typeface="simple"
, you can extract that from theAttributeSet
.There are a lot of standard Android attributes (these are specified in the docs in "XML Attributes" for View and its subclasses), which are processed by the View itself, and you can define your own.
If you are creating a view yourself rather than by inflating a layout XML, you need to create the AttributeSet yourself (for example via
Xml.asAttributeSet()
).