我正在编写一个包含 EditText 的自定义 Android View 。我希望能够通过 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 设备中看起来都是这样。
最佳答案
从外观上看,它确实在某种程度上是一致的。如果它是顶部对齐的,那么它将位于最顶部,并且可能有 1dp 的边距。如果它是底部对齐的,它也会这么高。
我在原始图像的顶部画了一个绿色框,以显示我认为它相对于什么对齐的内容。
假设您已经用自定义颜色替换了原始背景,Android 可能会从您的上下文对象或系统默认值中提取一些意外的默认设置,并添加填充(尽管我不记得 Android 有任何填充)默认填充)。您是否尝试过 txtSearch.setPadding(0, 0, 0, 0)
以防万一?
关于java - Android - 以编程方式在 EditText 内居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454535/