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。 我很确定有一种方法。

  • 不同的文字在一个button
  • 上下移动浮动操作button以避免被小吃店挡住
  • 使用意向启动一个活动,并禁用后退button启动以前的活动
  • 按下button时如何重复执行某些操作?
  • Android - 默认button样式
  • Android材质devisebutton - 预棒棒糖
  • 底部与移动浮动行动button
  • 点击它后我怎样才能保持一个button?
  • 我有点晚,回答这个问题,但我只是通过使用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>