2014-12-13 40 views
2

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

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设备中看起来也是这样。

回答

2

从外观上来看,它看起来对齐到一定程度。如果它是顶部对齐的,它可能会在最远的顶部,可能有1dp的边距。如果它是底部对齐的,那么它会非常高。

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

Padding box

鉴于你已经取代了原来的背景,自定义颜色,这可能是可能的,Android是从上下文对象或系统默认拉动一些意想不到的默认设置,无论是和将填充(虽然我不不记得Android默认有任何填充)。你有没有试过txtSearch.setPadding(0, 0, 0, 0)以防万一?

+0

谢谢,这工作完美! – Pkmmte 2014-12-13 02:30:24

0

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

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

+0

的一个XML文件中正确居中,我需要到中心通过Java创建垂直的一个。 – Pkmmte 2014-12-13 01:25:47

+0

对不起...您可能需要为您的布局使用WRAP_CONTENT。这应该做到......如果不是,我不知道。 – 2014-12-13 01:34:57

+0

刚刚尝试过,它没有按预期工作。 :/ http://imgur.com/NxOXQyf – Pkmmte 2014-12-13 01:39:29

1

它适合您的代码在我身边。唯一的区别是我不知道你的包含是什么。 我的建议是:

  1. 尝试删除它必须是一个9修补图像

  2. 打开设备上的开发者选项白色背景图片:Settings - >Developer Options - >Show layout bounds调试你的看法。通过这种方式,您可以更轻松地进行调试。


enter image description here

+0

原来我的EditText从我的上下文继承了一些填充。可能是由于我使用的AppCompat库。 – Pkmmte 2014-12-13 02:31:58

+0

很酷。当调试视图将使您的生活更美好时,打开“显示布局边界”。 :) – Jerome 2014-12-13 02:39:43

+0

不幸的是,使用显示布局边界选项使填充看起来像实际视图的一部分。这里没有太多帮助。 :/ – Pkmmte 2014-12-13 21:49:24

相关问题