如何使用textview.getLayout()?它返回null

时间:2013-05-15 07:14:57

标签: android android-layout textview

我正在尝试为textview设置布局,因此我可以使用getEllipsisCount()方法。但是下面的代码返回null作为布局值。 如何进行布局,然后使用getEllipsisCount(0)方法。

    public class MainActivity extends Activity {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView mytextview =(TextView) findViewById(R.id.textView1);
    mytextview.setText(myText);

        Layout layout = mytextview.getLayout();
        if(layout != null){
            mytextview.settext("very good layout worked\n");
        }

}

6 个答案:

答案 0 :(得分:29)

你过早地调用它,这就是它返回null

的原因

试试这个

  ViewTreeObserver vto = mytextview.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
           Layout layout = mytextview.getLayout();  
        }
    });

答案 1 :(得分:2)

来自documentation

public final Layout getLayout()

  

在API级别1中添加返回当前正在使用的布局   显示文字。如果文本或宽度有,则此值可以为null   最近有所改变。

因此,您的文字可能会发生变化,或者您过早称呼它。

请看answer所在的地方

  

这仅适用于布局阶段,否则返回布局   将为null,因此请在代码中的适当位置调用它。

答案 2 :(得分:2)

呼叫

TextView.onPreDraw();

它创建了布局。

答案 3 :(得分:0)

mytextview.getLayout()onStart回拨中致电onResume

答案 4 :(得分:0)

首先,我不知道它是否是拼写错误,或者是故意的,但您已声明了“settext”方法而不是预定义的setText。但是,为了获得您的布局参考,我建议您使用以下内容:

LayoutInflater inflater = getLayoutInflater();

RelativeLayout textViewLayout = (RelativeLayout) inflater.inflate(R.layout.activity_main,null);

if (textViewLayout != null) {
    mytextview.setText("very good layout worked\n");
}

假设您的TextView属于RelativeLayout

答案 5 :(得分:0)

我最近自己遇到了这个问题。对于该线程的任何新手,@ Pragnani接受的答案以及@dimsuz的评论提供了一个不错的紧凑型解决方案。将<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <input type="text" value="PHP"> <input type="text" value="JAVASCRIPT">添加到文本视图的视图树中,等待对布局的引用并使用它,最后在完成所有需要布局的工作之后删除侦听器。

考虑到OP中的示例代码,实现该解决方案可能看起来像这样:

OnPreDrawListener