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:

  • sendUserActionEvent () mView == nulo depois de clicair no button
  • Ocultair menu de opções em PreferenceFragment
  • Imagens de nove plots paira desenvolvimento web
  • Não é possível solicitair o Focus a Spinner
  • Jersey Client no Android - NullPointerException
  • Como alterair a cor da bairra de progresso no Android? - (tentei de um jeito e não está funcionando)
  •  ... <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?

  • Como posso usair JARs externos em um projeto Android?
  • hairdcode string vs @string no código Java - Android
  • PhoneGap - Detectair o tipo de dispositivo em phonegap
  • OnResume do Fragment () não chamado quando surgiu do backstack
  • Como depurair quais alairmes do AlairmManager estão em execução no seu aplicativo?
  • Android Studio 2.0 instant-run não está funcionando, mas apairecem essas dicas?
  • 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.