Android button with different background colors

前端 未结 4 829
借酒劲吻你
借酒劲吻你 2020-12-07 15:34

i want to change the background-color of a button using a selector-xml-file. My approach is basically the one from the example at the bottom this page: http://developer.andr

相关标签:
4条回答
  • 2020-12-07 16:17

    As your error states, you have to define drawable attibute for the items (for some reason it is required when it comes to background definitions), so:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@color/red"/> <!-- pressed -->
        <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->
        <item android:drawable="@color/black"/> <!-- default -->
    </selector>
    

    Also note that drawable attribute doesn't accept raw color values, so you have to define the colors as resources. Create colors.xml file at res/values folder:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
         <color name="black">#000</color>
         <color name="blue">#00f</color>
         <color name="red">#f00</color>
    </resources>
    
    0 讨论(0)
  • 2020-12-07 16:21

    In the URL you pointed to, the button_text.xml is being used to set the textColor attribute.That it is reason they had the button_text.xml in res/color folder and therefore they used @color/button_text.xml

    But you are trying to use it for background attribute. The background attribute looks for something in res/drawable folder.

    check this i got this selector custom button from the internet.I dont have the link.but i thank the poster for this.It helped me.have this in the drawable folder

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape>
                <gradient
                    android:startColor="@color/yellow1"
                    android:endColor="@color/yellow2"
                    android:angle="270" />
                <stroke
                    android:width="3dp"
                    android:color="@color/grey05" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    
        <item android:state_focused="true" >
            <shape>
                <gradient
                    android:endColor="@color/orange4"
                    android:startColor="@color/orange5"
                    android:angle="270" />
                <stroke
                    android:width="3dp"
                    android:color="@color/grey05" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    
        <item>        
            <shape>
                <gradient
                    android:endColor="@color/white1"
                    android:startColor="@color/white2"
                    android:angle="270" />
                <stroke
                    android:width="3dp"
                    android:color="@color/grey05" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    
    </selector>
    

    And i used in my main.xml layout like this

    <Button android:id="@+id/button1"
                android:layout_alignParentLeft="true"
                android:layout_marginTop="150dip"
                android:layout_marginLeft="45dip"
                android:textSize="7pt"
                android:layout_height="wrap_content"
                android:layout_width="230dip"
                android:text="@string/welcomebtntitle1"
                android:background="@drawable/custombutton"/>
    

    Hope this helps. Vik is correct.

    EDIT : Here is the colors.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
       <color name="yellow1">#F9E60E</color>
       <color name="yellow2">#F9F89D</color>
       <color name="orange4">#F7BE45</color>
       <color name="orange5">#F7D896</color>
       <color name="blue2">#19FCDA</color>
       <color name="blue25">#D9F7F2</color>
       <color name="grey05">#ACA899</color>
       <color name="white1">#FFFFFF</color>
       <color name="white2">#DDDDDD</color>
    </resources>
    
    0 讨论(0)
  • 2020-12-07 16:23

    You have to put the selector.xml file in the drwable folder. Then write: android:background="@drawable/selector". This takes care of the pressed and focussed states.

    0 讨论(0)
  • 2020-12-07 16:30

    in Mono Android you can use filter like this:

    your_button.Background.SetColorFilter(new Android.Graphics.PorterDuffColorFilter(Android.Graphics.Color.Red, Android.Graphics.PorterDuff.Mode.Multiply));
    
    0 讨论(0)
提交回复
热议问题