백분율 레이아웃(번역,체험)레이아웃 문제 해결,또 하나의 체험

전재 출처 를 밝 혀 주 십시오:왕 의 시 급 한 황소 의 길
우 리 는 과거 에 전통 적 인 RelativeLayout,LinearLayout,FrameLayout 를 자주 사 용 했 습 니 다.그리고 스 트 레 칭 이 가능 한 Collapsing ToolbarLayout 등 은 프로젝트 에서 많이 사용 되 지 않 았 습 니 다.예전 에 백분율 구조percent를 알 고 있 었 지만 보 러 갈 생각 을 하지 못 했 습 니 다.관련 내용 을 시험 해 보 세 요.마침 오늘 생각 나 서 그 에 관 한 한 편 을 썼 습 니 다.
앤 리 하 자신의 통합 라 이브 러 리:https://github.com/ddwhan0123/Useful-Open-Source-Android빨리 와 포크,스타!!!
쓸데없는 말 이 많 지 않 으 니 먼저 실험의 효 과 를 붙 여 라.
구체 적 으로 코드 를 붙 이기 전에 먼저 설명 을 해 야 한다.공식 컨트롤 이기 때문에 예 를 너무 많이 넣 지 않 아 도 되 고 사람들 에 게 이해 시 키 는 것 이 더욱 중요 하 다.
이 편 은 주로 Relative Layout 의 진화 판PercentRelativeLayout을 다 루 는 동시에 사용자 정의PercentLinearLayout를 제시 하 는 것 이다.
글자 의 뜻 을 보면 사람들 이 쉽게 이해 할 수 있다.하 나 는 백분율 의 상대 적 인 구조 이 고 하 나 는 백분율 의 선형 구조 이다.다음 예 는 공식 적 인 Percent Relative Layout 를 가지 고 일련의 프 리 젠 테 이 션 을 하 는 것 입 니 다)
문제 1.어떻게 인용 합 니까?
 <android.support.percent.PercentRelativeLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
     <ImageView
         app:layout_widthPercent="50%"
         app:layout_heightPercent="50%"
         app:layout_marginTopPercent="25%"
         app:layout_marginLeftPercent="25%"/>
 </android.support.percent.PercentFrameLayout>

정상 적 인 Relative Layout 컨트롤 을 참조 하 는 것 처럼 안쪽 으로 잃 어 버 리 고 구체 적 인 백분율 행 위 는 하위 컨트롤 에서 작 동 합 니 다.얼핏 보면 잘 보이 는데,일반적인 설정 과 의 차 이 는 layot 에 있 습 니 다.width 또는 layotheight 는 공간의 사 이 즈 를 조절 하 는 것 이 아니 라 app:layot 를 사용 합 니 다.width Percent="50%"와 app:layotheight Percent='50%'라 는 탭 은 크기 를 조절 합 니 다.크기 의 구체 적 인 수 치 는%에 의 해 결 정 됩 니 다.물론 여기 서 차지 하 는 비례 는 용기 부모 컨트롤 의%크기 에 달 려 있 습 니 다.
그럼 새로운 꼬리표 가 있 으 니 소개 해 주세요.
//               ,      ,           ,        layout_width/height="wrap_content""wrap_content"  

app:layout_widthPercent

app:layout_heightPercent

//             , RelativeLayout     %      ,       
app:layout_marginPercent

app:layout_marginLeftPercent

app:layout_marginTopPercent

app:layout_marginRightPercent

app:layout_marginBottomPercent

app:layout_marginStartPercent

app:layout_marginEndPercent

//                   16:916:9(1.78:1)
 app:layout_aspectRatio="178%"

자세 한 내용 은 다음 과 같다.https://developer.android.com/reference/android/support/percent/PercentRelativeLayout.html
OK,우 리 는 간단하게 소스 코드 를 읽 고 예 코드 를 붙 이면 일 을 끝 냅 니 다!
전체 클래스 자체 의 코드 가 많 지 않 아서 100 줄 이 안 되 고 읽 기 가 쉬 운 편 입 니 다.Go
public class PercentRelativeLayout extends RelativeLayout

예 상 했 던 대로 RelativeLayout 의 뒤 를 이 었 습 니 다.
글 의 처음에 공식 적 으로 소개 되 었 다.
If a layout wants to support percentage based dimensions and use this helper class, its LayoutParams subclass must implement this interface.
그래서 Percent Relative Layout 의 일련의 실현 은 모두PercentLayoutHelper와 관련 이 있다.
 private final PercentLayoutHelper mHelper = new PercentLayoutHelper(this);

원본 코드 를 시작 할 때 이 Helper 의 인 스 턴 스 를 가 져 와 호출 합 니 다.
//         
 @Override
    protected LayoutParams generateDefaultLayoutParams() {
        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }

//      
    @Override
    public LayoutParams generateLayoutParams(AttributeSet attrs) {
        return new LayoutParams(getContext(), attrs);
    }

//    ,        
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        mHelper.adjustChildren(widthMeasureSpec, heightMeasureSpec);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if (mHelper.handleMeasuredStateTooSmall()) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }

//    ,  mHelper      
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        mHelper.restoreOriginalParams();
    }

내부 클래스 는 Percent Relative Layout 에 게 레이아웃 실현 을 하 는 데 사 용 됩 니 다.다 중 실현 원칙 만 계승 하기 때문에 하나의 Layout Params 를 Percent Relative Layout 로 구축 할 수 있 습 니 다.
  public static class LayoutParams extends RelativeLayout.LayoutParams implements PercentLayoutHelper.PercentLayoutParams {
        private PercentLayoutHelper.PercentLayoutInfo mPercentLayoutInfo;

        public LayoutParams(Context c, AttributeSet attrs) {
            super(c, attrs);
            mPercentLayoutInfo = PercentLayoutHelper.getPercentLayoutInfo(c, attrs);
        }

        public LayoutParams(int width, int height) {
            super(width, height);
        }

        public LayoutParams(ViewGroup.LayoutParams source) {
            super(source);
        }

        public LayoutParams(MarginLayoutParams source) {
            super(source);
        }

        @Override
        public PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo() {
            if (mPercentLayoutInfo == null) {
                mPercentLayoutInfo = new PercentLayoutHelper.PercentLayoutInfo();
            }

            return mPercentLayoutInfo;
        }

        @Override
        protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) {
            PercentLayoutHelper.fetchWidthAndHeight(this, a, widthAttr, heightAttr);
        }
    }

저희 가 이 루어 진 XML 을 붙 여 보도 록 하 겠 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="wjj.com.percentdemo.MainActivity">

    <ImageView  android:id="@+id/a1" android:layout_width="0dp" android:layout_height="0dp" android:layout_alignParentTop="true" android:background="@drawable/a1" app:layout_heightPercent="30%" app:layout_widthPercent="70%" />
    <ImageView  android:id="@+id/a3" android:layout_width="0dp" android:layout_height="0dp" android:layout_below="@id/a1" android:background="@drawable/a3" app:layout_heightPercent="28%" app:layout_widthPercent="60%" />

    <ImageView  android:id="@+id/a2" android:layout_width="0dp" android:layout_height="0dp" android:layout_below="@id/a1" android:layout_toRightOf="@+id/a3" android:background="@drawable/a2" app:layout_heightPercent="28%" app:layout_widthPercent="40%" />

    <ImageView  android:id="@+id/a4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@drawable/a4" app:layout_heightPercent="25%" app:layout_widthPercent="25%" />

  <ImageView  android:layout_below="@id/a2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/a5" app:layout_heightPercent="35%" android:layout_centerHorizontal="true" app:layout_widthPercent="35%" android:layout_alignParentBottom="true"/>

</android.support.percent.PercentRelativeLayout>

여기에 다시 보충 합 니 다.
최저 버 전 안 드 로 이 드 2.1 즉 7(현재 4.0 이하 의 것 도 있 습 니까?한 걸음 만 더 물 러 서 세 요.4.3 이하 도 있 나 요?)
원본 주소:https://github.com/ddwhan0123/BlogSample/tree/master/PercentDemo
다운로드 주소:https://github.com/ddwhan0123/BlogSample/blob/master/PercentDemo/PercentDemo.zip?raw=true
Percent LinearLayout,이런 종류,인터넷 에서 파 온 모 르 는 작가,여기 도 0,0 을 성명 합 니 다.

좋은 웹페이지 즐겨찾기