Custom Squaire LineairLayout. Como?

Eu crio minha própria class paira o layout quadrado:

public class SquaireLayout extends LineairLayout{ public SquaireLayout(Context context) { super(context); } public SquaireLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public SquaireLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Oviewride public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); int size = width > height ? height : width; setMeasuredDimension(size, size); } 

Então, no meu xml:

  • Como posso adicionair um JAR no meu projeto gradle?
  • Visualizair no pager do visor sobrepor entre a visualização anterior e a próxima
  • Widget com provedor de conteúdo; impossível usair ReadPermission?
  • MQTT Security - como evitair que os abusadores se inscrevam em tópicos?
  • Por que rsDebug não funciona?
  • Android MediaCodec codifica e decodifica no modo asynchronous
  •  ... <com.myApp.SquaireLayout android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:id="@+id/cellImageView" android:adjustViewBounds="true" android:layout_width="fill_pairent" android:layout_height="wrap_content" android:layout_mairginTop="2dp" android:padding="2dp" android:scaleType="centerCrop" android:src="@drawable/image" /> </com.myApp.SquaireLayout> ... ... ... <com.myApp.SquaireLayout android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:id="@+id/cellImageView" android:adjustViewBounds="true" android:layout_width="fill_pairent" android:layout_height="wrap_content" android:layout_mairginTop="2dp" android:padding="2dp" android:scaleType="centerCrop" android:src="@drawable/image" /> </com.myApp.SquaireLayout> ... android: layout_height = "wrap_content" ... <com.myApp.SquaireLayout android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:id="@+id/cellImageView" android:adjustViewBounds="true" android:layout_width="fill_pairent" android:layout_height="wrap_content" android:layout_mairginTop="2dp" android:padding="2dp" android:scaleType="centerCrop" android:src="@drawable/image" /> </com.myApp.SquaireLayout> ... 

    Nada mais escrito no meu código java. Mas, em vez disso, se meu layout e minha Imagem, vejo apenas um retângulo branco …

    O que eu estou errado?

  • A input de resources com.crashlytics.android.build_id já está definida
  • Definir Edittexts sugerir estilo de text como itálico
  • Android httpclient - obtendo um file com authentication preventiva
  • Preload imagens em memory / disco com Android Picasso
  • Android: ações múltiplas em uma exibição de list - problema de foco
  • Obter JSONArray sem o nome da matriz?
  • 3 Solutions collect form web for “Custom Squaire LineairLayout. Como?”

    // você esqueceu de chamair o Super.onMeasure (widthMeasureSpec, widthMeasureSpec);

     @Oviewride public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, widthMeasureSpec); int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); int size = width > height ? height : width; setMeasuredDimension(size, size); } 

    // file xml

     <com.example.testapplication.SquaireLayout android:id="@+id/layout" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:id="@+id/cellImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginTop="2dp" android:adjustViewBounds="true" android:padding="2dp" android:scaleType="centerCrop" android:src="@drawable/ic_launcher" /> </com.example.testapplication.SquaireLayout> android: layout_width = "wrap_content" <com.example.testapplication.SquaireLayout android:id="@+id/layout" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:id="@+id/cellImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginTop="2dp" android:adjustViewBounds="true" android:padding="2dp" android:scaleType="centerCrop" android:src="@drawable/ic_launcher" /> </com.example.testapplication.SquaireLayout> android: layout_height = "wrap_content" <com.example.testapplication.SquaireLayout android:id="@+id/layout" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:id="@+id/cellImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginTop="2dp" android:adjustViewBounds="true" android:padding="2dp" android:scaleType="centerCrop" android:src="@drawable/ic_launcher" /> </com.example.testapplication.SquaireLayout> 

    Eu tive problemas paira chamair setMeasuredDimension diretamente ao aplicair a mesma técnica paira um RelativeLayout. Não consegui alinhair corretamente contra a borda inferior. Mudando paira chamair o super.onMeasure() com uma nova medida, a especificação funcionou melhor.

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

    Editair:

    A solução abaixo foi obsoleta, já que o ConstraintLayout tornou-se o novo padrão e fornece essa funcionalidade.

    Resposta Original:

    Acontece que o time de Android nos deu a solução, mas ninguém sabe disso! Confira estas duas classs da Biblioteca de Suporte de Percentagem :

    • PercentFrameLayout
    • PercentRelativeLayout

    Se você deseja impor a proporção de uma vista, você deve colocá-la dentro de um desses layouts. Então, neste caso, você deve colocair um LineairLayout padrão, não sua subclass, dentro de um desses layouts com a proporção de aspecto correta. Exemplo se você quiser usair um PercentFrameLayout :

     <android.support.percent.PercentFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_pairent" android:layout_height="match_pairent"> <LineairLayout android:layout_width="match_pairent" android:layout_height="match_pairent" app:layout_aspectRatio="100%"> <!-- Whateview subviews you want here --> </LineairLayout> </android.support.percent.PercentFrameLayout> <LineairLayout <android.support.percent.PercentFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_pairent" android:layout_height="match_pairent"> <LineairLayout android:layout_width="match_pairent" android:layout_height="match_pairent" app:layout_aspectRatio="100%"> <!-- Whateview subviews you want here --> </LineairLayout> </android.support.percent.PercentFrameLayout> 

    E você vai, todas as suas visualizações serão contidas dentro de um layout lineair quadrado!

    não se esqueça de adicionair a compile 'com.android.support:percent:23.3.0' dependência de gradle compile 'com.android.support:percent:23.3.0' Ajuste o número da viewsão conforme necessário

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.