Android 3D按钮文字位置

标签 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 ,但对于文本我不能使用这个技巧:/(或者不知道如何)。

最佳答案

您需要创建一个自定义 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);
    }
}

关于Android 3D按钮文字位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221944/

相关文章:

android - 如何将json数据加载到android中的 fragment 中

android - 检查 fragment 是否在服务中可见

java - 动态添加按钮到 fingerpaint android api 演示

android-layout - 按钮 OnClickListener 不起作用

javascript - 向 Android 设备发送通知。已发送但未收到

android - 为什么文件没有被 file.delete() 删除?

android - 如何在 webview 中为手机和平板电脑提供两个链接?

Android 自定义对话框跨屏幕延伸而不是包装内容

android单击按钮时没有事件

android - 如何在 ListView 控件中添加 Button,ImageView 小部件,它从 sqlite 数据库中获取和显示记录