Android:单击button上的button设置。 最好是xml

我想在一些button上引入一个“向下”的风格。 我创build了一个样式和一个状态列表。

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/inactive_button_background" android:state_enabled="false"/> <item android:drawable="@drawable/active_button_background" android:state_enabled="true"/> <item android:drawable="@drawable/pressed_button_background" android:state_pressed="true"></item> </selector> 

问题是,我希望能够改变只是点击button的背景的alpha(我将有可变的背景,所以用alpha通道设置销售的颜色不是一个解决scheme)。

我只想从声明xml(不想用布局的东西来监视我的代码)这样​​做。

问题是我不知道如何将这个alpha混合应用到xml drawable的button。 我很确定有一种方法。

Solutions Collecting From Web of "Android:单击button上的button设置。 最好是xml"

我有点晚,回答这个问题,但我只是通过使用View.onTouchListner更改alpha值

你可以通过这种方式实现onTouch来做到这一点

  @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: v.setAlpha(0.5f); break; case MotionEvent.ACTION_UP: v.setAlpha(1f); default : v.setAlpha(1f) } return false; } 

我想你不能改变可绘制的alpha值,所以你将不得不以这种方式做到这一点。

这完美的作品


 yourView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { v.setAlpha(0.5f); break; } case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: { v.setAlpha(1f); break; } } return false; } }); 

你将不得不把你的代码中的东西

XML

 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Text" android:onClick="dialogClicked" /> 

Java的

 public void dialogClicked(final View view) { ... set the alpha programatically ... } 

如果你正在寻找一个“软”点击animation,添加一些东西给迈克尔的答案。 我加了这个:

 btn.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: v.animate().alpha(0.3f).setDuration(200).start(); break; case MotionEvent.ACTION_UP: v.animate().alpha(1f).setDuration(200).start(); default : v.setAlpha(1f); } return false; } }); } 

谎言在同一个想法,但与animation

我知道这是一个很老的问题,但是我不能根据问题来看到正确的答案,这是关于使用XML的alpha更改。
要做到这一点,你需要创build一个已经显示在一个问题中的select器,它是:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/inactive_button_background" android:state_enabled="false"/> <item android:drawable="@drawable/active_button_background" android:state_enabled="true"/> <item android:drawable="@drawable/pressed_button_background" android:state_pressed="true"></item> </selector> 

所以如果你只有正常的状态drawable(假设它的btn_background.png),你需要它在按下状态的50%的alpha,所有你需要做的就是创build相应的XML drawablebutton_background.xml(在可绘制的文件夹,没有DPI! )。 所以这应该是如下所示:

 <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/btn_background" android:alpha=".5" /> 

这同样适用于禁用状态,我想唯一的区别就是对于这个状态可能是30%或者任何devise者说/想要的)的alpha级别。 所以较短的版本将如下所示(对于带有可绘制ic_edit.png的button):

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <bitmap android:src="@drawable/ic_edit" android:alpha=".5" /> </item> <item android:state_enabled="false"> <bitmap android:src="@drawable/ic_edit" android:alpha=".3" /> </item> <item android:drawable="@drawable/ic_edit" /> </selector> 

这几乎可以做到。 那么,它为我工作

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <solid android:color="#5000ddff" /> </shape> </item> <item android:drawable="@color/yourdefaultcolor"/> </selector>