Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将宽度设置为文本视图不';行不通_Android_Views - Fatal编程技术网

Android 将宽度设置为文本视图不';行不通

Android 将宽度设置为文本视图不';行不通,android,views,Android,Views,我想将代码中文本视图的宽度设置为width=119 tv.setWidth(width); int width2 = tv.getWidth(); 但我得到了结果 width2 =12 我在onlayout方法中有这段代码,当android系统再次调用onlayout时(我认为当文本视图实际上在屏幕上时),结果将是正确的 width2 =119 我认为,如果将宽度设置为固定值,则可以在UI中绘制之前将其再次设置为另一个值 我怎么知道什么时候会调用onlayout,因为有时候它不会再次调

我想将代码中文本视图的宽度设置为
width=119

tv.setWidth(width);
int width2 = tv.getWidth();
但我得到了结果

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

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


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

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

LinearLayout.LayoutParams Params1 = new LinearLayout.LayoutParams(15,50);
tv.setLayoutParams(Params1);  
TextView tv = new TextView(getContext());
LayoutParams params = new LayoutParams(119,LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(params);

所有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();
    }
});

我认为您的视图有一个限制其大小的父视图为什么要设置宽度而不是使用布局文件来自动定位和设置其大小?您是否尝试过使用
tv.getLayoutParams().height=119?因为我想根据屏幕的宽度计算宽度,所以我回答了一个类似的问题。可能有助于注意:我正在制作TextView tv=newtextview(getContext());在onfinish中,在onLayout方法中充气并设置参数为什么存在setWidth?!也许解释为什么这可能是asnwer可以帮助OP.TextView.setWidth调用requestLayout()和invalidate()。这显然是在某些情况下,例如当父布局的尺寸仍未确定或依赖于要添加的子布局时,会将宽度重置回零。
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();
    }
});