【问题标题】:Android 3D button text positionAndroid 3D按钮文字位置
【发布时间】:2014-01-19 20:04:34
【问题描述】:

如何改变不同按钮状态的文字位置?

在图片上你可以看到它现在的样子:

可绘制

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

【问题讨论】:

    标签: android android-layout android-button


    【解决方案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);
        }
    }
    

    【讨论】:

    • 我可以只使用 XML 吗?
    • @Shaddow:不,你不能。只有可绘制对象和颜色可以定义状态列表。
    • 好的,我尝试了你的代码(但通常,我遇到了问题:/)它只设置了 BOTTOM 重力,所以当我按下时,文本位于左下角。
    • setGravity(pressed ? Gravity.CENTER | Gravity.BOTTOM : Gravity.CENTER); 正在工作:)
    • 对不起,我的错误。我应该使用CENTER_HORIZONTAL :)
    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2013-09-27
    • 2023-04-04
    • 1970-01-01
    • 2021-11-13
    • 2011-09-16
    • 2015-04-10
    相关资源
    最近更新 更多