简体   繁体   中英

Toggle Button acting as an Image Button

I need a toggle button to have an image and a background color. Currently, my toggle button only has an image and no background color. Here is the code for it

<ToggleButton
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:layout_weight="1.0"
android:layout_margin="5dp"
android:onClick="onToggleClicked"
android:textSize="0sp"
android:checked="false"
android:background="@drawable/soundfocuslone1"/>


<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<bitmap android:src="@drawable/soundonlone1"
android:gravity="center"/>
</item>
<item android:state_pressed="true">
<bitmap android:src="@drawable/soundfocuslone1"
android:gravity="center" />
</item>
<item android:state_checked="false">
<bitmap android:src="@drawable/soundofflone1"/>
</item>
</selector>

Is it possible to have two backgrounds on the toggle button? I want a background color as well as an image on it. If not, is there a simple way to have an image button behave like a toggle button? Having an image button acting as a toggle button would probably be easier as the image is not scaled on the toggle button. Thanks, and I would appreciate all replies.

if you dont want the image to be placed in the center, use this for giving background.

1 . put this in your toggle button - android:background="@drawable/bw_toggle_on_selector"

2 . create an XML in drawable folder with the name "bw_toggle_on_selector" and paste the below code in it-

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"     android:shape="rectangle" >
<corners
android:radius="14dp"
/>
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#7995A8"
android:startColor="#E8E8E8"
android:endColor="#000000"
android:type="linear"
/>
<padding
 android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="270dp"
android:height="60dp"
/>
<stroke
android:width="3dp"
android:color="#878787"
/>
 </shape>  

3 .use android:drawableLeft for setting background image.

and if you want to place the image in center, then use this code (it covers everything incl. background image).

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item 
    android:state_pressed="true">
    <layer-list>
        <item>
            <bitmap 
                android:gravity="center" 
                android:src="@drawable/ic_stop" 
                 />
        </item>
        <item>
            <shape>
                 <gradient 
                     android:angle="270" 
                     android:endColor="#a0e0b071" 
                     android:startColor="#a0a67637" />
                 <stroke 
                     android:width="1dp" 
                     android:color="#5c3708" />
                 <corners 
                     android:radius="5dp" />
                 <padding 
                     android:bottom="10dp" 
                     android:left="10dp" 
                     android:right="10dp" 
                     android:top="10dp" />
            </shape>
        </item>
    </layer-list>
</item>

<item 
    android:state_enabled="true">
    <layer-list>
        <item>
            <bitmap 
                android:gravity="center" 
                android:src="@drawable/ic_back" 
                 />
        </item>
        <item>
            <shape 
                android:shape="rectangle">
                <gradient 
                    android:angle="270" 
                    android:endColor="#a0a67637" 
                    android:startColor="#a0e0b071" />
                <stroke 
                    android:width="1dp" 
                    android:color="#5c3708" />
                <corners 
                    android:radius="5dp" />
                <padding 
                    android:bottom="10dp" 
                    android:left="10dp" 
                    android:right="10dp" 
                    android:top="10dp" />
            </shape>
        </item>
    </layer-list>
</item>


</selector>

** Some Tips **

*Changing Button text onClick

1 . create a XML file in Drawable folder with the name "text_color.xml"

paste the below code in it-

<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="#000000" />
<item
android:state_pressed="false"
android:color="#01DFD7" />
 </selector>

2 . put this in your button to define the XML android:textColor="@drawable/text_color"

*Faster way of Resizing my images?

use this tool or Android asset studio (google it)

*How do i make a Custom Background for my Buttons?

try this online tool :)

First of all you write inside your xml file:

   <ToggleButton
                        android:id="@+id/tgTextReader"
                        android:layout_width="60dp"
                        android:layout_height="36dp"
                        android:background="@drawable/bw_toggle_on_selector"
                        android:focusable="false"
                        android:focusableInTouchMode="false"
                        android:textOff=""
                        android:textOn="" />

then create folder inside res/
drawable folder write xml file name is bw_toggle_on_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/a"
          android:state_checked="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/b"
        android:state_checked="false"/>

 </selector>

this file keep in drawable foloder. and also create a new folder inside res /
drawable-nodpi where two image keep there. such as image a, image b. hops work successfully. Thanks

Actually ToggleButton has "android:button" attribute. So u can use "android:button" attribute for selector, and "android:background" for giving the background color to the ToggleButton.But using toggle button we can get the gravity issue so you can use check box instead of toggle button.

<CheckBox
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:layout_weight="1.0"
android:layout_margin="5dp"
android:onClick="onToggleClicked"
android:textSize="0sp"
android:checked="false"
android:padding="5dp"
android:button="@drawable/soundfocuslone1"
android:background="ur_background_color_code or drawable"/>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM