如何使用主题(不可绘制)在代码中设置Button的样式?

时间:2017-10-01 04:20:24

标签: android android-layout android-view android-theme android-styles

我有一个静态按钮,我必须更改为代码,但是当我更改它并在R.style.ThemeOverlay_MyDarkButton代码中指定相同的主题时 我发现没有任何风格被应用。

所以我改变了以下

   <LinearLayout
      android:id="@+id/buttons_pane"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      android:weightSum="3.0">
      <Button
        android:id="@+id/button_start_verification"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1.0"
        android:text="@string/start_phone_auth"
        android:theme="@style/ThemeOverlay.MyDarkButton"/>
  </LinearLayout>

mStartButton = (Button) findViewById(R.id.button_start_verification);

  <LinearLayout
      android:id="@+id/buttons_pane"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      android:weightSum="3.0">
  </LinearLayout>

    LinearLayout buttons_pane = findViewById(R.id.buttons_pane);
    mStartButton = new Button(this, null, R.style.ThemeOverlay_MyDarkButton);
    mStartButton.setText(R.string.start_phone_auth);
    mStartButton.setLayoutParams(new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1.0f));
    mStartButton.setId(R.id.button_start_verification);
    buttons_pane.addView(mStartButton);

PS:我知道使用drawable xml作为背景图片设置样式的方法 (Android Button Styling Programmatically)但我的问题是如何使用主题

来完成

1 个答案:

答案 0 :(得分:3)

你的按钮的风格和主题是两个不同的东西。您以编程方式创建的按钮更像是设置

    style="@style/ThemeOverlay.MyDarkButton"

而不是

    android:theme="@style/ThemeOverlay.MyDarkButton"

你想要的。

您可以使用ContextThemeWrapper以编程方式应用主题。

    Context themedContext = new ContextThemeWrapper(this,
            R.style.ThemeOverlay_MyDarkButton);
    mStartButton = new Button(themedContext);