стиль андроида в коде

Я пытаюсь использовать конструктор TextView со стилем следующим образом:

TextView myText = new TextView(MyActivity.this, null, R.style.my_style );

однако, когда я это делаю, текстовое представление, похоже, не принимает стиль (я проверил стиль, установив его на статический объект).

Я также пытался использовать myText.setTextAppearance(MyActivity.this, R.style.my_style) но он также не работает

    Я не верю, что вы можете установить стиль программно. Чтобы обойти это, вы можете создать XML-файл макета шаблона с назначенным стилем, например, в res / layout создать tvtemplate.xml, как со следующим содержимым:

       

    затем раздуйте это, чтобы создать новый TextView:

     TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null); 

    Надеюсь это поможет.

    Вы можете создать общий стиль и повторно использовать его на нескольких текстовых изображениях, как показано ниже:

     textView.setTextAppearance(this, R.style.MyTextStyle); 

    Изменить: это относится к контексту

    Вы можете передать ContextThemeWrapper в конструктор следующим образом:

     TextView myText = new TextView(new ContextThemeWrapper(MyActivity.this, R.style.my_style)); 

    Вы можете установить стиль в конструкторе (но стили не могут быть динамически изменены / установлены).

    View(Context, AttributeSet, int) ( int – ресурс стиля)

    Ответа на этот вопрос Romain Guy

    Справка

    Динамически изменяющиеся стили не поддерживаются (пока). Вы должны установить стиль перед созданием представления через XML.

    Параметр int defStyleAttr не определяет стиль. Из документации для Android:

    defStyleAttr – атрибут текущей темы, содержащий ссылку на ресурс стиля, который поставляет значения по умолчанию для представления. Может быть 0, чтобы не искать значения по умолчанию.

    Чтобы настроить стиль в конструкторе View, у нас есть 2 возможных решения:

    1. С помощью ContextThemeWrapper:

       ContextThemeWrapper wrappedContext = new ContextThemeWrapper(yourContext, R.style.your_style); TextView textView = new TextView(wrappedContext, null, 0); 
    2. С конструктором с четырьмя аргументами (доступно начиная с LOLLIPOP):

       TextView textView = new TextView(yourContext, null, 0, R.style.your_style); 

    defStyleAttr для обоих решений – параметр defStyleAttr должен быть 0, чтобы применить наш стиль к представлению.

    При использовании пользовательских представлений, которые могут использовать наследование стилей (или атрибуты стиля событий), вам нужно изменить второй конструктор, чтобы не потерять стиль. Это сработало для меня, без использования setTextAppearence () :

     public CustomView(Context context, AttributeSet attrs) { this(context, attrs, attrs.getStyleAttribute()); } 

    Принятый ответ был отличным решением для меня. Единственное, что нужно добавить, это метод inflate() .

    В принятом ответе все параметры android:layout_* не будут применяться.

    Причина не в том, чтобы отрегулировать его, потому что null был принят в ViewGroup parent .

    Вы можете использовать его следующим образом:

    View view = inflater.inflate(R.layout.view, parent, false);

    а parent является ViewGroup , откуда вы хотите настроить android:layout_* .

    В этом случае будут установлены все относительные свойства.

    Надеюсь, это будет полезно для кого-то.

    Я тоже столкнулся с проблемой, и я нашел способ установить стиль программно. Возможно, вам все это нужно, поэтому я обновляюсь там.

    Третий параметр конструктора View принимает тип attr в вашей теме в качестве исходного кода ниже:

     public TextView(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.textViewStyle); } 

    Поэтому вы должны передать тип R.attr. **, а не R.style. **

    В моих кодах я сделал следующие шаги:

    Сначала настройте настраиваемый attr, который будет использоваться темами в attr.xml.

      

    Во-вторых, укажите свой стиль в используемой теме в style.xml.

        

    В конце используйте его!

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

    представление, созданное программным образом, будет использовать указанный стиль в вашей теме.

    Вы можете попробовать, и надеетесь, что он может работать для вас отлично.

    Я тестировал только с помощью EditText, но вы можете использовать метод

    public void setBackgroundResource (int resid)

    для применения стиля, определенного в XML-файле.

    Синус этот метод принадлежит View. Я считаю, что он будет работать с любым элементом пользовательского интерфейса.

    С уважением.

    Давайте будем гением компьютера.