簡體   English   中英

Android:在擴展布局中將Textview居中

[英]Android: center Textview in extended Layout

如果我只想設置父視圖的布局並且仍想保留子視圖的布局設置,是否可以以某種方式阻止調用所有子視圖的Layout方法?

目前,我調用parent.layout(),其所有子級的寬度和高度均為零。 我不能以某種方式將子級設置為FillParent而不是將布局設置為ALL嗎? :-(

順便說一句,我的父母是一個擴展的LinearLayout,主要包含Textviews。



編輯:一些代碼:

myLayout擴展了LinearLayout

myLayout.layout(left, top, right, bottom);                
myLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1));

for each child in myLayout do {
  child.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
  if (v instanceof TextView) {
    ((TextView) v).setGravity(Gravity.CENTER);
  }

但是孩子仍然有:
左:0上:0右:0下:0

編輯2:順便說一句:上面的代碼是ViewGroup的onLayout方法的內部。

您可以在擴展LinearLayout的onLayout()方法中設置子項的寬度和高度。 例如:

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);
    int count = getChildCount();
    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        // set width of every child to FILL_PARENT, and height to WRAP_CONTENT
        child.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    }
}

我不知道為什么setGravity()對您不起作用。 可能不是為孩子而是為布局設置重力嗎? 我可以設置重力,例如在onLayout()

if (child instanceof TextView) {
    ((TextView) child).setGravity(Gravity.CENTER);
}

您的子視圖未得到衡量(因為您未調用其layout()),因此系統仍認為它們為0x0px。

Android使用2遍測量/布局系統。

查看開發人員文檔,以了解繪圖/布局順序是如何發生的: http : //developer.android.com/guide/topics/ui/how-android-draws.html

您可能想要嘗試調用其layout() ,然后在子級上設置高度/寬度,然后調用requestLayout()

希望能有所幫助。

暫無
暫無

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

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