LZ-Says:enmmm,希望所有的一切都将会有一个好的结果。虽然菜比一个,但是只要努力了,就会有好的结果~!!!
前言
Enmmm,今天突然奇想,玩玩 shape 文件。
Enmmm,我想的挺美好的。
结果,mmp了。
先放上一波效果图:
各位看官请看右侧,MMP,我就是写个 shape 文件,怎么边距这么大呢?
Enmmm,下面一起跟随贺仔瞧瞧今天的坑坑吧~
Enmmm,难受
一开始,LZ 在想,会不会是内外边距导致的呢?
风风火火,设置内外边距均为 0,美美的点击运行,心想,MMP,坑我,揍你,哇咔咔。
结果一出来,只听啪啪俩声脆响,MMP,没效果。
Enmmm,我 。。。
看看源码吧。希望能找到问题根源。
本文基于 Android API 27。
首先查看 Button 源码:
public class Button extends TextView {
public Button(Context context) {
this(context, null);
}
public Button(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.buttonStyle);
}
public Button(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public Button(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
event.setClassName(Button.class.getName());
}
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(Button.class.getName());
}
}
这边发现了一个默认 Style,如下:
com.android.internal.R.attr.buttonStyle
会不会是这个 Style 设置了什么鬼呢?
可能设置什么呢?猜一波~
Enmmm,设置内外边距都无效,会不会是最小高度 / 宽度?
Enmmm,试试吧。
Enmmm,搜了老半天,不负众望啊,请看:
<!-- Button styles -->
<item name="buttonStyle">@style/Widget.Button</item>
继续深入,查看根究:
<style name="Widget.Button">
<item name="background">@drawable/btn_default</item>
<item name="focusable">true</item>
<item name="clickable">true</item> // 默认开启字母转大写
<item name="textAppearance">?attr/textAppearanceSmallInverse</item>
<item name="textColor">@color/primary_text_light</item>
<item name="gravity">center_vertical|center_horizontal</item>
</style>
<style name="Widget.Button.Small">
<item name="background">@drawable/btn_default_small</item>
</style>
<style name="Widget.Button.Inset">
<item name="background">@drawable/button_inset</item>
</style>
<style name="Widget.Button.Transparent">
<item name="background">@drawable/btn_default_transparent</item>
<item name="textAppearance">?attr/textAppearanceSmall</item>
<item name="textColor">@color/white</item>
</style>
以上内容则是针对 Button 不同的状态设置的不同 Style。
而下面,则是 Button 默认的 Selector 样式文件,里面包含着一些事件触发时的一些状态值,很详细,很 nice,以后可以根据这个来仿造我们的 Button 不同情况下的不同样式。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_normal_disable" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_selected" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_normal_disable_focused" />
<item
android:drawable="@drawable/btn_default_normal_disable" />
</selector>
找了半天,没找到,突然想到,会不会在主题中设置了呢?
带着疑问,在万能的 Android Studio 中进行逐步查找,果不其然,如下:
<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>
mmp呦~!!!
而主题中,也是将 Button 按钮的默认字体大小设置为 14 sp,且开启英文转大写。
enmmm,本实例中使用的主题为:Theme.AppCompat.NoActionBar
<style name="Base.TextAppearance.AppCompat.Button">
<item name="android:textSize">@dimen/abc_text_size_button_material</item>
<item name="textAllCaps">true</item>
<item name="android:textColor">?android:textColorPrimary</item>
</style>
Enmmm,无奈了。
收获与反思
不瞒各位老铁,关于查看这个源码,一开始走进了一个误区,也就是上面走到了 @style/Widget.Button 却发现怎么都走不下去了。
其实很多时候,换个角度,换个思维,一切也变得没有那么蛋疼了。
卡了我整整 3 天呐~!!!
如果有其他问题,可继续沟通~~~
LZ 也是小白一枚~~~
个人公众号
不定期发布博文,欢迎各位看官观看~
参考资料