Android 사용자 정의 ViewGroup 의 FlowLayout(3)
8412 단어 androidViewGroupFlowLayout
정의 FlowLayout
Layout Params,onLayout 의 작법 은 모두 전편 에서 말 한 Waterfall Layout 와 똑같다.여기 서 더 이상 군말 하지 않 겠 다.보지 못 한 것 은 전편 을 참조 할 수 있다Android 사용자 정의 ViewGroup(2)의 WaterfallLayout
여기 서 주로 onMeasure 방법 을 말 하 는데 주석 은 아래 와 같다.
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
int modeWidth = MeasureSpec.getMode(widthMeasureSpec);
int modeHeight = MeasureSpec.getMode(heightMeasureSpec);
int childCount = getChildCount();
// wrap_content ,
int wrapWidth = 0;
int wrapHeight = 0;
// ,width
int lineWidth = 0;
// , height
int lineHeight = 0;
//
for (int i = 0; i < childCount; i++) {
View child = getChildAt(i);
// child
measureChild(child, widthMeasureSpec, heightMeasureSpec);
// child lParams
LayoutParams lParams = (LayoutParams) child.getLayoutParams();
//
int childWidth = child.getMeasuredWidth();
//
int childHeight = child.getMeasuredHeight();
// child, ,
if (lineWidth + childWidth > sizeWidth) {
// , onLayout
lParams.left = 0;
lParams.top = wrapHeight + lineHeight + vSpace;
lParams.right = childWidth;
lParams.bottom = lParams.top + childHeight;
// , lineWidth hSpace ,
wrapWidth = Math.max(lineWidth - hSpace, childWidth);
// , , hSpace
lineWidth = childWidth + hSpace;
// , , vSpace
wrapHeight += lineHeight + vSpace;
//
lineHeight = childHeight;
} else {
// , onLayout
lParams.left = lineWidth;
lParams.top = wrapHeight;
lParams.right = lParams.left + childWidth;
lParams.bottom = lParams.top + childHeight;
// , lineWidth,lineHeight
lineWidth += childWidth + hSpace;
lineHeight = Math.max(lineHeight, childHeight);
}
//
if (i == childCount - 1) {
// lineWidth ,
wrapWidth = Math.max(wrapWidth, lineWidth - hSpace);
//
wrapHeight += lineHeight;
}
}
setMeasuredDimension((modeWidth == MeasureSpec.EXACTLY) ? sizeWidth : wrapWidth, (modeHeight == MeasureSpec.EXACTLY) ? sizeHeight : wrapHeight);
}
FlowLayout 사용 하기직접 xml 를 보 세 요.한 번 보면 알 수 있 습 니 다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:attr="http://schemas.android.com/apk/res/com.hx.flowlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E1E6F6"
android:orientation="vertical" >
<com.hx.flowlayout.FlowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
attr:hSpace="20"
attr:vSpace="10">
<TextView
style="@style/flow_text_style_1"
android:text=" " />
<TextView
style="@style/flow_text_style_1"
android:text="Welcome" />
<TextView
style="@style/flow_text_style_1"
android:text="IT " />
<TextView
style="@style/flow_text_style_1"
android:text=" " />
<TextView
style="@style/flow_text_style_1"
android:text="Android" />
<TextView
style="@style/flow_text_style_1"
android:text="Java" />
<TextView
style="@style/flow_text_style_1"
android:text="ViewGroup" />
<TextView
style="@style/flow_text_style_1"
android:text="FlowLayout" />
</com.hx.flowlayout.FlowLayout>
<com.hx.flowlayout.FlowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
attr:hSpace="20"
attr:vSpace="10">
<TextView
style="@style/flow_text_style_2"
android:text=" " />
<TextView
style="@style/flow_text_style_2"
android:text="Welcome" />
<TextView
style="@style/flow_text_style_2"
android:text="IT " />
<TextView
style="@style/flow_text_style_2"
android:text=" " />
<TextView
style="@style/flow_text_style_2"
android:text="Android" />
<TextView
style="@style/flow_text_style_2"
android:text="Java" />
<TextView
style="@style/flow_text_style_2"
android:text="ViewGroup" />
<TextView
style="@style/flow_text_style_2"
android:text="FlowLayout" />
</com.hx.flowlayout.FlowLayout>
</LinearLayout>
여기에 쓴 것 은 비교적 올 바 르 고 모든 TextView 는 xml 에 쓰 여 있 습 니 다.물론 자바 코드 를 통 해 동적 으로 추가 할 수 있 습 니 다.다시 스타일 을 보 자.여기 서 우 리 는 두 가지 다른 스타일 을 정 의 했 는데 구체 적 으로 다음 과 같다.
<style name="flow_text_style_1">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">@drawable/flow_text_bg_1</item>
<item name="android:textColor">#ffffff</item>
<item name="android:textSize">16sp</item>
</style>
<style name="flow_text_style_2">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">@drawable/flow_text_bg_2</item>
<item name="android:textColor">#4B0082</item>
<item name="android:textSize">20sp</item>
</style>
background 를 찾 아서 들 어가 보 겠 습 니 다.여 기 는 shapeDrawable 을 사용 하고 있 습 니 다.그 다음 에 shapeDrawable 에 관 한 글 을 쓰 겠 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#FFFFFF"/>
<corners android:radius="40dp"/>
<stroke android:color="#C9C9C9" android:width="2dp"/>
<padding
android:bottom="2dp"
android:left="10dp"
android:right="10dp"
android:top="2dp" />
</shape>
효과 도 는 다음 과 같다.원본 다운로드:http://xiazai.jb51.net/201609/yuanma/Android-FlowLayout(jb51.net).rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.