前言
看到題目獲取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方法
@Overridepublic void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); showPopupWindow();}2、用Handler和Runnable,延時
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mHandler.postDelayed(mRunnable, 1000);}private Runnable mRunnable = new Runnable() { public void run() { showPopupWindow(); }};這樣獲取LinearLayout寬高問題就解決了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發者們能有所幫助,如果有疑問大家可以留言交流。
新聞熱點
疑難解答