編輯:關於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開發者們能有所幫助,如果有疑問大家可以留言交流。
Android自定義等待對話框
最近,看了好多的APP的等待對話框,發現自己的太lower,於是就研究了一番,最後經過苦心努力,實現一個。 自定義一個LoadingIndicatorView(exte
一起學android之利用回調函數onCreateDialog實現加載對話框
效果圖: 有時候我們需要去做一個Activity啟動時的數據加載對話框,關於對話框的各種實現可以通過一起學android之對話框 Dial
RecyclerView詳解之基礎使用
android.support.v7.widget.RecyclerViewandroid.support.v7.widget.LinearLayoutManageran
Android中傳遞對象的三種方法的實現
Android中,Activity和Fragment之間傳遞對象,可以通過將對象序列化並存入Bundle或者Intent中進行傳遞,也可以將對象轉化為JSON字符串,進行