我有一个问题。我正在尝试创建具有规范尺寸的TextView,并且我在onMeasure方法中执行。我的progblem是我想要更改textalignment,所以我调用setGravity(Gravity.RIGHT)方法但它不是工作,文本仍在左侧。
以下是我的代码,希望有人能帮助我:(
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
MyLabel label = new MyLabel(this);
label.setText("Hello");
label.setBackgroundColor(Color.RED);
label.setGravity(Gravity.RIGHT);
layout.addView(label);
setContentView(layout);
}
public class MyLabel extends TextView {
public MyLabel(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// Desire Size : Mac dinh la Wrap Content
float desireWidth = getMeasuredWidth();
float desireHeight = getMeasuredHeight();
int maxWidth = 0;
int maxHeight = 0;
float width = 0.7f;
float height = 0.3f;
if (maxWidth == 0) {
maxWidth = MeasureSpec.getSize(widthMeasureSpec);
}
if (maxHeight == 0) {
maxHeight = MeasureSpec.getSize(heightMeasureSpec);
}
// Neu abstract model co thong tin ve kich thuoc :
if (width > 0) {
int parentWidth = 0;
if (true) {
parentWidth = maxWidth;
} else {
parentWidth = 480;
}
if (width <= 1) {
// Gia tri duoc tinh toan theo % cua parent
desireWidth = width * parentWidth;
} else {
desireWidth = width < parentWidth ? width : parentWidth;
}
}
// Kich thuoc chieu cao cung tuong tu nhu vay
if (height > 0) {
int parentHeight = 0;
if (true) {
parentHeight = maxHeight;
} else {
parentHeight = 800;
}
if (height <= 1) {
// Gia tri duoc tinh toan theo % cua parent
desireHeight = height * parentHeight;
} else {
desireHeight = height < parentHeight ? height
: parentHeight;
}
}
// Cuoi cung, ta set kich thuoc cho view
this.setMeasuredDimension((int) desireWidth, (int) desireHeight);
}
};
答案 0 :(得分:2)
使用Java构建布局非常有用,但有时候,您可能会隐藏重要的实现细节。这是其中一次。
当您调用addView()
时,正在添加的视图将从父视图中获取默认的LayoutParams对象。对于LinearLayout,此默认LayoutParams对象的宽度和高度指定为WRAP_CONTENT
。由于TextView仅与其内容一样大,因此更改其重力没有明显效果。
您需要创建一个LayoutParams对象并将其提供给addView()
。您可以将其重力设置为RIGHT
,或者可以使用MATCH_PARENT
作为宽度。
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
linearLayout.addView(textView, params);
请注意,LinearLayout默认情况下具有HORIZONTAL
方向,当它是屏幕布局的根时,它往往不那么有用。您可能想要在其上调用linearLayout.setOrientation(LinearLayout.VERTICAL)
。