中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么利用ViewGroup自定義布局

發布時間:2021-07-29 16:11:14 來源:億速云 閱讀:164 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關Android中怎么利用ViewGroup自定義布局,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

首先,如果是一個 LinearLayout 那么當設置 wrap_content 時,他就會以子空間中最寬的那個為它的寬度。同時在高度方面會是所有子控件高度的總和。所以我們先寫兩個方法,分別用于測量 ViewGroup 的寬度和高度。

private int getMaxWidth(){  int count = getChildCount();  int maxWidth = 0;  for (int i = 0 ; i < count ; i ++){   int currentWidth = getChildAt(i).getMeasuredWidth();   if (maxWidth < currentWidth){    maxWidth = currentWidth;   }  }  return maxWidth; }  private int getTotalHeight(){  int count = getChildCount();  int totalHeight = 0;  for (int i = 0 ; i < count ; i++){   totalHeight += getChildAt(i).getMeasuredHeight();  }  return totalHeight; }

對于 ViewGroup 而言我們可以粗略的分為兩種模式:固定長寬模式(match_parent),自適應模式(wrap_content),根據這兩種模式,就可以對 ViewGroup 的繪制進行劃分。這里關于 measureChildren 這個方法,他是用于將所有的子 View 進行測量,這會觸發每個子 View 的 onMeasure 函數,但是大家要注意要與 measureChild 區分,measureChild 是對單個 view 進行測量

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  super.onMeasure(widthMeasureSpec, heightMeasureSpec);   measureChildren(widthMeasureSpec, heightMeasureSpec);   int widthMode = MeasureSpec.getMode(widthMeasureSpec);  int width  = MeasureSpec.getSize(widthMeasureSpec);  int heightMode= MeasureSpec.getMode(heightMeasureSpec);  int height = MeasureSpec.getSize(heightMeasureSpec);   if (widthMode == MeasureSpec.AT_MOST && heightMode == MeasureSpec.AT_MOST){   int groupWidth = getMaxWidth();   int groupHeight= getTotalHeight();    setMeasuredDimension(groupWidth, groupHeight);  }else if (widthMode == MeasureSpec.AT_MOST){   setMeasuredDimension(getMaxWidth(), height);  }else if (heightMode == MeasureSpec.AT_MOST){   setMeasuredDimension(width, getTotalHeight());  } }

重寫 onLayout

整完上面這些東西,我們的布局大小七十九已經出來了,然我們在活動的布局文件里面加上它,并添加上幾個子 View 然后運行一下,先看看效果:

<com.entry.android_view_user_defined_first.views.MyLinearLayout  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:background="@color/colorAccent">   <Button   android:layout_width="100dp"   android:layout_height="50dp"   android:text="qwe"/>   <Button   android:layout_width="250dp"   android:layout_height="150dp"   android:text="qwe"/>   <Button   android:layout_width="200dp"   android:layout_height="75dp"   android:text="qwe"/>  </com.entry.android_view_user_defined_first.views.MyLinearLayout>

運行效果如下:

我們看見布局出來了,大小好像也沒啥問題,但是子 View 呢??! 這么沒看見子 View 在看看代碼,系統之前然我們重寫的 onLayout() 還是空著的呀!!也就是說,子 View 的大小和位置根本就還沒有進行過設定!讓我們來重寫下 onLayout() 方法。

@Override protected void onLayout(boolean changed, int l, int t, int r, int b) {  int count = getChildCount();  int currentHeight = 0;  for (int i = 0 ; i < count ; i++){   View view = getChildAt(i);   int height = view.getMeasuredHeight();   int width = view.getMeasuredWidth();   view.layout(l, currentHeight, l + width, currentHeight + height);   currentHeight += height;  } }

看完上述內容,你們對Android中怎么利用ViewGroup自定義布局有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆城县| 铜川市| 诸暨市| 驻马店市| 巴林左旗| 卢湾区| 和政县| 安丘市| 商丘市| 察哈| 金乡县| 华池县| 通州市| 柯坪县| 仙居县| 清新县| 平凉市| 峨山| 肇东市| 延安市| 囊谦县| 陵川县| 太康县| 南召县| 宁安市| 五寨县| 昌平区| 汉沽区| 陇川县| 黎平县| 旬邑县| 惠州市| 凤阳县| 桃园县| 涟源市| 九江县| 大城县| 清远市| 琼中| 高淳县| 老河口市|