5

在 iOS 中,如果我将按钮的背景设置为图像,当我按下按钮时,按钮的整个内容(包括文本)都会被遮蔽。能不能在安卓中达到同样的效果,还是不同的状态需要使用不同的图片?另外,即使我为不同的状态使用不同的图像,如何使文本也被阴影化?一种肮脏的方法是设置OnClickListener按钮并在按下时以编程方式隐藏文本,但是还有其他方法吗?

4

3 回答 3

7

一段时间以来,我一直在尝试为此寻找解决方案,但找不到任何东西,所以我想出了一个适用于所有图像按钮的非常简洁的解决方案。就像iOS一样。

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

  • 创建一个名为相关的drawable,我称之为“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 中,然后将 Button 放在 LinearLayout 中。在 Button 中使用 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>
    

而已!

于 2011-07-29T13:32:10.207 回答
3

为了在不创建第二个按钮图像的情况下获得按下状态,我创建了一个 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() ));
于 2013-02-28T15:40:14.910 回答
0

为了给按钮本身带来不同的效果,我相信您需要使用自定义图像,如此所示,此处不详

于 2011-06-17T00:37:42.180 回答