Настройка стилей программно добавленных представлений

В моем коде я программно добавляю элементы ввода, такие как радиокнопки, флажки и т. д., в свой макет. Проблема в том, что стиль этих элементов не является стилем по умолчанию, который вы получите, если добавите, скажем, RadioButton через xml. (Он выглядит действительно белым и почти прозрачным на белом фоне приложения. Он немного похож на прозрачный). Кроме того, элементы 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 (Lollipop)


person Cuddl3s    schedule 20.01.2015    source источник


Ответы (2)


Вы можете передать стиль, определенный внутри 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.

person Bartek Lipinski    schedule 20.01.2015
comment
Также возможно ли как-то передать стиль radioButton по умолчанию, или мне нужно создать новый стиль, который имеет стиль по умолчанию в качестве родителя? - person Cuddl3s; 20.01.2015
comment
вам нужно определить YourRadioButtonStyle, который имеет @android:style/Widget.CompoundButton.RadioButton в качестве родителя, и установить некоторые поля так, как вы хотите - person Bartek Lipinski; 20.01.2015
comment
чтобы передать стиль radioButton по умолчанию, вы должны иметь возможность использовать com.android.internal.R.attr.radioButtonStyle вместо R.attr.radioButtonStyle - person Bartek Lipinski; 20.01.2015
comment
Если я это сделаю, текст перекроет изображение флажка... есть идеи, почему это происходит? - person Joan Casadellà; 29.02.2016
comment
возможно, это как-то связано с этим - person Bartek Lipinski; 29.02.2016
comment
@ Cuddl3s Cuddl3s, есть ли причина, по которой вы не приняли ответ? - person Bartek Lipinski; 26.04.2017
comment
@BartekLipinski, вы имеете в виду, что я забыл об этом, потому что я разместил его довольно давно? :) Фиксированный! - person Cuddl3s; 26.04.2017
comment
@Cuddl3s относитесь к моему комментарию как к нежному напоминанию: D, спасибо! - person Bartek Lipinski; 26.04.2017

Как по мне, успешно решилось именно так:

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>
person Maria    schedule 30.05.2018