12

Provo a ottenere un rapporto 16: 9 su una vista con lo PercentRelativeLayout.Come utilizzare layout_aspectRatio in PercentRelativeLayout?

modo ho messo questa linea nel mio file build.gradle: compile 'com.android.support:design:23.0.1'

io uso questo layout:

<android.support.percent.PercentRelativeLayout 
    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="wrap_content"> 

    <ImageView 
     android:layout_width="match_parent" 
     app:layout_aspectRatio="178%" 
     android:scaleType="centerCrop"/> 

</android.support.percent.PercentRelativeLayout> 

problemi:

  • Android Studio mi avvisate con: 'layout_height' should be defined per il ImageView.
  • Quando eseguo il mio progetto, ho ricevuto: Error:(15) No resource identifier found for attribute 'layout_aspectRatio'.

Quindi cosa c'è che non va?

risposta

1

Ora con entrambi PercentFrameLayout e PercentRelativeLayout deprecati in 26.0.0, è possibile iniziare a utilizzare ConstraintLayout.

Questo blog article spiega come ottenere un rapporto di 16: 9 per ImageView utilizzando ConstraintLayout, ma può essere applicato a qualsiasi vista.

13

Sembra che si stia utilizzando la dipendenza errata nel tentativo di includere Percent Support Library.

Il corretto (e la versione più recente) è:

com.android.support:percent:23.1.0 

In altre parole, la dipendenza dichiarata dovrebbe essere simile nel file Gradle:

compile 'com.android.support:percent:23.1.0' 
+0

Cosa devo fare se sto costruendo per API22 ?? Non posso usare il 23.1.0 giusto? tra cui 'com.android.support: support-v4: 22.2.0' e' com.android.support: percent: 22.2.0' mi dà lo stesso errore. – ShahiM

+2

@ShahiM: Non vedo perché non si possa usare '23.1.0' con API22 - in effetti, sono abbastanza sicuro di averlo fatto io stesso. Come con appcompat, probabilmente è necessario utilizzare gli strumenti di compilazione versione 23.0.0-23.0.2, ma ciò non dovrebbe interferire con la versione targetSdk. –

+0

grazie per il suggerimento. lo proveremo. – ShahiM

13

Con il corretto dipendenze ancora aveva la guardia

'layout_height' opportuno definire

Ho usato Android: layout_height = "0dp" o android: layout_width = "0dp" per evitarlo.

  <View 
      android:layout_height="0dp" 
      android:layout_width="0dp" 
      app:layout_aspectRatio="75%" 
      app:layout_widthPercent="100%" 
      /> 

si può anche utilizzare Android: layout_height = "wrap_content" nel caso in cui il contenuto sarà più grande che il layout_aspectRatio

3

C'è un g + post qui: https://plus.google.com/+AndroidDevelopers/posts/ZQS29a5yroK che spiega come utilizzare questo in una certa profondità .

Nei commenti c'è anche una discussione sull'avviso layout_width/altezza. Un filtro Lint verrà aggiunto in una futura versione di Android Studio, ma fino ad allora è possibile aggiungere un <!-- suppress AndroidDomInspection --> per sopprimere l'avviso o semplicemente ignorarlo.