How to use textview.getLayout()? It returns null

后端 未结 6 2012
孤独总比滥情好
孤独总比滥情好 2020-12-01 10:50

I’m trying set a layout for textview so I can use getEllipsisCount() method. But below code returns null as layout value. How can I take layout and

6条回答
  •  长情又很酷
    2020-12-01 11:44

    I recently encountered this problem myself. For any newcomers to this thread, the accepted answer by @Pragnani along with the comment from @dimsuz provides a nice and compact solution. Adding an OnPreDrawListener to the view tree of the text view, wait for a reference to a layout and use it, and lastly remove the listener after any work requiring the layout is finished.

    Given the example code from OP, implementing the solution could look something like this:

    public class MainActivity extends Activity implements ViewTreeObserver.OnPreDrawListener {
    
        // maintain a reference to the view so we can later remove the listener
        private TextView mytextview;
    
        @Override
        public boolean onPreDraw() {
            Layout layout = mytextview.getLayout();
            if (layout != null) {
    
                // use layout here...
                int n = layout.getEllipsisCount(0);
    
                // work requiring a layout is finished; remove listener from view
                mytextview.getViewTreeObserver().removeOnPreDrawListener(this);
            }
            return true;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mytextview = (TextView) findViewById(R.id.textView1);
    
            // add listener to the view
            mytextView.getViewTreeObserver().addOnPreDrawListener(this);
        }
    }
    

提交回复
热议问题