以编程方式添加组件的样式与 XML 布局中的样式不同
Posted
技术标签:
【中文标题】以编程方式添加组件的样式与 XML 布局中的样式不同【英文标题】:Adding components programmatically has different style than those in XML layout 【发布时间】:2019-10-21 08:44:14 【问题描述】:布局 XML 中定义的组件(文本和编辑框)看起来与我以编程方式添加的组件非常不同。
我尝试以编程方式应用与我的 XML 相同的 textAppearance 样式。我也尝试在添加组件后调用setTheme()
。没有不同。
TextView tv10 = new TextView(getApplicationContext());
tv10.setText("Back width");
EditText tv11 = new EditText(getApplicationContext());
tv11.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);
TextView
带有小字体和灰色文本,EditText
带有黑色背景和灰色文本。
由于用户选择的选项,必须以编程方式添加组件。这些用户选择在 XML 中定义,并遵循预期的配色方案,这是 android Studio 的默认设置。 (白底黑字)
【问题讨论】:
【参考方案1】:您不应该将应用程序上下文用于视图。只有活动上下文。在代码中创建视图时,您也可以将样式作为参数传递。
【讨论】:
使用 parentView.getContext() 而不是 getApplicationContext() 使其按预期工作。 @CupOfQuestions 很高兴听到。你能把我的答案标记为正确的吗?谢谢【参考方案2】:正如 Yamko 所说,样式可以在构造函数中传递
var textView = TextView(context, null, R.style.LoginBodyTextViewStyle)
样式可以是这样的
<style name="LoginBodyTextViewStyle" parent="android:Widget.TextView">
<item name="android:textStyle">normal</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textSize">@dimen/text_size_default</item>
<item name="android:textColor">@color/grey</item>
</style>
【讨论】:
以上是关于以编程方式添加组件的样式与 XML 布局中的样式不同的主要内容,如果未能解决你的问题,请参考以下文章