默认的EditText背景似乎在左边放了~4dp的填充。这会导致与其他小部件不对齐。
我做了一个简单的应用程序来演示。截图:
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:background="#00ff00"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="HINT"
android:text="TEXT"
android:singleLine="true"/>
<TextView
android:background="#00ff00"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
反正有没有阻止这样做?
答案 0 :(得分:9)
一种解决方法是在侧面使用负边距(-4dp)
这仅在EditText背景与布局背景匹配时才有效,并且您在Layout中的任何一侧都没有任何内容将由EditText覆盖
答案 1 :(得分:5)
您是否尝试添加android:background =“@ android:color / transparent”?
我用这个结果做了同样的例子
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:background="#00ff00"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="HINT"
android:text="TEXT"
android:background="@android:color/transparent"
android:singleLine="true"/>
<TextView
android:background="#00ff00"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
第二种方式
像这样在
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" /> <!--background color of box-->
</shape>
</item>
<item
android:top="-2dp"
android:right="-2dp"
android:left="-2dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="#000000" /> <!-- color of stroke -->
</shape>
</item>
</layer-list>
然后在你的布局中将这个添加到你的EditText android:background =“@ drawable / edittext_background”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:background="#00ff00"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="HINT"
android:text="TEXT"
android:background="@drawable/edittext_background"
android:singleLine="true"
android:layout_marginBottom="3dp"/>
<TextView
android:background="#00ff00"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
答案 2 :(得分:3)
在编辑文本字段中使用android:layout_marginLeft="-4dp"
,如下所示。
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="HINT"
android:text="TEXT"
android:layout_marginLeft="-4dp"
android:singleLine="true"/>
答案 3 :(得分:2)
将EditText的背景更改为自定义,它有九个补丁填充
答案 4 :(得分:0)
如果您只想对齐文本而不是对齐下面的行,则可以通过编程方式覆盖填充。
所以,让我们说这个布局适用于某项活动。创建活动后,您可以执行以下操作:
findViewById(R.id.edit_text).setPaddding(
0,
old_top_paddding,
old_right_paddding,
old_bottom_padding);
关键是在应用背景后重新设置填充。您可能需要注意再次设置背景的情况,因此可能有一个想法是覆盖setBackground*()
方法并在那里重新设置填充。
答案 5 :(得分:0)
此问题来自默认值?android:attr/editTextBackground
。
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"
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">
<selector>
<item android:state_enabled="false">
<nine-patch
android:alpha="?android:attr/disabledAlpha"
android:src="@drawable/abc_textfield_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item
android:state_focused="false"
android:state_pressed="false">
<nine-patch
android:src="@drawable/abc_textfield_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item>
<nine-patch
android:src="@drawable/abc_textfield_activated_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
</selector>
</inset>
如您所见,EditText所有边缘的插入值为abc_edit_text_inset_top_material = 4dp
。这使得EditText在其内容周围具有较小的填充。
要删除该填充,您应该使用修改后的editTextBackground
属性创建一个新的EditText样式。例如:
<style name="Widget.App.TextField" parent="@style/Widget.AppCompat.EditText">
<item name="colorControlActivated">#303E44</item>
<item name="colorControlHighlight">#E5E9EC</item>
<item name="colorControlNormal">#E5E9EC</item>
<item name="editTextBackground">@drawable/background_new_edit_text</item>
<item name="android:editTextBackground">@drawable/background_new_edit_text</item>
</style>
新background_edit_text.xml
(请记住将此文件放入正确的drawable目录中,以便不会被覆盖,例如drawable-v21 ...)
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="@dimen/spacing_0dp">
<selector>
<item android:state_enabled="false">
<nine-patch
android:alpha="?android:attr/disabledAlpha"
android:src="@drawable/abc_textfield_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item
android:state_focused="false"
android:state_pressed="false">
<nine-patch
android:src="@drawable/abc_textfield_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item>
<nine-patch
android:src="@drawable/abc_textfield_activated_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
</selector>
</inset>
将新样式应用于您的EditText
:
<EditText
android:id="@+id/edt_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Widget.App.TextField"
/>