我有一个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>
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
playbutton.png和pausebutton.png各占30px x 30px.但是当我看到它放在设备上时,它们看起来要大得多
Cas*_*eyB 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>
Run Code Online (Sandbox Code Playgroud)
所以如果你找到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>
Run Code Online (Sandbox Code Playgroud)
这表明它使用标准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>
Run Code Online (Sandbox Code Playgroud)
哪两个用于显示按钮状态的drawable.它们实际上被称为btn_toggle_ {on/off} .9.png,因为它们是9个Patch图像,因此它们会拉伸以匹配按钮大小.
我想出了如何使用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>
Run Code Online (Sandbox Code Playgroud)
然后,为上面的每个项目的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%"
/>
Run Code Online (Sandbox Code Playgroud)
最后,Android中存在一个错误,使得任何ScaledDrawable首先都不可见,直到您设置它们的级别.因此,在给视图充气时,从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!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24931 次 |
| 最近记录: |