2016-08-03 8 views
1

У меня есть макет, который содержит только LinearLayour с 3-мя кнопками внутри.Квадратные кнопки Ширина экрана и вес Соответствие

Я бы хотел, чтобы эти 3 кнопки заполнили экран по вертикали, поэтому я использовал «weigth = 1», но мне также нужно, чтобы кнопки были квадратными, то есть их ширина была равна их высоте.

Любой способ сделать это?

Вот файл .xml

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="android.jose.se.Prueba" 
    android:background="@drawable/bg" 
    android:gravity="center"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical"> 

    <Button 
     android:id="@+id/bHet" 
     android:layout_marginTop="10dp" 
     android:layout_marginBottom="10dp" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="@drawable/layer1" 
     android:onClick="cambiarBoton"/> 

    <Button 
     android:id="@+id/bGay" 
     android:layout_marginTop="10dp" 
     android:layout_marginBottom="10dp" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="@drawable/layer2" 
     android:onClick="cambiarBoton"/> 

    <Button 
     android:id="@+id/bLesbi" 
     android:layout_marginTop="10dp" 
     android:layout_marginBottom="10dp" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="@drawable/layer3" 
     android:onClick="cambiarBoton"/> 

</LinearLayout> 

Спасибо вам всем

+0

Вы хотите заполнить вертикально или горизонтально? – faranjit

+0

это может помочь: http://stackoverflow.com/questions/4656986/how-do-i-keep-the-aspect-ratio-on-image-buttons-in-android – Bill

+0

Вертикально, я уже исправил его. – JOSEMAFUEN

ответ

0

Лучший способ сделать это, чтобы сделать новый класс с именем кнопки Square и этот класс должен простираться кнопку. Затем в onMeasure этого класса просто создайте heightSpec как WidthSpec.

public class SquareButton extends Button { 

public SquareButton(Context context) { 
    super(context); 
} 

public SquareButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public SquareButton(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

@Override 
protected void onMeasure(int WidthSpec, int HeightSpec){ 
    int newWidthSpec = HeightSpec ; 

    super.onMeasure(newWidthSpec, HeightSpec); 
}} 

Теперь вы можете использовать эту квадратную кнопку вместо обычной кнопки в вашем xml, как это. Значение атрибута android: width будет проигнорировано.

<com.example.package.SquareButton 
    android:height = "0dp" 
    android:weight = "1" 
    android:width = "0dp" 
/> 
2

я имел подобную проблему и сделать это с помощью Google's Percent Relative 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="match_parent"> 
    <Button 
     android:layout_width="match_parent" 
     app:layout_aspectRatio="100%"/> 
</android.support.percent.PercentFrameLayout> 
+0

Я пробовал, но он говорит, что атрибут высоты макета должен быть определен. – JOSEMAFUEN

+0

Игнорируйте эту ошибку, она будет работать. Просто постройте и попробуйте. Думаю, это жучок. –

+0

Обратите внимание, что атрибуты «layout_ *» предназначены только для макета. Поэтому макет может не понадобиться «layout_height» вообще, как в этом случае. –