我有一个带有很多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>
有更有效的方法吗?我的目标是使这段代码易于阅读和修改。
答案 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]);
}
});
}
}
输出