以编程方式添加组件的样式与 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 布局中的样式不同的主要内容,如果未能解决你的问题,请参考以下文章

为啥我以编程方式创建的按钮的样式不同?

动态生成的 TextView 中的默认样式

如何以编程方式更改布局边距

以编程方式插入的按钮样式无法正常工作

以编程方式设置 WPF 背景不透明度

在 Asp.Net 中以编程方式添加样式表