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