【问题标题】:Android - Center text inside EditText programmaticallyAndroid - 以编程方式在 EditText 中居中文本
【发布时间】:2014-12-13 01:19:21
【问题描述】:

我正在编写一个包含 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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      你的代码对我来说效果很好。唯一的区别是我不知道你的包含是什么样的。 我的建议是:

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

      2. 打开您设备的开发者选项:Settings->Developer Options->Show layout bounds 以调试您的视图。这样你调试起来会容易很多。


      【讨论】:

      • 原来我的 EditText 从我的上下文中继承了一些填充。可能是由于我正在使用的 AppCompat 库。
      • 酷。打开你的Show layout bounds 当调试视图会让你的生活变得更好。 :)
      • 不幸的是,使用显示布局边界选项会使填充看起来像实际视图的一部分。它在这里没有多大帮助。 ://
      【解决方案3】:

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

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

      【讨论】:

      • XML文件中的那个正确居中,我需要将Java创建的那个垂直居中。
      • 对不起...您可能需要为您的布局使用 WRAP_CONTENT。应该这样做......如果没有,我不知道。
      • 好吧。让我们尝试破解它...首先将您的参数设置为 fill_parent 和 wrap_content 并再试一次...最后一个一个一个地尝试或全部尝试一下,看看它们中的任何一个是否有影响,如果没有,你一定是以某种方式定义它两次...txtSearch.setGravity(Gravity.CENTER); and txtSearch.setGravity(Gravity.TOP); and txtSearch.setGravity(Gravity.BOTTOM); and txtSearch.setGravity(Gravity.LEFT); and txtSearch.setGravity(Gravity.RIGHT); and txtSearch.setGravity(Gravity.CENTER_VERTICAL); and txtSearch.setGravity(Gravity.CENTER_HORIZONTAL);
      猜你喜欢
      • 1970-01-01
      • 2014-01-09
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      相关资源
      最近更新 更多