设置textview的宽度不起作用

时间:2013-12-02 12:28:36

标签: android views

我想将代码中text-view的宽度设置为width =119

tv.setWidth(width);
int width2 = tv.getWidth();

但我得到了结果

width2 =12 

我在onlayout方法中有这个代码,并且当onlayout再次被调用时(我认为当文本视图实际上在屏幕上时)由android系统结果将是正确的

width2 =119 

我认为如果宽度设置为固定值,您可以在UI中绘制宽度之前将其再次设置为另一个值。

我怎么知道何时会调用onlayout,因为有时它不再调用我的意思是在textview实际上在屏幕上之后?

4 个答案:

答案 0 :(得分:6)

您必须尝试使用​​LayoutParams选项设置宽度,如下所示:

TextView tv = new TextView(getContext());
LayoutParams params = new LayoutParams(119,LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(params);

答案 1 :(得分:3)

LayoutParams param = txtv.getLayoutParams();
param.width = 45;
txtv.setLayoutParams(param);

答案 2 :(得分:1)

LinearLayout.LayoutParams Params1 = new LinearLayout.LayoutParams(15,50);
tv.setLayoutParams(Params1);  

答案 3 :(得分:0)

在所有内容都呈现在屏幕上之前,所有的UI操纵(如setHeight,setLayoutParams,setText等)都不会阻塞。因此,当您调用setHeight时,它会立即返回您的代码,同时会发出某种通知,要求在下一个渲染周期更改UI。

因此,当您执行getHeight时,不会重新渲染ui,从而使元素仍然具有旧高度。

您可以使用view.post()将getHeight代码延迟到下一次ui准备进行新渲染时。由于setHeight是在view.post()之前完成的,因此只会在setHeight呈现后运行:

tv.setWidth(width);
tv.post(new Runnable() {
    @Override
    public void run() //code here is only executed after setWidth has been rendered
    {
        Log.d(TAG," tv has been set to height="+ tv.getWidth();
    }
});