我想将代码中text-view的宽度设置为width =119
tv.setWidth(width);
int width2 = tv.getWidth();
但我得到了结果
width2 =12
我在onlayout方法中有这个代码,并且当onlayout再次被调用时(我认为当文本视图实际上在屏幕上时)由android系统结果将是正确的
width2 =119
我认为如果宽度设置为固定值,您可以在UI中绘制宽度之前将其再次设置为另一个值。
我怎么知道何时会调用onlayout,因为有时它不再调用我的意思是在textview实际上在屏幕上之后?
答案 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();
}
});