Add Style after creating a View programmatically

╄→гoц情女王★ 提交于 2019-11-30 20:39:27

问题


The Title says it all, hopefully.

1) I create a View programmatically:

RelativeLayout rl = new RelativeLayout(this);

2) I want to add it to an existing LinearLayout and after that i want to add a Style to the RelativeLayout. Something like:

LinearLayout ll = (LinearLayout) findViewById(R.id.MyLinearLayout);
RelativeLayout rl = new RelativeLayout(this);
ll.addView(rl);
//add Style to rl here

I can't find a way to do that!

I know there are ways to add a Style programmatically. Something like:

RelativeLayout rl = new RelativeLayout(this, null, R.style.MyRelativeLayout);

But this will add the style before i've added the relativelayout to the linearlayout. Therefore the relativelayout isn't "printed" because how should he know that the linearlayout is his parent before i add it to the linearlayout.

Does anybody has a way how to add a Style programmatically to a view after this view has been created and added to a parent?

Hope you understand what i mean.


回答1:


You can't apply a style after constructing a view. The correct way to do this is to use the 4-argument constructor on Android 5.0+ or to create a theme attribute that references your style and use the 3-argument constructor.

// Works on versions prior to Android 5.0
RelativeLayout rl = new RelativeLayout(this, null, R.attr.myRelativeLayoutStyle);

// Works on Android 5.0 and above
RelativeLayout r2 = new RelativeLayout(this, null, 0, R.style.MyRelativeLayout);

res/values/attrs.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="myRelativeLayoutStyle" format="reference" />
    ...

res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyRelativeLayout">
        ...
    </style>
    ...

res/values/themes.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyAppTheme" parent="...">
        <item name="myRelativeLayoutStyle">@style/MyRelativeLayout</item>
        ...


来源:https://stackoverflow.com/questions/26820452/add-style-after-creating-a-view-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!