2017-08-25 1 views
1

Warum funktioniert meine quadratische Ansicht nicht im Querformat?Quadratisches Layout funktioniert nicht im Querformat

Es hat folgende onMeasure Methode:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int width = MeasureSpec.getSize(widthMeasureSpec); 
    int height = MeasureSpec.getSize(heightMeasureSpec); 
    size = Math.min(width, height); 
    setMeasuredDimension(size, size); 
} 

Hier können Sie den Hintergrund meiner Ansicht (in grau) sehen und dass meiner Ansicht nach nicht quadratisch ist. Warum?

enter image description here

Und hier ist mein xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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" 
    android:orientation="vertical" 
    android:padding="@dimen/md_dialog_frame_margin"> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center_horizontal"> 

     <com.my.package.GridPreviewView 
      android:id="@+id/grid" 
      android:background="#cccccc" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_above="@+id/npCols" 
      android:layout_alignParentTop="true" 
      android:layout_marginBottom="8dp" 
      android:layout_marginLeft="8dp" 
      android:layout_toRightOf="@+id/npRows" /> 

     <com.shawnlin.numberpicker.NumberPicker 
      android:id="@+id/npRows" 
      android:layout_width="48dp" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/grid" 
      android:layout_alignTop="@+id/grid" 
      android:paddingRight="8dp" 
      app:np_dividerColor="?attr/colorAccent" 
      app:np_orientation="vertical" 
      app:np_selectedTextColor="?attr/colorAccent" 
      app:np_selectedTextSize="22sp" 
      app:np_textSize="18sp" 
      app:np_width="48dp" /> 

     <com.shawnlin.numberpicker.NumberPicker 
      android:id="@+id/npCols" 
      android:layout_width="wrap_content" 
      android:layout_height="48dp" 
      android:layout_alignLeft="@+id/grid" 
      android:layout_alignParentBottom="true" 
      android:layout_alignRight="@+id/grid" 
      android:paddingTop="8dp" 
      app:np_dividerColor="?attr/colorAccent" 
      app:np_height="48dp" 
      app:np_orientation="horizontal" 
      app:np_selectedTextColor="?attr/colorAccent" 
      app:np_selectedTextSize="22sp" 
      app:np_textSize="18sp" /> 

    </RelativeLayout> 
</LinearLayout> 
+0

Ähnliche oder doppelte? [Warum ist meine android benutzerdefinierte Ansicht nicht quadratisch?] (Https://stackoverflow.com/questions/17228741/why-is-my-android-custom-view-not-square) - BTW Ich bekomme nur eine quadratische Ansicht im Hochformat wenn ich das 'android: layout_alignParentTop =" true "' weglasse – 0X0nosugar

Antwort

0

Am nicht ganz sicher, was das Problem mit der onMeasure() Technik sein können Sie verwenden, aber SquareLayout Check-out, eine Android Bibliothek die liefert eine Wrapper-Klasse für verschiedene Layouts, wodurch sie quadratisch dimensioniert werden, ohne dass dabei Kernfunktionen verloren gehen.

Die Abmessungen werden berechnet, unmittelbar bevor das Layout gerendert wird, daher gibt es kein erneutes Rendern oder irgendetwas, das als solches anzupassen ist, sobald die Ansicht erreicht ist. Dies wird in jedem arbeiten und alle Szenarien (einschließlich Ansicht Orientierungsänderung)

Um die Bibliothek zu verwenden, fügen Sie diese zu Ihrem build.gradle:

repositories { 
    maven { 
     url "https://maven.google.com" 
    } 
} 

dependencies { 
    compile 'com.github.kaushikthedeveloper:squarelayout:0.0.3' 
} 

Hinweis: Die XML-Vorschau für die gebrochen werden kann Moment, aber es funktioniert einwandfrei beim Ausführen der App.

Verwandte Themen