【问题标题】:set width to the textview doesn't work将宽度设置为 textview 不起作用
【发布时间】:2013-12-18 03:59:57
【问题描述】:

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

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

但我得到了结果

width2 =12 

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

width2 =119 

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

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

【问题讨论】:

  • 我认为您的视图有一个限制其大小的父视图
  • 为什么要设置宽度而不是使用布局文件自动定位和设置其大小?
  • 你试过tv.getLayoutParams().height = 119;吗?
  • 因为我想根据屏幕的宽度来计算宽度
  • 我已经回答了一个类似的问题。可能会帮助stackoverflow.com/a/26233453/517450

标签: android views


【解决方案1】:
LinearLayout.LayoutParams Params1 = new LinearLayout.LayoutParams(15,50);
tv.setLayoutParams(Params1);  

【讨论】:

  • 也许可以解释为什么这可能有助于 OP。
  • TextView.setWidth 调用 requestLayout() 和 invalidate()。这显然在某些情况下,例如当父布局的尺寸仍未确定或依赖于要添加的子布局时,会将宽度重置为零。
【解决方案2】:

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

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

【讨论】:

  • 注意:我正在制作 TextView tv = new TextView(getContext());在 onFinishInflate 并在 onLayout 方法中设置参数
  • 为什么存在 setWidth ?!
【解决方案3】:
LayoutParams param = txtv.getLayoutParams();
param.width = 45;
txtv.setLayoutParams(param);

【讨论】:

    【解决方案4】:

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

    因此,当您执行 getHeight 时,用户界面没有被重新渲染,因此元素仍然具有旧高度。

    您可以使用 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();
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2016-04-24
      • 2012-08-16
      • 2013-06-04
      • 2014-11-03
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      相关资源
      最近更新 更多