我有一个30px x 30px png文件,我想用作android:src而不是android:background。通过使用它作为背景,并提到高度和宽度的“wrap_content”,最终结果看起来更像是45px x 45像素。
理想情况下,我需要的是ImageButton和ToggleButton的混合。我希望有一个设置ImageButton的android:src的功能,以及为我自动保存状态的切换功能。
任何解决方案或解决方法?
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。但是当我看到它放在设备上时,它们看起来要大得多
答案 0 :(得分:16)
您可以使切换按钮看起来像您想要的任何内容。你只需要创建一个样式。看一下/platforms//data/res/values/styles.xml并搜索Widget.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>
所以,如果你找到btn_toggle_bg drawable,你会发现:
<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>
用于显示按钮状态的两个drawable。它们实际上被称为btn_toggle_ {on / off} .9.png,因为它们是9个Patch图像,因此它们会拉伸以匹配按钮大小。
答案 1 :(得分:6)
我想出了如何做到这一点(使用ScaleDrawable将较小的背景图像置于一个较大的ToggleButton中):
将ToggleButton设置为使用选择器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>
然后,为上面的每个项目的drawables制作一个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%"
/>
最后,有一个bug in Android that makes any ScaledDrawables invisible at first,直到你设定他们的等级。因此,在为视图充气时,请从1-10000调用setLevel()(1是最小刻度,10000是全尺寸):
StateListDrawable star = (StateListDrawable) myToggleButton.getBackground();
star.setLevel(5000); // centers the image at half size. shame on Android for using magic numbers!
答案 2 :(得分:1)
<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>
答案 3 :(得分:0)
除了@caseyB不得不说(看评论),我不得不改变活动的主题以达到预期的效果。我认为这是HoneyComb Xoom上的问题,可能在手机上看不到。 感谢大家查看我的问题和帮助。
答案 4 :(得分:-1)
“快速而肮脏”的实现方法是使用相对布局并将ImageView放在ToggleButton的顶部。设置android:layout_centerInParent="true"
并在切换
说 - CaseyB的另一个解决方案(自定义背景文件)是正确的方法