簡體   English   中英

Android - 獲取父布局的高度

[英]Android - get Height of the parent layout

我想確定我必須添加視圖的父布局的可用高度和寬度。

我在布局上使用了很多方法

  • layout.getHeight()
  • layout.getRootView()。的getHeight()

所有這些方法都返回0(零)作為結果。

我的主要要求是能夠為視圖提供寬度,該寬度是布局寬度的百分之一。

此外,我不想使用標簽。 我想通過代碼來做。

提前致謝。

好。 我找到了解決方案。 我們在活動中獲得屏幕高度的方式是

getApplicationContext()。getResources()。getDisplayMetrics()。heightPixels

但我仍然不知道如何獲得父布局的像素尺寸?

這里的問題是你在layoutmanager完成父布局之前嘗試獲取父高度/權重。 在布局完成后,您只能獲得父級維度。

執行您想要實現的目標的推薦方法是使用LayoutParams的layout_weight字段。 鏈接文字

特別是你應該使用:

LayoutParams lp = new LinearLayout.LayoutParams(width, height,
weight);

layout_weight值可以是介於0.0到1.0之間的任何值。 所以例如,如果我在parentLayout中有myButton,並且我希望myButton占據父布局的30%...我會使用類似的東西:

 myButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                                               LayoutParams.WRAP_CONTENT,0.3));

所有子元素的layout_weight總和應為1.此外,layout_weight不應與視圖的寬度或高度設置為LayoutParams.FILL_PARENT一起使用。

嘗試這樣的事情:

view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    public void onGlobalLayout() {
        view.getHeight();
    }
  });

以編程方式實現此方法的一種替代方法是使用以下方法:

public void onWindowFocusChanged(boolean b) { ...}

到調用此方法時,布局過程已完成。 因此,您可以正確獲取父屬性。

例如:

public class A extends Activity {
    LinearLayout parent;
    Button child;
    public void onCreate(Bundle b) {
        parent = (LinearLayout) findViewById(R.id.linear1);
        child = (Button) findViewById(R.id.button1);
        .
        .
    }

@Override
public void onWindowFocusChanged(boolean b) {
        LayoutParams lpc = child.getLayoutParams();
        lpc.width = parent.getWidth();
        child.postInvalidate();
        .
        .
    }
}

OnCreate()方法中,如果使用layout.getHeight()layout.getWidth() ,它將返回0,而您可以遵循:

public void onClick(View v) {   
    // TODO Auto-generated method stub

             int layWidth = Layout.getLeft();
             int layHeight = Layout.getHeight();
         break;     
    }

你很早就調用了getHeight() 確保在viewGroup.addView(view0)和/或setContentView(activity_main.xml)之后調用getParent().getHeight() setContentView(activity_main.xml) 這在過去發生在我身上並且修復了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM