gpt4 book ai didi

android - 按下状态时如何移动按钮文本

转载 作者:IT老高 更新时间:2023-10-28 23:12:30 25 4
gpt4 key购买 nike

我为按钮以及不同的按钮状态制作了自定义背景。但现在我提出了一个我无法理解的观点。

当按钮处于正常状态时,它看起来就很好。但是当我按下按钮时,我需要将文本向下移动几个像素,因为按钮背景图像在移动(实际上感觉就像它在图像上移动,因为首先在按钮下方有边框,当它处于按下状态时,这个边框就会消失)。请看下图。

当按钮状态被按下时,如何移动按钮中的按钮文本? (可能以某种方式填充或自定义按钮布局)

enter image description here

最佳答案

在 9-patch 中设置填充对我不起作用。在触摸监听器中设置填充很麻烦,会在任何使用按钮的地方乱扔代码。

我对 Button 进行了子类化,结果证明它相当整洁。就我而言,我想将图标 (drawableLeft) 和文本向左偏移 1px,向下偏移 1px。

子类按钮小部件:

package com.myapp.widgets;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;

import com.myapp.R;

public class OffsetButton extends Button {

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

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

public OffsetButton(Context context) {
super(context);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
boolean value = super.onTouchEvent(event);

if (event.getAction() == MotionEvent.ACTION_UP) {
setBackgroundResource(R.drawable.btn_normal);
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
setBackgroundResource(R.drawable.btn_pressed);
setPadding(getPaddingLeft() + 1, getPaddingTop() + 1, getPaddingRight() - 1,
getPaddingBottom() - 1);
}

return value;
}
}

并像这样在布局中使用它:

<com.myapp.widgets.OffsetButton
android:text="@string/click_me"
android:drawableLeft="@drawable/icon_will_be_offset_too_thats_good" />

几点说明:

  • 没有使用 StateListDrawable 作为背景,而是在代码中切换背景。当我尝试使用 StateListDrawable 时,填充更改和背景更改之间会有短暂的停顿。那看起来不太好。

  • 设置背景会重置padding,所以在ACTION_UP的情况下不需要调整padding

  • 增加顶部和左侧的内边距很重要,同时减少底部和右侧的内边距。所以内容区域的大小保持不变,内容区域实际上只是移动了。

关于android - 按下状态时如何移动按钮文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7676986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com