EditText 填充在 Android 中无法按预期工作

Posted

技术标签:

【中文标题】EditText 填充在 Android 中无法按预期工作【英文标题】:EditText Padding not Working as Expected in Android 【发布时间】:2016-11-15 13:17:35 【问题描述】:

我在MarshMallow 设备上进行了测试。当我为EditText 编写xml 并将PaddingBottom 设置为Retype EditText 时。但它不工作。但是当我将PaddingLeft 设置为New PassWord EditText 工作正常。

方法:1

xml代码:

 <EditText
            android:id="@+id/change_password_old_password_edittext"
            android:layout_below="@+id/change_password_mobileNumber_text"
            android:layout_
            android:layout_
            android:hint="Old Password"
            android:layout_marginTop="20.0dip"
            android:textColorHint="#40000000"
            android:textSize="@dimen/textsize16"/>

        <EditText
            android:id="@+id/change_password_new_password_edittext"
            android:layout_below="@+id/change_password_old_password_edittext"
            android:layout_
            android:layout_
            android:hint="New Password"
            android:layout_marginTop="20.0dip"
            android:textColorHint="#40000000"
            android:paddingLeft="10dip"
            android:textSize="@dimen/textsize16"/>

        <EditText
            android:id="@+id/change_password_retype_password_edittext"
            android:layout_below="@+id/change_password_new_password_edittext"
            android:layout_
            android:layout_
            android:hint="Retype Password"
            android:layout_marginTop="20.0dip"
            android:paddingBottom="10dip"
            android:textColorHint="#40000000"
            android:textSize="@dimen/textsize16"/>

屏幕截图:

方法:2

然后我决定以编程方式设置PaddingBottom。但它给出了奇怪的输出。

java代码:

OnCreate方法内

   EditText change_password_retype_password_edittext = (EditText)findViewById(R.id.change_password_retype_password_edittext);
        change_password_retype_password_edittext.setPadding(0,0,0,10);

输出:

注意:我已经在 MarshmallowLolliPopJellybean 上进行了测试。但在所有设备不工作。

【问题讨论】:

布局好像没问题。发布整个布局代码。 @AkshayBhat 你看到屏幕截图了吗?问题是显示.. 是的,但是我复制了你的布局代码并尝试过,它工作正常 @AkshayBhat 发布屏幕截图.. 截图:i.stack.imgur.com/iJ6cP.png 【参考方案1】:

您没有指定您设置的填充单位,因此默认情况下它采用pixel,它小于dp,因此结果与您的预期不符。

将像素转换为dp你会得到解决方案:

int paddingPixel = 10;
float density = getResources().getDisplayMetrics().density;
int paddingDp = (int)(paddingPixel * density);
change_password_retype_password_edittext.setPadding(0,0,0,paddingDp);

欲了解更多信息,请访问:Add padding on view programmatically

【讨论】:

很高兴知道快乐的编码..!! :) 当我在此代码上设置paddingLeft 时,它只会显示PaddingBottom 而不是PaddingLeft 你是在第一次争论吗?? setPadding 的?确保在以编程方式设置填充时没有任何 xml 填充,否则它们会发生冲突..!! Thanx 但是我发现我在我的 Xml 中做错了什么我设置了dip 所以它没有像我预期的那样显示但是当我将dip 更改为dp 时工作正常... 【参考方案2】:

尝试使用这个:

android:drawablePadding="8dp"

这个填充将把可绘制从文本光标中移开 看例子。

【讨论】:

以上是关于EditText 填充在 Android 中无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Android Oreo 禁用 EditText 的自动填充

在Android中长按edittext时崩溃

如何使用光标将EditMxt多线连接,并在顶部开始填充?

在android中使用edittext对ListView进行排序

android开发怎么让edittext无法获取焦点

android - 在更改 EditText 值时无法更新列表视图