首先从EditText源码中发现R.attr.editTextStyle
首先要说明的是style分别是materialdesign库和来系统架构目录两种,都可以定位。
public EditText(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.editTextStyle);
}
然后定位values文件夹
![](https://img.haomeiwen.com/i2815884/f80e9004f3025d86.png)
![](https://img.haomeiwen.com/i2815884/02e985da76d6ecc9.png)
分析editTextStyle
得到如下
<item name="editTextStyle">@style/Widget.Material.EditText</item>
然后
<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
经过源码分析,发现
<item name="editTextBackground">@drawable/abc_edit_text_material</item>
![](https://img.haomeiwen.com/i2815884/5f8618cbbc098079.png)
<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 样式大致是一样的
![](https://img.haomeiwen.com/i2815884/b5f3e26415c58a2e.png)
最后得到的是这个
![](https://img.haomeiwen.com/i2815884/21893ffa74d9dcd9.png)
<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 无法和默认的保持一致,因此不能采用全局定义修改的方式进行,所以我直接拷贝复制以上
然后单独设置为背景即可。
![](https://img.haomeiwen.com/i2815884/ba078441fd9ed441.png)
设置前是这样的
![](https://img.haomeiwen.com/i2815884/b94c24e7d389bc48.png)
设置后
![](https://img.haomeiwen.com/i2815884/fc9a921fb1f85d5d.png)
最后我就解决了editspinner无法和edittext的背景边界对齐的问题了。
![](https://img.haomeiwen.com/i2815884/1d3d3f3772f2affd.png)
网友评论