【问题标题】:Setting styles of programmatically added Views设置以编程方式添加的视图的样式
【发布时间】:2015-01-20 13:45:35
【问题描述】:

在我的代码中,我以编程方式将单选按钮、复选框等输入元素添加到我的布局中。 问题是,这些元素的样式不是您将获得的默认样式,当您通过 xml 添加比方说 radioButton 时。 (它看起来真的很白,在白色的应用程序背景上几乎是透明的。有点像它是透明的) 此外,我添加的 EditText 元素具有相同的样式,如果您在其中键入内容,则文本太大并且与文本行重叠。 所以我想这一切都归结为以某种方式赋予这些元素默认样式,就像它们通过 xml 定义时的外观一样。

我的代码示例如下所示:

RadioGroup radioGroup = new RadioGroup(mContext);
    radioGroup.setLayoutParams(fullWidthWrapHeight);

    for (int i = 0; i < arg0.getOptions().size(); i++){
        RadioButton radioButton = new RadioButton(mContext, null);
        radioButton.setPadding(padding16dp , padding8dp, padding16dp, padding8dp);
        radioButton.setText(arg0.getOptions().get(i).getText());
        radioButton.setLayoutParams(wrapBoth);
        radioButton.setGravity(Gravity.CENTER_HORIZONTAL);

        radioButton.setTextAppearance(mContext, R.style.Default_Text);
        radioGroup.addView(radioButton);
    }

我的目标 API 等级是 21(棒棒糖)

【问题讨论】:

    标签: android android-styles programmatically-created


    【解决方案1】:

    您可以将styles.xml 中定义的样式作为View 构造函数的参数传递。所以考虑到你的例子,你必须打电话:

    RadioButton radioButton = new RadioButton(mContext, null, R.attr.radioButtonStyle);
    

    然后在attrs.xml中添加自定义属性

    <attr name="radioButtonStyle" format="reference" />
    

    并在styles.xml 中添加应用程序主题

    <item name="radioButtonStyle">@style/YourRadioButtonStyle</item>
    

    YourRadioButtonStyle 是在styles.xml 中定义的自定义单选按钮样式

    【讨论】:

    • 是否也可以传递默认的 radioButton 样式,或者我必须创建一个具有默认样式作为父样式的新样式?
    • 你必须定义 YourRadioButtonStyle@android:style/Widget.CompoundButton.RadioButton 作为父级,并以你想要的方式设置一些字段
    • 要传递默认的radioButton样式,您应该能够使用com.android.internal.R.attr.radioButtonStyle而不是R.attr.radioButtonStyle
    • 如果我这样做,文本会与复选框图像重叠...知道为什么会发生这种情况?
    • 可能与this有关
    【解决方案2】:

    至于我,就这样顺利解决了:

    Activity.java

        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    

    ...

        { 
            RadioButton rb = (RadioButton) inflater.inflate(R.layout.radio_butt, null);
            rb.setText(this_currency_option);
            rb.setTextColor(context.getResources().getColor(R.color.colorWhite));
            rb.setId(100 + i);
            radioGroup.addView(rb);
        }
    

    radio_butt.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RadioButton
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="@color/colorWhite"
        android:theme="@style/MyRadioButtonStyle"/>
    

    slyles.xml

    <style name="MyRadioButtonStyle" parent="@android:style/Widget.CompoundButton.RadioButton">
        <item name="colorControlNormal">@color/colorAlfaWhite</item>
        <item name="colorControlActivated">@color/colorWhite</item>
    </style>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2015-07-04
      • 2017-03-11
      • 2012-04-12
      • 2011-01-02
      相关资源
      最近更新 更多