简书链接:原创刨根问底掌握布局样式主题追踪edittext背景默认样式修改下划线分析距离左边有一点距离的原因
文章字数:628,阅读全文大约需要2分钟
首先从EditText源码中发现R.attr.editTextStyle
首先要说明的是style分别是materialdesign库和来系统架构目录两种,都可以定位。
1 2 3 4
| public EditText(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.editTextStyle); }
|
然后定位values文件夹


分析editTextStyle
得到如下
1
| <item name="editTextStyle">@style/Widget.Material.EditText</item>
|
然后
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <style name="Widget.EditText"> <item name="focusable">true</item> <item name="focusableInTouchMode">true</item> <item name="clickable">true</item> <item name="background">?attr/editTextBackground</item> <item name="textAppearance">?attr/textAppearanceMediumInverse</item> <item name="textColor">?attr/editTextColor</item> <item name="gravity">center_vertical</item> <item name="breakStrategy">simple</item> <item name="hyphenationFrequency">@dimen/config_preferredHyphenationFrequency</item> <item name="defaultFocusHighlightEnabled">false</item> </style>
|
定位到editTextBackground
经过源码分析,发现
1
| <item name="editTextBackground">@drawable/abc_edit_text_material</item>
|

1 2 3 4 5 6 7 8 9
| <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/textfield_default" /> <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/textfield_disabled" /> <item android:state_enabled="true" android:state_focused="true" android:drawable="@drawable/textfield_selected" /> <item android:state_enabled="true" android:drawable="@drawable/textfield_default" /> <item android:state_focused="true" android:drawable="@drawable/textfield_disabled_selected" /> <item android:drawable="@drawable/textfield_disabled" /> </selector>
|
定位appcompat 样式大致是一样的

最后得到的是这个

1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material" android:insetRight="@dimen/abc_edit_text_inset_horizontal_material" android:insetTop="@dimen/abc_edit_text_inset_top_material" android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector> <item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/> <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/> <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/> </selector>
</inset>
|
所以大概是insertLeft搞的鬼,由于我这里是针对我的editspinner 无法和默认的保持一致,因此不能采用全局定义修改的方式进行,所以我直接拷贝复制以上
然后单独设置为背景即可。

设置前是这样的

设置后

最后我就解决了editspinner无法和edittext的背景边界对齐的问题了。
