android activity載入階段,動態取得元件寬高,並且重新設置

  • 6113
  • 0

android activity載入階段,動態取得元件寬高,並且重新設置

在activity載入階段oncreate,onstart,onresume中

若是直接想取得view的寬度高度之類的

會發現取得的是0或是-2

由於activity似乎沒有載入完成的事件可以用

只好透過遞迴的方式檢查

以下

 

宣告類別變數

private Handler hd;
private Runnable ra;

在code中透過遞迴檢查layout是否載入完成

//動態調整高度
//01.取得元件
final LinearLayout question_page_ll=(LinearLayout)findViewById(R.id.question_page_ll);
final LinearLayout question_page_ll_btn=(LinearLayout)findViewById(R.id.question_page_ll_btn);
final RelativeLayout question_page_rl=(RelativeLayout)findViewById(R.id.question_page_rl);
final ScrollView question_page_sv = (ScrollView)findViewById(R.id.question_page_sv);

hd=new Handler();
ra=new Runnable() {
    @Override
    public void run() {
    //02.遞迴檢查元件的寬高是否已經有值(假如不是在activity載入階段,則不需要這樣做)       
        if (question_page_sv.getMeasuredWidth()==0) {
            hd.postDelayed(ra, 200);
        }
        else{
            //得到值後計算          
            int newH=question_page_rl.getMeasuredHeight()-question_page_ll_btn.getMeasuredHeight();
            //設定之後重新塞入
            question_page_sv.getLayoutParams().height=newH;
            question_page_sv.setLayoutParams(question_page_sv.getLayoutParams());
        }
    }
};
hd.postDelayed(ra, 200);