Android - 如何更改多个子视图的属性

时间:2016-01-18 10:27:56

标签: android xml android-layout

我有一个带有很多textView的LinearLayout,我的应用程序可以根据用户的偏好改变它的主题。如何更改此特定LinearLayout中textView的textColor和font type属性?我不能用

<style name="Theme1" parent="android:Theme.Light.NoTitleBar">
        <item name="android:textViewStyle">@style/theme1TextStyle/item>
</style>
在styles.xml文件中

因为我在另一个布局中有其他textViews需要不同的字体颜色和字体类型。我能想到的唯一方法是自己声明一个自定义属性(customTextViewStyle)并在每个textViews中使用它(通过在该LinearLayout中插入style =&#34;?attr / customTextViewStyle&#34;)并在样式中执行以下操作.XML:

<style name="Theme1" parent="android:Theme.Light.NoTitleBar">
        <item name="android:customTextViewStyle">@style/theme1TextStyle/item>
</style>

有更有效的方法吗?我的目标是使这段代码易于阅读和修改。

1 个答案:

答案 0 :(得分:1)

styles.xml中制作这些样式,您可以看到上传到github的工作示例

<style name="TestOne">
    <item name="android:textColor">#00aa22</item>
    <item name="android:fontFamily">sans-serif</item>
</style>

<style name="TestTwo">
    <item name="android:textColor">#00aacc</item>
    <item name="android:fontFamily">sans-serif-light</item>
</style>

<style name="TestThree">
    <item name="android:textColor">#ddaa00</item>
    <item name="android:fontFamily">sans-serif-condensed</item>
</style>

<style name="TestFour">
    <item name="android:textColor">#bbaa00</item>
    <item name="android:fontFamily">sans-serif-thin</item>
</style>

<style name="TestFive">
    <item name="android:textColor">#00aabb</item>
    <item name="android:fontFamily">sans-serif-medium</item>
</style>

这些可以像textView

一样使用
textView.setTextAppearance(getApplicationContext(),R.style.TestOne);

我写了一个你可以检查的例子

public class TestTextViewActivity extends AppCompatActivity {

    private TextView textView;
    private Button button;

    int[] id = {R.style.TestOne, R.style.TestTwo, R.style.TestThree, R.style.TestFour, R.style.TestFive};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_text_view);
        Toolbar toolbar = (Toolbar) findViewById(R.id.my_custom_toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        initializeUI();
    }

    private void initializeUI() {
        textView = (TextView) findViewById(R.id.TestTextViewActivity_textView);
        button = (Button) findViewById(R.id.TestTextViewActivity_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int count = (new Random()).nextInt(6);
                textView.setTextAppearance(getApplicationContext(),id[count]);
            }
        });
    }

}
  

输出

enter image description here