在API 21中没有使用EditText填充

时间:2014-10-21 14:58:57

标签: android padding

在API 21中没有使用EditText填充。我尝试在空项目中进行,只使用单个editText,但它仍然无法正常工作。

以编程方式设置填充有效,但在我的工作项目中,我有很多具有不同填充的EditTexts,并且以编程方式设置填充是不正确的。

在API级别19 xml填充效果很好。

有没有解决方案?

这是我的EditText xml代码:

   <EditText
   android:id="@+id/et_text"
   android:text="Text"
   android:paddingLeft="20dp"
   android:paddingStart="20dp"
   android:paddingRight="20dp"
   android:paddingEnd="20dp"
   android:layout_marginLeft="30dp"
   android:layout_marginRight="30dp"
   android:layout_width="match_parent"
   android:layout_height="45dp"/>

结果中,我得到了:enter image description here

我期待:

enter image description here

6 个答案:

答案 0 :(得分:8)

这是android bug。将来它将得到修复。

Bug report on google code.

答案 1 :(得分:4)

通过使用填充创建自定义edittext并在xml中使用它来解决它。

public class MyEditTextView extends EditText{

public MyEditTextView(Context context) {
    super(context);
    init();
}

public MyEditTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public MyEditTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

private void init(){
    int paddingLeftRight = (int) getResources().getDimension(R.dimen.edittext_padding);
    int topPadding = this.getPaddingTop();
    int bottomPadding = this.getPaddingBottom();
    setPadding(paddingLeftRight, topPadding, paddingLeftRight, bottomPadding);
}

}

答案 2 :(得分:1)

尝试使用方法setLayoutParams()以编程方式提供填充它将起作用我很有希望 参考:Example

答案 3 :(得分:1)

只需将android:paddingLeft替换为android:paddingStart,无论如何应该修复这些设备上的错误。

答案 4 :(得分:0)

不是解决问题的最佳方法,但它适用于我:您可以将 android:layout_height 属性设置为某个固定值并设置 android:gravity 中心 center_vertical

<EditText
        ...
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        .../>

答案 5 :(得分:-1)

使用android standart edittext解决它的样式:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:editTextStyle">@android:style/Widget.EditText</item>
</style>