我正在尝试为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");
}
}
答案 0 :(得分:29)
你过早地调用它,这就是它返回null
试试这个
ViewTreeObserver vto = mytextview.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Layout layout = mytextview.getLayout();
}
});
答案 1 :(得分:2)
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