1

statusBar内部の高さを取得しようとしてonCreateいますが、ここで見つけたメソッドでは、サイズを取得してstatusBarの高さを計算するためにすでに描画されているビューが必要です。

私はonCreateを使用しているので、サイズを取得するための描画はまだありません。

誰かがここで私を助けることができますか?

4

2 に答える 2

2
root = (ViewGroup)findViewById(R.id.root);
root.post(new Runnable() { 
public void run(){
    Rect rect = new Rect();
    Window win = getWindow();
    win.getDecorView().getWindowVisibleDisplayFrame(rect);
    int statusHeight = rect.top;
    int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop();
    int  titleHeight = contentViewTop - statusHeight;
    Log.e("dimen", "title = " + titleHeight + " status bar = " + statusHeight);
}
});
于 2013-09-21T07:09:31.230 に答える
0

グローバル レイアウト リスナーを使用する

public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);

     // inflate your main layout here (use RelativeLayout or whatever your root ViewGroup type is
     LinearLayout mainLayout = (LinearLayout ) this.getLayoutInflater().inflate(R.layout.main, null); 

     // set a global layout listener which will be called when the layout pass is completed and the view is drawn
     mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(
     new ViewTreeObserver.OnGlobalLayoutListener() {
          public void onGlobalLayout() {
               // measure your views here
          }
     }
 );

 setContentView(mainLayout);

[編集]

これを 1 回だけ行うには:

ViewTreeObserver observer = mainLayout.getViewTreeObserver();

observer.addOnGlobalLayoutListener (new OnGlobalLayoutListener () {
@Override
public void onGlobalLayout() {
    // measure your views here
    mainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
   }
 });
于 2012-11-10T10:56:46.450 に答える