2017-05-03 43 views
1

我开发需要圆圈按钮选择一个应用程序,我达到了预期的结果,这样的形象:圆圈键动态大小的Android

enter image description here

的问题是,我需要设置一个固定值宽度和高度,以获得正确的形状,否则按钮会像下面的图片,我需要它是动态的:

enter image description here

我的按钮的XML:

<Button 
    android:id="@+id/bt_ab_mais" 
    style="@style/TipoSanguineoButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:layout_marginRight="13dp" 
    android:text="@string/pedir_doacao_sangue_ab_mais" 
    android:textAllCaps="true" 
    android:textSize="15sp" 
    android:textStyle="bold" /> 

按钮的背景:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="false"> 
     <shape android:shape="oval"> 
      <stroke android:width="2dp" android:color="@android:color/darker_gray" /> 
      <solid android:color="@color/branco" /> 
     </shape> 
    </item> 
    <item android:state_pressed="true"> 
     <shape android:shape="oval"> 
      <stroke android:width="2dp" android:color="@android:color/darker_gray" /> 
      <solid android:color="@color/cinza_tablayout" /> 
     </shape> 
    </item> 
</selector> 

是否有人知道该怎么办呢?

+0

我看到的第一个问题是layout_weight,这将覆盖wrap_content。 –

+0

我试过没有layout_weight,但同样的问题发生 – jackcar

+0

你也可以在你的物品内设置高度和宽度。这将主要是定量配给,而不是绝对大小 –

回答

1

我得到了答案,我只需要创建一个自定义按钮,在这里我重写onMeasure方法,像这样:

public class CircleButton extends Button { 
    public CircleButton(Context context) { 
     super(context); 
    } 

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

    public CircleButton(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     setMeasuredDimension(widthMeasureSpec, widthMeasureSpec); 
    } 
} 

按钮的XML:

<br.org.component.CircleButton 
    android:id="@+id/bt_b_menos" 
    style="@style/TipoSanguineoButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="13dp" 
    android:layout_weight="1" 
    android:adjustViewBounds="true" 
    android:scaleType="centerInside" 
    android:stateListAnimator="@null" 
    android:text="@string/pedir_doacao_sangue_b_menos" 
    android:textAllCaps="true" 
    android:textSize="15sp" 
    android:textStyle="bold" />