设置ToggleButton的图像源

我有一个30px x 30px的png文件,我想用作android:src而不是android:background。 通过使用它作为背景,并提供高度和宽度的“wrap_content”,最终的结果看起来更像是45px x 45px。

理想情况下,我需要的是ImageButton和ToggleButton的混合。 我想要设置ImageButton的android:srcfunction和切换状态自动保存在哪里的function。

任何解决scheme或解决方法?

TIA。

嗨,它似乎没有帮助创造另一种风格。 src仍然看起来大得多,原来是30px x 30px。

在main.xml中:

<ToggleButton android:id="@+id/blah" style="@style/myToggle" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ToggleButton> 

在Styles.xml中

 <style name="myToggle"> <item name="android:textOn">""</item> <item name="android:textOff">""</item> <item name="android:disabledAlpha">?android:attr/disabledAlpha</item> <item name="android:background">@drawable/my_btn_toggle_bg</item> </style> 

在my_btn_toggle_bg.xml中

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/myBackground" android:drawable="@android:drawable/btn_default_small" /> <item android:id="@+id/myToggle" android:drawable="@drawable/my_btn_toggle" /> </layer-list> 

在my_btn_toggle.xml中

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/pausebutton" /> <item android:state_checked="true" android:drawable="@drawable/playbutton" /> </selector> 

playbutton.png和pausebutton.png是每个30px x 30px。 但是当我在设备上看到它时,它们显得更大

Related of "设置ToggleButton的图像源"

你可以使切换button看起来像你想要的。 你只需要创build一个风格。 查看/platforms//data/res/values/styles.xml并searchWidget.Button.ToggleButton它看起来像这样:

 <style name="Widget.Button.Toggle"> <item name="android:background">@android:drawable/btn_toggle_bg</item> <item name="android:textOn">@android:string/capital_on</item> <item name="android:textOff">@android:string/capital_off</item> <item name="android:disabledAlpha">?android:attr/disabledAlpha</item> </style> 

所以,如果你去findbtn_toggle_bg可绘制的,你会发现这个:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+android:id/background" android:drawable="@android:drawable/btn_default_small" /> <item android:id="@+android:id/toggle" android:drawable="@android:drawable/btn_toggle" /> </layer-list> 

其中显示了它使用标准的Button背景和一个名为btn_toggle的可绘制的src。 btn_src.xml看起来像这样:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/btn_toggle_off" /> <item android:state_checked="true" android:drawable="@drawable/btn_toggle_on" /> </selector> 

哪个是用来显示button状态的两个drawable。 他们实际上被称为btn_toggle_ {on / off} .9.png,因为他们是9补丁图像,所以他们伸展以匹配button的大小。

我想通过使用ScaleDrawable来做到这一点(在一个大的ToggleButton中放置一个较小的背景图像):

设置您的ToggleButton使用一个select器Drawable,正常情况下:

 <selector xmlns:android="http://schemas.android.com/apk/res/android" android:variablePadding="true"> <item android:drawable="@drawable/ic_star_selected_centered" android:state_checked="true" /> <item android:drawable="@drawable/ic_star_default_white_centered" android:state_pressed="true" /> <item android:drawable="@drawable/ic_star_default_black_centered" /> </selector> 

然后,为上面的每个项目的drawable制作一个ScaledDrawable,它指向您的ACTUAL图像文件。 例如ic_star_selected_centered.xml:

 <scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_star_selected" android:scaleGravity="center" android:scaleHeight="100%" android:scaleWidth="100%" /> 

最后, Android中存在一个错误,使得ScaledDrawables一开始就不可见 ,直到你设置了它们的级别。 所以当你膨胀你的视图时,从1-10000(1是最小的尺度,10000是全尺寸的)调用setLevel():

  StateListDrawable star = (StateListDrawable) myToggleButton.getBackground(); star.setLevel(5000); // centers the image at half size. shame on Android for using magic numbers! 
 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true"> <inset android:insetLeft="15dp" android:insetRight="15dp" android:insetTop="15dp" android:insetBottom="15dp"> <bitmap android:src="@drawable/ic_star_selected_centered" /> </inset> </item> <item android:state_pressed="true" > <inset android:insetLeft="15dp" android:insetRight="15dp" android:insetTop="15dp" android:insetBottom="15dp"> <bitmap android:src=" android:src="@drawable/ic_star_default_white_centered" /> </inset> </item> <item > <inset android:insetLeft="15dp" android:insetRight="15dp" android:insetTop="15dp" android:insetBottom="15dp"> <bitmap android:src="@drawable/ic_star_default_black_centered" /> </inset> </item> </selector> 

除了@caseyB不得不说的(看评论),我不得不改变活动的主题来达到预期的效果。 我认为这是HoneyComb Xoom的一个问题,可能不会在手机上看到。 感谢大家看我的问题和帮助。

实现这一点的“快速和肮脏”的方式是使用相对布局,并将您的ImageView放在ToggleButton的顶部。 设置android:layout_centerInParent="true"并在切换器上设置你的onClick监听器

说 – 由CaseyB(定制背景文件)的另一个解决scheme是正确的方法