編輯:關於Android編程
前言
看到題目獲取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(); } };
這樣獲取LinearLayout寬高問題就解決了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發者們能有所幫助,如果有疑問大家可以留言交流。
最近,看了好多的APP的等待對話框,發現自己的太lower,於是就研究了一番,最後經過苦心努力,實現一個。 自定義一個LoadingIndicatorView(exte
效果圖: 有時候我們需要去做一個Activity啟動時的數據加載對話框,關於對話框的各種實現可以通過一起學android之對話框 Dial
android.support.v7.widget.RecyclerViewandroid.support.v7.widget.LinearLayoutManageran
Android中,Activity和Fragment之間傳遞對象,可以通過將對象序列化並存入Bundle或者Intent中進行傳遞,也可以將對象轉化為JSON字符串,進行