Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义编辑文本垂直对齐_Android_Android Edittext_Custom View - Fatal编程技术网

Android 自定义编辑文本垂直对齐

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

我创建了一个自定义的EditText(实际上,我只是设置了一个可绘制的背景)。问题是它的文本总是顶部对齐,我希望它垂直居中对齐。我已经试过把它的重心设为垂直中心,但没用。这是我创建的可绘制图形:

<?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);