点击时如何更改Android中button的颜色?

我正在开发Android应用程序。 我想要4个button水平放置在屏幕的底部。 在这4个button中,2个button上有图像。 button的边框应为黑色,边框应尽可能薄。 当我点击button时,我希望button的背景应该改变为蓝色,而不改变边框的颜色,并且应该保持那种颜色一段时间。 我怎样才能在Android中实现这种情况?

一种方法是在drawable创build一个像这样的XML文件,名为whatever.xml:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/bgalt" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/bgalt" /> <item android:drawable="@drawable/bgnorm" /> </selector> 

bgaltbgnorm是可绘制的PNG图像。

如果您在活动中以编程方式创buildbutton,则可以使用以下设置背景:

 final Button b = new Button (MyClass.this); b.setBackgroundDrawable(getResources().getDrawable(R.drawable.whatever)); 

如果你用一个XML来设置你的button的样式,你可以这样做:

 <Button android:id="@+id/mybutton" android:background="@drawable/watever" /> 

最后是一个教程的链接 。 希望这可以帮助。

用“bg_button.xml”将这段代码保存在drawable文件夹中,并在xml中调用“@ drawable / bg_button”作为button的背景:

 <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" > <shape> <solid android:color="#004F81" /> <stroke android:width="1dp" android:color="#222222" /> <corners android:radius="7dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item> <shape> <gradient android:startColor="#89cbee" android:endColor="#004F81" android:angle="270" /> <stroke android:width="1dp" android:color="#4aa5d4" /> <corners android:radius="7dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> </selector> 

参考这个,

 boolean check = false; Button backward_img; Button backward_img1; backward_img = (Button) findViewById(R.id.bars_footer_backward); backward_img1 = (Button) findViewById(R.id.bars_footer_backward1); backward_img.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { check = true; backward_img.setBackgroundColor(Color.BLUE); } }); if (check == true) { backward_img1.setBackgroundColor(Color.RED); backward_img.setBackgroundColor(Color.BLUE); } 

尝试这个

  final Button button = (Button) findViewById(R.id.button_id); button.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP) { button.setBackgroundColor(Color.RED); } else if(event.getAction() == MotionEvent.ACTION_DOWN) { button.setBackgroundColor(Color.BLUE); } return false; } }); 

如果您想要更改button的背景图像或颜色,只需复制此代码并粘贴到您的项目中的精确位置,如下所述。

  <!-- Create new xml file like mybtn_layout.xml file in drawable --> <?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/pressed" /> <!--pressed --> <item android:drawable="@drawable/normal" /> <!-- Normal --> </selector> <!-- Now this file should be in a drawable folder and use this single line code in button code to get all the properties of this xml file --> <Button android:id="@+id/street_btn" android:layout_width="wrap_content" android:background="@drawable/layout_a" > <!-- your required code --> </Button> 

尝试这个……

首先创build一个名为button_pressed.xml的xml文件这是它的内容。

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/icon_1" /> <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/icon_1_press" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/icon_1_press" /> <item android:drawable="@drawable/icon_1" /> </selector> 

Noe试试你的button。

 int imgID = getResources().getIdentifier("button_pressed", "drawable", getApplication().getPackageName()); button.setImageResource(imgID); 

button_pressed.xml应该在可绘制文件夹中。 icon_1_press和icon_1是button按下和正常对焦的两个图像。

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- default --> <item android:state_pressed="false" android:state_focused="false"> <shape android:innerRadiusRatio="1" android:shape="rectangle" > <solid android:color="#00a3e2" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> </shape> </item> <!-- button focused --> <item android:state_pressed="false" android:state_focused="true"> <shape android:innerRadiusRatio="1" android:shape="rectangle" > <solid android:color="#5a97f5" /> <padding android:bottom="5dp" android:left="10dp" android:right="10dp" android:top="5dp" /> </shape></item> <!-- button pressed --> <item android:state_pressed="true" android:state_focused="false"> <shape android:innerRadiusRatio="1" android:shape="rectangle" > <solid android:color="#478df9"/> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> </shape></item> </selector> 

我使用这个代码(有涟漪效应):

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/color_gray"> <item android:id="@android:id/mask"> <color android:color="@color/color_gray" /> </item></ripple> 

你可以试试这个代码来解决你的问题

 <?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/login_selected" /> <!-- pressed --> <item android:state_focused="true" android:drawable="@drawable/login_mouse_over" /> <!-- focused --> <item android:drawable="@drawable/login" /> <!-- default --> </selector> 

把这段代码写在你的drawable中,创build一个新的资源并命名为你想要的,然后把这个drwable的名字写在和android中的图片src相同的button中

要正确处理多久,你想让你的button留在你的其他颜色,我会build议这个版本:

 button.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: button.setBackground(getResources().getDrawable(R.drawable.on_click_drawable)); break; case MotionEvent.ACTION_UP: new java.util.Timer().schedule( new java.util.TimerTask() { @Override public void run() { ((Activity) (getContext())).runOnUiThread(new Runnable() { @Override public void run() { button.setBackground(getResources().getDrawable(R.drawable.not_clicked_drawable)); } }); } }, BUTTON_CLICK_TIME_AFTER_RELEASE_ANIMATION); break; default: } return false; } }); 

BUTTON_CLICK_TIME_AFTER_RELEASE_ANIMATION表示在多less时间[ms]之后,button将重置为之前的状态(但是,您可能想要使用一些布尔值来检查button是否在两者之间使用,具体取决于您要实现的目的…) 。

海最简单的方法是这样的:

将此代码添加到mainactivity.java

 public void start(View view) { stop.setBackgroundResource(R.color.red); start.setBackgroundResource(R.color.yellow); } public void stop(View view) { stop.setBackgroundResource(R.color.yellow); start.setBackgroundResource(R.color.red); } 

然后在你的活动主要

  <button android:id="@+id/start" android:layout_height="wrap_content" android:layout_width="wrap_content" android:onclick="start" android:text="Click"> </button><button android:id="@+id/stop" android:layout_height="wrap_content" android:layout_width="wrap_content" android:onclick="stop" android:text="Click"> 

或者按照这个教程