【发布时间】:2014-12-28 02:13:31
【问题描述】:
我正在尝试在 Android 中显示 TextView 以使视图中的文本顶部对齐:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create container layout
FrameLayout layout = new FrameLayout(this);
// Create text label
TextView label = new TextView(this);
label.setTextSize(TypedValue.COMPLEX_UNIT_PX, 25); // 25 pixels tall
label.setGravity(Gravity.TOP + Gravity.CENTER); // Align text top-center
label.setPadding(0, 0, 0, 0); // No padding
Rect bounds = new Rect();
label.getPaint().getTextBounds("gdyl!", 0, 5, bounds); // Measure height
label.setText("good day, world! "+bounds.top+" to "+bounds.bottom);
label.setTextColor (0xFF000000); // Black text
label.setBackgroundColor(0xFF00FFFF); // Blue background
// Position text label
FrameLayout.LayoutParams layoutParams =
new FrameLayout.LayoutParams(300, 25, Gravity.LEFT + Gravity.TOP);
// also 25 pixels tall
layoutParams.setMargins(50, 50, 0, 0);
label.setLayoutParams(layoutParams);
// Compose screen
layout.addView(label);
setContentView(layout);
}
此代码输出以下图像:
注意事项:
- 蓝色框高 25 像素,与要求的一样
- 文本边界也根据要求报告为 25 像素高 (6 - (-19) = 25)
- 文本不是从标签顶部开始,而是在其上方有一些填充,忽略 setPadding()
- 这会导致文本在底部被剪裁,即使从技术上讲该框足够高
我如何告诉 TextView 在框的最顶部开始文本?
我对可能的答案有两个限制:
- 我确实需要保持文本顶部对齐,所以如果有一些底部对齐或垂直居中的技巧,我不能使用它,因为我有 TextView 比它高的场景需要。
- 我有点兼容性问题,所以如果可能的话,我想坚持使用早期 Android API 中可用的调用(最好是 1,但绝对不超过 7)。
【问题讨论】:
-
我建议你看看这个; stackoverflow.com/questions/7549182/…我相信你的 textSize 是 25 px,但你的 textView 的高度超过 25,(我尝试 32 px 并且它完美地居中所有布局。)
标签: java android textview vertical-alignment