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

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

我正在编写一个包含 EditText 的自定义 Android View 。我希望能够通过 Java 代码将文本垂直居中,但它不起作用。

My failure

从上图中可以看出,文本没有垂直居中。我将 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 的边距。如果它是底部对齐的,它也会这么高。

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

Padding box

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

关于java - Android - 以编程方式在 EditText 内居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454535/

相关文章:

java - 使用 int 作为 java.util.Dictionary 的类型参数

java - 为什么可以创建基元数组的集合而不是基元集合

android - 关于构建错误 : DexIndexOverflowException

java - 动态克隆 android Activity ?

android-layout - com.android.internal.R.id.content 无法解析为闹钟代码中的变量

java - 如何有效地将一个已经排序的列表分成组,可能使用 Guava?

java - 如何在 Amazon 的 EC2 上运行 Java 服务器?

android - 在安装应用程序时复制 SD 卡上的文本文件?

android - RelativeLayout 子间距

ios - 适用于 iOS 的基于 XML 的布局