2014-01-19 48 views
3

如何更改不同按鈕狀態的文字位置?Android 3D按鈕文字位置

在圖像,你可以看到它的外觀像現在:

incorrect button states text position

繪製

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:state_pressed="true"> 
     <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
      <item android:top="4dp"> 
       <shape android:shape="rectangle"> 
        <solid android:color="#DCDBDB" /> 
        <corners android:radius="7dp" /> 
        <stroke android:width="1dp" android:color="#B1B1B1"/> 
       </shape> 
      </item> 

      <item android:bottom="4.5dp" android:left="1.5dp" android:right="1.5dp" android:top="5.5dp"> 
       <shape android:shape="rectangle" android:gravity="bottom"> 
        <solid android:color="#F2F1F1" /> 
        <corners android:radius="6dp" /> 
        <stroke android:width="1dp" android:color="#FFFFFF"/> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 

    <item> 
     <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
      <item> 
       <shape android:shape="rectangle"> 
        <solid android:color="#DCDBDB" /> 
        <corners android:radius="7dp" /> 
        <stroke android:width="1dp" android:color="#B1B1B1"/> 
       </shape> 
      </item> 

      <item android:bottom="8.5dp" android:left="1.5dp" android:right="1.5dp" android:top="1.5dp"> 
       <shape android:shape="rectangle"> 
        <solid android:color="#F2F1F1" /> 
        <corners android:radius="6dp" /> 
        <stroke android:width="1dp" android:color="#FFFFFF"/> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 

</selector> 

前幾天我問類似的問題 - Android 3D button src padding,但對文字我不能使用這招:/(或不知道如何)。

回答

1

您需要創建一個自定義Button並重寫方法改變其以定製它是基於當前的狀態重力狀態。

例如這裏是一個自定義Button其文本當按下它會跳到底部的代碼:

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

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

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

    @Override 
    public void setPressed(boolean pressed) { 
     if (pressed != isPressed()) { 
      setGravity(pressed ? Gravity.CENTER_HORIZONTAL | 
        Gravity.BOTTOM : Gravity.CENTER); 
     } 
     super.setPressed(pressed); 
    } 
} 
+0

我能做的只是與XML? – Shaddow

+0

@Shaddow:不,你不能。只有繪圖和顏色可以定義狀態列表。 – corsair992

+0

好吧我嘗試了你的代碼(但通常情況下,我遇到了問題:/)它的設置只是BOTTOM引力,所以當我按下時,文本位於左下角。 – Shaddow