我正在尝试在安卓系统中显示一个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)。