问题描述:
在使用Button时,如果Button只是设置背景图片时(或者button文字很少,字体很小时),而图片较小时,经常会出现使用Wrap_content失效,导致按钮变形。
原因探究:
通过查看安卓源码我们发现 AppCompat 主题中 Button 的默认 style 是"Base.Widget.AppCompat.Button",具体属性参数如下:
<style name="Base.Widget.AppCompat.Button" parent="android:Widget">
<item name="android:background">@drawable/abc_btn_default_mtrl_shape</item>
<item name="android:textAppearance">?android:attr/textAppearanceButton</item>
<item name="android:minHeight">48dip</item>
<item name="android:minWidth">88dip</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:gravity">center_vertical|center_horizontal</item>
</style>
通过以上属性参数,我们可以确定Button的默认android:minHeight=48dip,android:minWidth=88dip,这两个参数决定了Button的最小宽高为88dp*48dp,这是引起buttom中图片拉伸变形的主要原因。
解决方案:
方案1:
如果button只需要设置背景图片,不需要text时,可以使用ImageButtom代替Buttom。
方案2.
可以在布局button时,修改android:minHeight和android:minWidthp的值为0dp,具体做法如下:
<Button
android:id="@+id/btnPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="0dp"
android:minHeight="0dp"
android:background="@drawable/play_start"/>
方案3
自定义button的style,这样可以在修改全局的buttom的android:minHeight和android:minWidthp的属性,具体做法如下:
在项目的values/styles.xml文件中添加如下style:
<style name="MyButton_Style" parent="Base.Widget.AppCompat.Button">
<item name="android:minHeight">0dip</item>
<item name="android:minWidth">0dip</item>
</style>
然后在values/styles.xml文件的AppTheme style节点中添加如下代码:
<item name="android:buttonStyle">@style/MyButton_Style</item>
到此,大功告成。
网友评论