按下时自动更改按钮背景和文本外观(如iOS)



在iOS中,如果我将按钮的背景设置为图像,当我按下按钮时,按钮的整个内容(包括文本)将被阴影覆盖。我可以在Android中实现相同的效果吗?或者我必须为不同的状态使用不同的图像吗?此外,即使我对不同的状态使用不同的图像,我如何使文本也有阴影?一种肮脏的方法是将OnClickListener设置为按钮,并在按下时通过程序对文本进行阴影处理,但还有其他方法吗?

我已经试图找到一个解决方案有一段时间了,但什么都找不到,所以我想出了一个非常巧妙的解决方案,适用于所有图像按钮。就像iOS一样。

  • 创建一个10%透明的黑色图像,并将其保存为PNG。我称之为button_pressed.png。您可以使用此图像,http://img84.imageshack.us/img84/7924/buttonpressed.png

  • 创建一个称为相关内容的绘图,我称之为"button_pressed_layout.xml"

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android=" http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@drawable/button_pressed"  />
    </selector>
    
  • 现在将按钮图像放在LinearLayout中,然后将按钮放在Linear Layout中。在按钮中,使用Button_pressed_layout.xml作为背景。

        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/button_image">
            <Button
                android:id="@+id/myButtonId"
                android:text="@string/Continue"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="@drawable/button_pressed_layout"
                android:textColor="#FFF"
                android:textSize="16dp" >                   
            </Button>
        </LinearLayout>
    

就是这样!

为了在不创建第二个按钮图像的情况下获得按下状态,我创建了一个OnTouchListener来更改按钮的alpha。这不是最美丽的按压状态,但提供了有效的自动行为。

public class PressedStateOnTouchListener implements OnTouchListener
{
    PressedStateOnTouchListener( float alphaNormal )
    {
        mAlphaNormal    = alphaNormal;
    }
    public boolean onTouch( View theView, MotionEvent motionEvent )
    {
        switch( motionEvent.getAction() ) {
            case MotionEvent.ACTION_DOWN:
                theView.setAlpha( mAlphaNormal / 2.0f );
                break;
            case MotionEvent.ACTION_UP:
                theView.setAlpha( mAlphaNormal );
                break;
        }
        // return false because I still want this to bubble off into an onClick
        return false;
    }
    private float   mAlphaNormal;
}

在"活动"中,将此监听器应用于每个按钮:

Button theButton =  (Button)findViewById( R.id.my_button_id );
theButton.setOnTouchListener( new PressedStateOnTouchListener( theButton.getAlpha() ));

为了给按钮本身带来不同的效果,我认为你需要使用自定义图像,如图所示,在这里不太详细。至于文本,这篇文章看起来会对阴影起到作用

相关内容

  • 没有找到相关文章

最新更新