android - values - 안드로이드 리소스 접근




android의 레이아웃 매개 변수 설정 (2)

매개 변수를 다음과 같이 지정할 수 있으므로 XML 파일 작업이 쉬웠습니다.

<android:layout_width="fill_parent" android:layout_height="wrap_content">

하지만 코드를 통해 지정하는 동안 나는 혼란 스럽다. 각 뷰에 대해 다음을 사용하여 매개 변수를 지정합니다.

view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); 

나는 상대 레이아웃, 프레임 레이아웃 등으로 지정할 수있는 옵션이 있다는 것을 알았습니다. 현재로서는 이미지, 텍스트 및 그리드 뷰와 같은 모든 뷰에 대한 선형 레이아웃을 사용하고 있습니다. 뷰 요소는 부모 요소의 레이아웃을 기반으로 정의해야합니까? 또는 뷰가 프레임 레이 아웃과 같은 자식 인 경우에도 선형 레이아웃으로 지정하는 것이 좋습니까? 죄송하지만, 그 차이를 알 수는 없었습니다.


모든 레이아웃 클래스 ( LinearLayout , RelativeLayout 등)는 ViewGroup 확장합니다.

ViewGroup 클래스에는 LayoutParamsMarginLayoutParams 두 가지 정적 내부 클래스가 있습니다. ViewGroup.MarginLayoutParams 실제로 ViewGroup.MarginLayoutParams 확장합니다.

때때로 레이아웃 클래스는 자식 뷰와 연결될 추가 레이아웃 정보가 필요합니다. 이를 위해 내부 static LayoutParams 클래스를 정의합니다. 예를 들어, LinearLayout 은 다음과 같습니다.

public class LinearLayout extends ViewGroup {
   ...
   public static class LayoutParams extends ViewGroup.MarginLayoutParams {  
   ...
   }
}

RelativeLayout 대해서도 RelativeLayout .

public class RelativeLayout extends ViewGroup {
   ...
   public static class LayoutParams extends ViewGroup.MarginLayoutParams {  
   ...
   }
}

그러나 LinearLayout.LayoutParamsRelativeLayout.LayoutParams 는 완전히 다른 독립적 인 클래스입니다. 자식 뷰에 대한 다른 추가 정보를 저장합니다.

예를 들어, LinearLayout.LayoutParamsweight 를 각 뷰와 연관시킬 수 있지만 RelativeLayout.LayoutParams 는 그렇지 않습니다. RelativeLayout.LayoutParams 와 동일한 작업 : above , below , alightWithParent 와 같은 값을 각보기와 연결할 수 있습니다. LinearLayout.LayoutParams 에는 이러한 기능이 없습니다.

그래서 일반적으로 레이아웃을 둘러싸 LayoutParams 를 사용하여 뷰의 위치를 ​​올바르게 지정하고 렌더링해야합니다. 그러나 모든 LayoutParams 에는 동일한 상위 클래스 ViewGroup.LayoutParams 있습니다. 레이아웃 매개 변수를 지정하는 데 잘못된 LayoutParams 클래스가 사용 되었더라도 작업자 코드 (예 : WRAP_CONTENTFILL_PARENT )와 같은 클래스에 정의 된 기능 만 사용하는 경우 작업 코드를 가져올 수 있습니다.


레이아웃을 변경하려는 뷰의 수에 따라 도우미 메서드를 만들고 변경하려는 뷰의 높이 값과 너비 값을 메서드로 전달하는 것이 좋습니다.

public void setWidthHeight(View v, int width, int height){
    LayoutParams lp;
    lp = v.getLayoutParams();
    lp.width = width;
    lp.height = height;
    v.setLayoutParams(lp);
}

여기 너비와 높이를 설정하면 XML의 동일한 값과 일치하지 않습니다. 즉, android : layout_width = "32dp"는 lp.width = 32와 다릅니다.

또한, lp라는 LayoutParams 유형 변수는 뷰에 의해 리턴 된 유형이어야합니다 ... 뷰가 리턴하는 유형을 확인하고 해당 유형을 임포트.에서 임포트하십시오.





layoutparams