2012-12-25 1 views
2

내 활동에 하위보기가 하나만있는 LinearLayout이 있습니다. 둘 다 화면을 채우고 12dp 여백을 뺀 것을 원합니다.Android - match_parent는 layout_margin을 무시합니다.

불행히도, 어린이보기는 12dp가 너무 커서 그만 둡니다. 분명히 match_parent은 자식보기의 크기를 계산할 때 layout_margin 특성을 무시합니다. 이 문제를 해결하는 가장 간단한 방법은 무엇입니까?

myActivity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_margin="12dp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <com.myapp.myView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

myActivity.java

package com.myapp; 

import android.app.Activity; 
import android.os.Bundle; 

public class myActivity extends Activity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.myActivity); 
    } 
} 

myView.java

package com.myapp; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.View; 

public class myView extends View { 

    private Paint paint = new Paint(); 

    public myView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     paint.setColor(0xFFFF0000); //red 
     paint.setStyle(Paint.Style.STROKE); // for unfilled rectangles 
     paint.setStrokeWidth(4); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     int size = canvas.getWidth(); // width = height (see onMeasure()) 
     canvas.drawRect(0, 0, size, size, paint); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
     // This gives us a square canvas! 
    } 
} 
+1

layout_margin 대신 레이아웃에서'android : padding = "12dp"'를 사용해보십시오. – fardjad

+0

Ridcully의 대답에 대한 내 의견보기. –

답변

5

아이 뷰는 캘리포니아 부모보기 (또는 레이아웃과 같은보기 그룹)는 경계와 하위보기 사이에 패딩을 가질 수 있습니다. 즉, 여백은 뷰 외부에 있고 패딩은 내부에 있습니다.

내가 대신 사용자 정의 하나의 표준 볼 수있는 약간의 예를 생성하고, 패딩을 사용하여 : 표준보기 및 패딩 대신 여백에 Difference between a View's Padding and Margin

예 : 또한

이 우수한 설명 참조 있는 LinearLayout에 대한 (스크린 샷 참조)는 위의 제안과는 완벽하게 작동합니다 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="12dp" 
    android:orientation="vertical" > 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="100dp" 
     android:background="#ff0000"/> 
</LinearLayout> 

screenshot from layout editor

솔루션

문제가 귀하의 사용자 정의보기의 onDraw 방법에 canvas.getWidth()을 사용했다 끈다. 대신보기의 getWidth()을 사용하여 문제를 해결했습니다. 마지막으로 :-)

+0

layout_margin을 padding으로 변경하면 외부 레이아웃이 전체 화면을 채우고 내부 레이아웃 만 12dp 여백을 갖도록한다는 점만 제외하면 동일한 문제가 발생합니다. 나는 layout_margin을 고수 할 것입니다. 내 문제의 원인을 아십니까? –

+0

아마도 사용자 정의보기 구현일까요? 일반적인 '보기'를 해봤습니까? – Ridcully

+0

저는 자식 뷰의 캔버스에 선을 그립니다. 원한다면 최소한의 테스트 케이스를 게시 할 수 있습니다. –

관련 문제