android-TextView setGravity 不起作用

Posted

技术标签:

【中文标题】android-TextView setGravity 不起作用【英文标题】:android-TextView setGravity doesn't working 【发布时间】:2014-07-19 03:13:09 【问题描述】:

我有一个问题。我正在尝试创建具有规格尺寸的 TextView,并且我在 onMeasure 方法中执行此操作。我的问题是我想更改 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);
    
;

【问题讨论】:

Right align text in android TextView 的可能重复项 不是重复的,该问题涉及静态 xml 布局而不是动态代码生成的布局。 我认为你的重力没有问题。只需为你的布局设置一个大小,比如 match_parent.den 看看你的文本 z 是否在右边。 【参考方案1】:

在 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)

【讨论】:

我知道,但我必须使用 onMeasure(),因为我想通过父尺寸的百分比来设置 TextView 的大小。LayoutParams 有 WEIGHT 属性,但它只是改变宽度(使用水平)或高度(垂直)

以上是关于android-TextView setGravity 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使 android-textview 的某个部分向右对齐

android-TextView setGravity 不起作用

Android-TextView及其子类详解

android-TextView setText在Html.fromHtml中显示图像和文本[重复]

Android- Textview 在拖动操作时消失