android-TextView setGravity不起作用

时间:2014-05-29 14:54:48

标签: android

我有一个问题。我正在尝试创建具有规范尺寸的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);
    }
};

1 个答案:

答案 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)