Android - Как программно установить стиль кнопки в Linearlayout?

Я программно создаю LinearLayout для AlertDialog с некоторыми кнопками.

Я хочу сделать это:

<LinearLayout android:id="@+id/footer" android:layout_width="fill_parent"
style="@android:style/ButtonBar">

Но с таким кодом:

LinearLayout buttons = new LinearLayout(parentContext);
buttons.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams buttonsParams =
    new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
    LayoutParams.WRAP_CONTENT);
topLayout.addView(buttons, buttonsParams);
buttons.setLayoutParams(buttonsParams);
Button btnAdd = new Button(context);
btnAdd.setText("Add");

Как программно установить стиль кнопок (использовать панель кнопок)?

5 ответов

Решение

Надеюсь, я еще не поздно присоединиться к вечеринке:)

Ну, стили могут быть применены к View на этапе инициализации. Например:

LinearLayout button = new LinearLayout(context, null, android.R.style.ButtonBar);

Это сработало для меня:

int buttonStyle = R.style.your_button_style;
Button button = new Button(new ContextThemeWrapper(context, buttonStyle), null, buttonStyle)

Это единственный ответ, который действительно дал то, что я искал: http://belencruz.com/2013/04/set-styles-programmatically-in-android/

По сути, создайте XML-файл макета, который просто имеет <Button/> элемент со стилем, который вы хотите. Затем, надуйте это программно и просто настройте текст кнопки.

Что-то вроде:

<?xml version="1.0" encoding="utf-8"?>
<Button style="@style/your_custom_style_here"/>

В коде:

Button button = (Button)getLayoutInflater().inflate(R.layout.your_custom_button_layout_file, null);
button.setText("Your Text");

Парижская библиотека от AirBnB идеально подходит для этого, позволяя осуществлять программную настройку следующим образом:

Paris.styleBuilder(textView)
        .add(R.style.MyGreenTextView)
        .textSizeRes(R.dimen.my_text_size_small)
        .apply();

Вместо вакаслама

LinearLayout button = new LinearLayout(context, null, android.R.style.ButtonBar);

(что, судя по комментариям, зависит от API). Я также прочитал ответ от RIDOYS отсюда [ Программирование стилей кнопок Android ], которое

transferBtn.setBackgroundResource(R.layout.buttonstyle);

(раскрытие вышеупомянутых ответов, потому что один из них может также работать для вас, в зависимости от версии API, которую вы используете),

Но вот что сработало для меня (помните, что переход от "макета" к "рисованию") :

Button b = new Button(this);
b.setBackgroundResource(R.drawable.button_custom_green);

(ответ из [ Как программно установить атрибут стиля в виде)

В моем случае стиль вообще не загружался, когда я передаю их в Buttonконструктор. Похоже, это было потому, что я использовал представление материального дизайна. Вот что решило мой случай:

val themeWrapper = ContextThemeWrapper(
      context,
      R.style.AppTheme_ButtonPrimary // my button style
)

val button = MaterialButton(themeWrapper)

Обратите внимание, что MaterialButton был создан вместо Button.

Я нашел это решение по адресу: Как программно указать стиль представления в Android.

Другие вопросы по тегам