Android 3D按钮文字位置

时间:2014-01-19 20:04:34

标签: android android-layout android-button

如何更改不同按钮状态的文本位置?

在图像上,您可以看到它现在的样子:

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 个答案:

答案 0 :(得分: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);
    }
}