Android - 以编程方式在EditText中居中文本

时间:2014-12-13 01:19:21

标签: java android android-layout android-edittext android-xml

我正在编写包含EditText的自定义Android视图。我希望能够通过Java代码将文本垂直居中,但它无法正常工作。

My failure

从上图中可以看出,文字不是垂直居中的。我将EditText背景设置为浅红色,以便您可以看到它的布局边界。我在左边有一个EditText,它通过XML代码呈现,它正常工作。

如何正确显示文字?

这是我的EditText中间代码:

txtSearch = new EditText(context);
txtSearch.setLayoutParams(new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1f));
txtSearch.setGravity(Gravity.CENTER_VERTICAL);
txtSearch.setBackgroundColor(context.getResources().getColor(R.color.nowl_red_transparent_12));//Color.TRANSPARENT);
txtSearch.setHint("Search");
txtSearch.setHintTextColor(context.getResources().getColor(R.color.text_hint));
txtSearch.setInputType(InputType.TYPE_CLASS_TEXT);
txtSearch.setMaxLines(1);
txtSearch.setHorizontalScrollBarEnabled(true);
txtSearch.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));
txtSearch.setTextSize(16f);
txtSearch.setEllipsize(TextUtils.TruncateAt.END);
txtSearch.setText("Y u no center");
container.addView(txtSearch);

以下是左侧EditText的代码,它正确呈现:

<EditText
    android:layout_width="50dp"
    android:layout_height="match_parent"
    android:background="@color/transparent"
    android:hint="test" />

我几乎尝试了一切。我使用了setGravity(Gravity.CENTER_VERTICAL),删除/添加了属性等等。没有什么工作。这是Android的错误还是我在这里缺少什么?在UI预览版和实际的Android设备中看起来都是这样。

3 个答案:

答案 0 :(得分:2)

从它的外观来看,它看起来确实在某种程度上是对齐的。如果它是顶部对齐的,它将位于远端,可能有1dp的边距。如果底部对齐,它也会很高。

我在原始图像的顶部画了一个绿色框,以显示我认为相对于它的对齐方式。

Padding box

鉴于您已使用自定义颜色替换原始背景,Android可能会从您的上下文对象或系统默认设置中提取一些意外的默认设置并添加填充(尽管我不记得Android有任何设置)默认情况下填充)。您是否尝试txtSearch.setPadding(0, 0, 0, 0)以防万一?

答案 1 :(得分:1)

我的代码很适合我。唯一的区别是我不知道你的包含是什么样的。 我的建议是:

  1. 尝试删除必须为9补丁图像的白色背景图像

  2. 打开您设备的开发者选项:Settings - &gt; Developer Options - &gt; Show layout bounds以调试您的观看次数。通过这种方式,您可以更轻松地进行调试。


  3. enter image description here

答案 2 :(得分:0)

android:gravity="top"属性添加到xml文件中的EditText。

How do I place the text inside an EditText widget at the top?