2016-11-08 5 views
0

Ich machte eine benutzerdefinierte Ansicht, die die PercentRelativeLayout erweitert und zwingt die Ansicht, quadratisch zu sein. Die untergeordneten Elemente dieser Ansicht sollten der Größe ihrer übergeordneten Elemente (Höhe und Breite) entsprechen. Wenn ich die layout_width oder layout_height der Kinder zu oder fill_parent setze, erstrecken sie sich über die Elternansicht (wie man in der rechten Hälfte des Bildes sehen kann). Die untergeordneten Elemente sind außerhalb des benutzerdefinierten Layouts nicht sichtbar, aber ich kann die untergeordneten Elemente nicht über relative Größen ordnungsgemäß ausrichten.Untergeordnete Elemente Überlauf benutzerdefinierte RelativeLayout

Children extending over parent

Die benutzerdefinierte Ansicht:

public class QuadraticPercentRelativeLayout extends PercentRelativeLayout { 

    public QuadraticPercentRelativeLayout(Context context) { 
     super(context); 
    } 

    public QuadraticPercentRelativeLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public QuadraticPercentRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     int width = getMeasuredWidth(); 
     int height = getMeasuredHeight(); 
     int size = width < height ? width : height; 
     setMeasuredDimension(size, size); 
    } 
} 

Hier ist mein Layout (vereinfacht):

<RelativeLayout 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" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin"> 

    <QuadraticPercentRelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_below="@+id/progress_bar"> 

     <ImageView 
      android:id="@+id/page_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_centerHorizontal="true" 
      android:scaleType="fitCenter" 
      app:srcCompat="@drawable/package_stock"/> 

     <ImageView 
      android:id="@+id/next_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignBottom="@+id/page_view" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentRight="true" 
      app:layout_widthPercent="35%" 
      app:srcCompat="@color/ColorPrimaryDark"/> 

     <ImageView 
      android:id="@+id/previous_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignBottom="@+id/page_view" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      app:layout_widthPercent="35%" 
      app:srcCompat="@color/ColorPrimaryDark"/> 

    </QuadraticPercentRelativeLayout> 

</RelativeLayout> 

Ist dies das Standardverhalten für Kinder Views? Wie kann ich es ändern, damit die Kinder der Elterngröße entsprechen?

Antwort

0

I fixed die onMeasure Methode in der Klasse QuadraticPercentRelativeLayout:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int width = MeasureSpec.getSize(widthMeasureSpec); 
    int height = MeasureSpec.getSize(heightMeasureSpec); 
    int size = Math.min(width, height); 
    int measureSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY); 
    super.onMeasure(measureSpec, measureSpec); 
} 
Verwandte Themen