【问题标题】:Apply style for button group in Android在 Android 中为按钮组应用样式
【发布时间】:2013-12-23 09:26:52
【问题描述】:

在我的 Android 应用程序中,我需要为一组按钮应用样式,而不是为每个按钮单独设置样式。像这样的:

<?xml version="1.0" encoding="utf-8"?>
  <!-- put here style="@ststyle/Button_Style" -->
    <Button android:id="@+id/button1" android:text="@string/b01" />
    <Button android:id="@+id/button2" android:text="@string/b02" />
    <Button android:id="@+id/button4" android:text="@string/b03" />
  <!--  end style  -->

【问题讨论】:

    标签: android xml button styles


    【解决方案1】:

    你可以这样写按钮的样式;

    style_btn.xml

    <style name="style_btn" parent="Wrap">
            <item name="android:background">@drawable/btn_bg</item>
            <item name="android:gravity">center</item>
            <item name="android:textColor">@android:color/white</item>
            <item name="android:textStyle">bold</item>
            <item name="android:layout_marginTop">4dp</item>
            <item name="android:minWidth">90dp</item>
        </style>
    

    将该样式应用于您的按钮:

    <Button
                    android:id="@+id/attach_file"
                    style="@style/style_btn"
                    android:layout_centerVertical="true"
                    android:background="@drawable/orange_bg"
                    android:drawablePadding="10dp"
                    android:drawableRight="@drawable/attach"
                    android:text="@string/str_email_attach" />
    

    【讨论】:

      【解决方案2】:

      如果您需要应用程序中所有按钮的样式,请在您的应用程序主题样式中提及,则无需为每个按钮申请。

      <style name="YourTheme" parent="android:Theme.Light">
              <item name="android:buttonStyle">@style/Button</item>
      </style>
      

      如果你需要特别的样式 button ,然后应用到每个按钮

      <Button
          android:id="@+id/button1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"     
          style="@style/Button"
          android:text="Button" />
      

      【讨论】:

        【解决方案3】:

        我知道我加入聚会迟到了,但我在尝试自己解决同样的问题时偶然发现了这一点。

        我所做的是:

        根据您拥有的按钮组数量(例如 3 个),您需要对按钮进行子类化并创建三个自定义按钮类(见下文)

        //Custom button 1
        public class CustomButton1 extends Button {
            public CustomButton1(Context context, AttributeSet attrs) {
                super(context, attrs, R.attr.attrStyle1);
            }
        
            public CustomButton1(Context context, AttributeSet attrs, int defStyle) {
                super(context, null, R.attr.attrStyle1);
            }
        }
        
        //Custom button 2
        public class CustomButton2 extends Button {
            public CustomButton2(Context context, AttributeSet attrs) {
                super(context, attrs, R.attr.attrStyle2);
            }
        
            public CustomButton2(Context context, AttributeSet attrs, int defStyle) {
                super(context, null, R.attr.attrStyle2);
            }
        }
        
        //Custom button 3
        public class CustomButton3 extends Button {
            public CustomButton3(Context context, AttributeSet attrs) {
                super(context, attrs, R.attr.attrStyle3);
            }
        
            public CustomButton3(Context context, AttributeSet attrs, int defStyle) {
                super(context, null, R.attr.attrStyle3);
            }
        }
        

        你可以从自定义类中看到我已经传递了一个自定义属性。这些我在我的 styles.xml 中定义并将它们用作参考。请参阅下面的 style.xml:

        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        
            <!-- Customize your theme here. -->
        </style>
        
        <style name="theme1">
            <item name="@attr/attrStyle1">@style/CustomButton1</item>
            <item name="@attr/attrStyle2">@style/CustomButton2</item>
            <item name="@attr/attrStyle3">@style/CustomButton3</item>    
           <item name="android:background">@color/warning_yellow_colour</item>
        </style>
        
        <style name="CustomButton1" parent = "@android:style/Widget.Button">
            <item name="android:textColor">@color/white_colour</item>
            <item name="android:padding">20dp</item>
            <item name="android:background">@color/banner_background_sensor_colour</item>
        </style>
        
        <style name="CustomButton2" parent = "@android:style/Widget.Button">
            <item name="android:textColor">@color/white_colour</item>
            <item name="android:padding">20dp</item>
            <item name="android:background">@color/button_red_colour</item>
        </style>
        
        <style name="CustomButton3" parent = "@android:style/Widget.Button">
            <item name="android:textColor">@color/white_colour</item>
            <item name="android:padding">20dp</item>
            <item name="android:background">@color/text_blue_colour</item>
        </style>
        
        <attr name="attrStyle1" format="reference"/>
        <attr name="attrStyle2" format="reference"/>
        <attr name="attrStyle3" format="reference"/>
        

        通过将样式链接到 attr,您可以将该样式应用于您的自定义类,然后您可以根据需要多次复制该样式

         CustomButton1 theme1 = (CustomButton1)findViewById(R.id.theme1);
         CustomButton2 theme2 = (CustomButton2)findViewById(R.id.theme2);
         CustomButton3 theme3 = (CustomButton3)findViewById(R.id.theme3);
        

        希望这对某人有好处!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 2015-06-30
          • 2012-10-24
          • 2014-12-08
          相关资源
          最近更新 更多