得到view的信息以及 view绘制流程解析

来源:互联网 发布:无人机淘宝可靠吗 编辑:程序博客网 时间:2024/05/01 19:05

在oncreate函数

view.getheight是得不到正确高度的,因为view的信息还没计算出来

onstart()

onresume()

都不行

onpause()才可以得到


正确的方式

ViewTreeObserver viewTreeObserver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView=(TextView)findViewById(R.id.t);textView.setText("a"+"\n");viewTreeObserver=textView.getViewTreeObserver();viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@SuppressWarnings("deprecation")@Overridepublic void onGlobalLayout() {// TODO Auto-generated method stubToast.makeText(MainActivity.this, Integer.toString(textView.getHeight()), 1).show();}});}

textView.getHeight()这段代码是核心,这个回调接口会在view的布局参数计算完后调用,这时候,参数更新 textView.getHeight()被接口调用,所以可以拿到值

其中,toast会显示两次,因为回调接口在view调用了两次

这个方法写在oncreate,其实运行并不是在oncreate,应该是在onresume,就是计算与绘制阶段,因为必须是在onmeasure后面

onresume() 系统回调view的ondraw()

ondraw之前有一个onmeasure()

这个方法在onmearsure后运行,直接取得结果

所以,代码是在oncreate,但是通过回调机制,实际是在onresume()




0 0