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

问题描述 投票:2回答:3

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

“我的失败”

如从上图所见,文本未垂直居中。我将EditText背景设置为浅红色,以便您可以看到其布局范围。我在其左侧通过XML代码呈现了一个EditText,它可以正常工作。

如何使文本正确显示?

这是我的中间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设备中看起来都是这样。

java android android-layout android-edittext android-xml
3个回答
2
投票

[从外观上看,它确实在某种程度上看起来是对齐的。如果它与顶部对齐,则可能位于最顶端,并且具有1dp的保证金。如果它与底部对齐,那么它也将很高。

[我在原始图像的上方绘制了一个绿色框,以显示我认为相对于其对齐的位置。

“填充框”

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


1
投票

在我看来,您的代码非常有效。唯一的区别是我不知道您的容器是什么样的。我的建议是:

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

  2. 打开设备的开发人员选项:Settings-> Developer Options-> Show layout bounds调试视图。这样,您可以更轻松地进行调试。


<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9IV21KeC5wbmcifQ==” alt =“在此处输入图像描述”>


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.