2017-08-25 8 views
1

Pourquoi ma vue carrée ne fonctionne-t-elle pas en mode paysage?La disposition carrée ne fonctionne pas en mode paysage

Il a suit la méthode onMeasure:

@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); 
} 

Ici, vous voyez l'arrière-plan de mon point de vue (en gris) et que mon avis n'est pas carrée. Pourquoi?

enter image description here

Et voici mon 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

Relatif ou en double? [Pourquoi mon affichage personnalisé android n'est pas carré?] (Https://stackoverflow.com/questions/17228741/why-is-my-android-custom-view-not-square) - btw je reçois seulement un carré Voir en portrait si je laisse tomber le 'android: layout_alignParentTop =" true "' – 0X0nosugar

Répondre

0

ne sais pas exactement ce que le problème peut être avec la technique onMeasure() que vous utilisez, mais consultez SquareLayout, une bibliothèque Android qui fournit une classe wrapper pour différentes mises en page, les rendant quadrillées sans perte de fonctionnalités de base.

Les cotes sont calculées juste avant le rendu de la mise en page, il n'y a donc pas de ré-rendu ou quoi que ce soit en tant que tel pour ajuster une fois la vue obtenue. Cela fonctionne dans tous les scénarios et tous (y compris vue orientation changement)

Pour utiliser la bibliothèque, ajoutez à votre build.gradle:

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

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

Note: L'aperçu XML peut être rompu pour la moment, mais cela fonctionne parfaitement bien lors de l'exécution de l'application.