在代码中初始化的 TextView 上的 getHeight()

Posted

技术标签:

【中文标题】在代码中初始化的 TextView 上的 getHeight()【英文标题】:getHeight() on a TextView initialised in code 【发布时间】:2014-01-23 22:04:11 【问题描述】:

我已经在代码中初始化了一个TextView(也就是说,没有从布局中初始化它)

TextView   v   =    new TextView(getApplicationContext());

然后我设置文本

v.setText("Foo");

然后我尝试获取这个TextView的高度

int i = v.getHeight();

这是给 0。

请指教

【问题讨论】:

TextView v = new TextView(ActivityName.this)); 和 v 应该添加到根布局或活动中。并阅读***.com/questions/7298731/… 尽管您的v.getHeight() 是一个不同的问题 您刚刚创建了对象,测量和布局是否通过了?在那之前你怎么能得到身高。将其添加到某个布局,然后调用 v.requestLayout(),然后调用 layout.post(new Runnable() public void run() mHeight = v.getHeight;) 发布的可运行将在测量/布局传递后运行.希望对您有所帮助。 其实我的帖子里少了一条信息......我把视图添加到表格行,然后在TextView上调用getHeight() 【参考方案1】:

您的 TextView 可能尚未测量。 使用 ViewTreeObserver,您可以在 TextView 渲染时收到通知,然后您可以获得它的高度:

ViewTreeObserver vto = v.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 

@Override
public void onGlobalLayout() 
if (v != null && getActivity() != null) 
    ViewTreeObserver obs = v.getViewTreeObserver();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) 
        obs.removeOnGlobalLayoutListener(this);
     else 
        obs.removeGlobalOnLayoutListener(this);
    
    int i = v.getHeight();

    
 
);

【讨论】:

谢谢,但是……这太长了。我在上面帖子的评论中提到的 TableRow 中添加了许多 TextView。有更短的方法吗? 看看这篇关于如何获取视图高度的有趣帖子:sherif.mobi/2013/01/how-to-get-widthheight-of-view.html

以上是关于在代码中初始化的 TextView 上的 getHeight()的主要内容,如果未能解决你的问题,请参考以下文章

为啥 setText() 在 TextView 上的以下代码中不起作用?

GETH的安装和使用(Windows)

markdown Docker上的Geth + JSON RPC

在Android开发中如何移除EditText上的输入焦点

在带(继承)TextView的控件中,在代码中动态更改TextView的文字颜色

menu小节