Android 解决Buttom中只有图片时设置宽高Wrap_content 失效的问题

Android 解决Buttom中只有图片时设置宽高Wrap_content 失效的问题

问题描述:

在使用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>

到此,大功告成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值