關於獲取佈局的寬高
獲取佈局的寬高不能直接用getWidth()或者getHeight直接獲取,例如:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);
Log.i("LinearLayoutW", ll_viewArea.getWidth()+"");
Log.i("LinearLayoutH", ll_viewArea.getHeight()+"");
}
這樣的打印結果都是0。因爲在onCreate方法的時候LinearLayout還並沒有繪製完成,所以獲取的高度均爲0,那麼你也許會說,把這段代碼放到onResume()方法內就可以了。但是結果一樣無法獲取。那麼怎麼辦呢。我們可以通過定時器不斷的監聽LinearLayout的寬高,一旦繪製完成便獲取,並關閉定時器。代碼如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);
final Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 1) {
if(ll_viewArea.getWidth()!=0) {
Log.i("LinearLayoutW", ll_viewArea.getWidth()+"");
Log.i("LinearLayoutH", ll_viewArea.getHeight()+"");
//取消定時器
timer.cancel();
}
}
}
};
timer = new Timer();
TimerTask task = new TimerTask(){
public void run() {
Message message = new Message();
message.what = 1;
myHandler.sendMessage(message);
}
};
//延遲每次延遲10 毫秒 隔1秒執行一次
timer.schedule(task,10,1000);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);
Log.i("LinearLayoutW", ll_viewArea.getWidth()+"");
Log.i("LinearLayoutH", ll_viewArea.getHeight()+"");
}
這樣的打印結果都是0。因爲在onCreate方法的時候LinearLayout還並沒有繪製完成,所以獲取的高度均爲0,那麼你也許會說,把這段代碼放到onResume()方法內就可以了。但是結果一樣無法獲取。那麼怎麼辦呢。我們可以通過定時器不斷的監聽LinearLayout的寬高,一旦繪製完成便獲取,並關閉定時器。代碼如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);
final Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 1) {
if(ll_viewArea.getWidth()!=0) {
Log.i("LinearLayoutW", ll_viewArea.getWidth()+"");
Log.i("LinearLayoutH", ll_viewArea.getHeight()+"");
//取消定時器
timer.cancel();
}
}
}
};
timer = new Timer();
TimerTask task = new TimerTask(){
public void run() {
Message message = new Message();
message.what = 1;
myHandler.sendMessage(message);
}
};
//延遲每次延遲10 毫秒 隔1秒執行一次
timer.schedule(task,10,1000);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.