返回

源码路 之 聊聊 Button 默认值引发的坑坑

发布时间:2022-11-15 00:05:12 715

LZ-Says:enmmm,希望所有的一切都将会有一个好的结果。虽然菜比一个,但是只要努力了,就会有好的结果~!!!

 

源码路 之 聊聊 Button 默认值引发的坑坑_外边距

前言

Enmmm,今天突然奇想,玩玩 shape 文件。

Enmmm,我想的挺美好的。

结果,mmp了。

先放上一波效果图:

 

源码路 之 聊聊 Button 默认值引发的坑坑_minHeight_02

各位看官请看右侧,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,搜了老半天,不负众望啊,请看:


@style/Widget.Button

继续深入,查看根究:




以上内容则是针对 Button 不同的状态设置的不同 Style。

而下面,则是 Button 默认的 Selector 样式文件,里面包含着一些事件触发时的一些状态值,很详细,很 nice,以后可以根据这个来仿造我们的 Button 不同情况下的不同样式。


android:drawable="@drawable/btn_default_normal" />
android:drawable="@drawable/btn_default_normal_disable" />
android:drawable="@drawable/btn_default_pressed" />
android:drawable="@drawable/btn_default_selected" />
android:drawable="@drawable/btn_default_normal" />
android:drawable="@drawable/btn_default_normal_disable_focused" />
<item
android:drawable="@drawable/btn_default_normal_disable" />

找了半天,没找到,突然想到,会不会在主题中设置了呢?

带着疑问,在万能的 Android Studio 中进行逐步查找,果不其然,如下:

 

mmp呦~!!!

而主题中,也是将 Button 按钮的默认字体大小设置为 14 sp,且开启英文转大写。

enmmm,本实例中使用的主题为:Theme.AppCompat.NoActionBar

 

Enmmm,无奈了。

收获与反思

不瞒各位老铁,关于查看这个源码,一开始走进了一个误区,也就是上面走到了 @style/Widget.Button 却发现怎么都走不下去了。

其实很多时候,换个角度,换个思维,一切也变得没有那么蛋疼了。

卡了我整整 3 天呐~!!!

如果有其他问题,可继续沟通~~~

LZ 也是小白一枚~~~

个人公众号

不定期发布博文,欢迎各位看官观看~

 

源码路 之 聊聊 Button 默认值引发的坑坑_sed_03

参考资料

  1. ​​http://androidxref.com​​;
  2. ​​https://android.googlesource.com​​。

 

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线