有的时候,我们需要想获取LinearLayout宽高

1获取LinearLayout宽高

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout ll = (LinearLayout) findViewById(R.id.layInfo);
       Log.i("w", ll.getWidth()+"L"+ll.getHeight());

}

你会发现打印出来是0

那是因为在onCreate方法的时候LinearLayout还并没有绘制完成,所以获取的高度均为0,

或者试着把这段代码放到onResume()方法中去,依然是0。

如果我们用获取LinearLayout的宽高

可以通过定时器不断的监听LinearLayout的宽高,等绘制完成后,关闭定时器即可。

 

final Handler handler= new Handler(){

            @Override

            public void handleMessage(Message msg) {

               if(msg.what == 1) {

                   if(ll.getWidth()!=0) {

                 Log.i("w", ll.getWidth()+"L"+ll.getHeight());

                        timer.cancel();

 

                   }

               }  

            }

        };

        timer = new Timer();

        TimerTask task = new TimerTask(){

            public void run() {  

                Message message = new Message(); 

                message.what = 1; 

                myHandler.sendMessage(message);  

                }  

            };   

           timer.schedule(task,10,1000);  

    }

 

类似,如果想在Activity启动后立即弹出PopupWindow,我们知道,

在Activity的onCreate()方法中直接写弹出PopupWindow方法会报错,因为activity没有完全启动是不能弹出PopupWindow。

我们可以尝试用两种方法实现:

1用onWindowFocusChanged方法
 

 

@Override

public void onWindowFocusChanged(boolean hasFocus) {

    super.onWindowFocusChanged(hasFocus);

    showPopupWindow();

}

2

用Handler和Runnable,延时

 

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    mHandler.postDelayed(mRunnable, 1000);

}

private Runnable mRunnable = new Runnable() {

    public void run() {

     showPopupWindow();

    }

};

 

如果你想第一时间收到类似这样的文章,扫一扫下面的二维码  

https://mp.weixin.qq.com/s/zY43RJHRBlxoevd2ZNZwmA