2014-01-19 3 views
3

Как изменить положение текста для разных состояний кнопок?Позиция 3D-кнопки Android

На изображении вы можете увидеть, как его внешний вид, как сейчас:

incorrect button states text position

Drawable

<?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

OK Я пробовал ваш код (но, как обычно, у меня проблемы: /) Его набор просто BOTTOM gravity, поэтому, когда я нажимаю, текст находится в нижнем левом углу. – Shaddow

Смежные вопросы