美文网首页
Android 解决Buttom中只有图片时设置宽高Wrap_c

Android 解决Buttom中只有图片时设置宽高Wrap_c

作者: Marlon_IT | 来源:发表于2018-07-19 09:58 被阅读46次

问题描述:

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

到此,大功告成。

相关文章

网友评论

      本文标题:Android 解决Buttom中只有图片时设置宽高Wrap_c

      本文链接:https://www.haomeiwen.com/subject/eylapftx.html