Android 自定义编辑文本垂直对齐
我创建了一个自定义的EditText(实际上,我只是设置了一个可绘制的背景)。问题是它的文本总是顶部对齐,我希望它垂直居中对齐。我已经试过把它的重心设为垂直中心,但没用。这是我创建的可绘制图形:Android 自定义编辑文本垂直对齐,android,android-edittext,custom-view,Android,Android Edittext,Custom View,我创建了一个自定义的EditText(实际上,我只是设置了一个可绘制的背景)。问题是它的文本总是顶部对齐,我希望它垂直居中对齐。我已经试过把它的重心设为垂直中心,但没用。这是我创建的可绘制图形: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:g
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:gravity="center_vertical">
<solid android:color="#FFFFFF"/>
<stroke android:width="1dp" android:color="#88BA52" />
<corners
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>
</shape>
这可能会有所帮助我也看到了同样的问题。以编程方式创建EditText导致重力被垂直强制到顶部(而水平居中仍然有效)。。。直到我注释掉设置背景的电话!在这种情况下,垂直重力和水平重力都受到尊重 这是我的密码:
inputField.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
inputField.setLinksClickable(false);
inputField.setInputType(ie.getInputType());
inputField.setFadingEdgeLength(0);
inputField.setHorizontalFadingEdgeEnabled(false);
inputField.setPadding(borderWidth.left,borderWidth.top,borderWidth.right,borderWidth.bottom);
inputField.setOnEditorActionListener(this);
inputField.setHint(hint);
inputField.setCompoundDrawables(null, null, null, null);
// comment out the next two lines to see gravity working fine
inputField.setBackgroundDrawable(null);
inputField.setBackgroundColor(Color.WHITE);
inputField.setTextColor(Color.BLACK);
inputField.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20);
inputField.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
现在,操作系统源代码中的步进跟踪显示,垂直居中的计算奇怪地依赖于背景报告的高度。EditText中的Defaut是一个具有64像素高的默认位图的NinePatchDrawable
。如果EditText为该高度,则文本将居中。否则,它将更接近顶部。设置背景色将在内部使用一个可着色的ColorDrawable
,它报告的内在高度为零,因此只使用文本高度并垂直将其与顶部对齐
解决此问题的方法是创建自己的
Drawable
子类,将其设置为EditText实例的背景,确保在Drawable上调用setBounds()
,使其具有报告的高度,并覆盖getIntrinsicHeight()
报告使用setBounds()设置的高度的可绘制方法
尝试减小字体大小。无论出于何种原因,我发现如果字体太大,即使EditText看起来应该足够高以容纳文本,文本也会比垂直居中的文本高
向下调整字体大小,或者如果使用默认值,则指定字体大小,直到找到足够小的字体大小值,使其正确居中。谢谢您的回复,Markiz。但不幸的是,这没有帮助。实际上,我在它的组件上设置如下:
left=10代码>top=10代码>右=宽度-10代码>底部=顶部+45代码>searchEditText.布局(左、上、右、下)代码>我怀疑这个自定义高度把它搞砸了。但是我不知道如何解决这个问题。是的,我没有看到任何特殊的EditText方法来解决这个问题=(对不起
searchEditText.setGravity(Gravity.CENTER | Gravity.LEFT);
inputField.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
inputField.setLinksClickable(false);
inputField.setInputType(ie.getInputType());
inputField.setFadingEdgeLength(0);
inputField.setHorizontalFadingEdgeEnabled(false);
inputField.setPadding(borderWidth.left,borderWidth.top,borderWidth.right,borderWidth.bottom);
inputField.setOnEditorActionListener(this);
inputField.setHint(hint);
inputField.setCompoundDrawables(null, null, null, null);
// comment out the next two lines to see gravity working fine
inputField.setBackgroundDrawable(null);
inputField.setBackgroundColor(Color.WHITE);
inputField.setTextColor(Color.BLACK);
inputField.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20);
inputField.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);