单击/聚焦时如何更改按钮的背景图像?

时间:2011-10-18 06:47:40

标签: android button

我想在点击或聚焦时更改按钮的背景图像。

这是我的代码:

Button tiny = (Button)findViewById(R.id.tiny);
tiny.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Button tiny = (Button)findViewById(R.id.tiny);
        tiny.setBackgroundResource(R.drawable.a9p_09_11_00754);

        TextView txt = (TextView)findViewById(R.id.txt);
        txt.setText("!---- On click ----!");
    }
});

这段代码对吗?它会在事件中调用一个按钮吗?

8 个答案:

答案 0 :(得分:91)

你可以在xml文件中实现如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/your_imagename_while_focused"/>
<item android:state_pressed="true" android:drawable="@drawable/your_imagename_while_pressed" />
<item android:drawable="@drawable/image_name_while_notpressed" />  //means normal
</selector>

现在将此xml文件保存在drawable文件夹中,并将其命名为suppc abc.xml并将其设置如下

 Button tiny = (Button)findViewById(R.id.tiny);
 tiny.setBackgroundResource(R.drawable.abc);

希望它会对你有所帮助。 :)

答案 1 :(得分:56)

它很容易实现。为此,您需要创建一个xml文件(选择器文件)并将其放在res中的drawable文件夹中。之后,在布局文件的按钮背景中设置xml文件。

button_background_selector.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/your_hover_image" />
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/your_hover_image" />
    <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/your_hover_image"/>
    <item android:drawable="@drawable/your_simple_image" />
</selector>

现在在按钮的背景中设置上述文件。

<Button
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:textColor="@color/grey_text"
    android:background="@drawable/button_background_selector"/>

答案 2 :(得分:8)

抱歉这是错误的。

要根据特定事件(焦点,按,普通)更改背景颜色/图像,您需要定义一个按钮选择器文件并将其作为按钮的背景实现。

例如: button_selector.xml(在drawable文件夹中定义此文件)

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:color="#000000" /> <!-- pressed -->
     <item android:state_focused="true"
           android:color="#000000" /> <!-- focused -->
     <item android:color="#FFFFFF" /> <!-- default -->
 </selector>

    <!-- IF you want image instead of color then write 
android:drawable="@drawable/your_image" inside the <item> tag -->

并将其应用为:

 <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:drawable="@drawable/button_selector.xml" />

答案 3 :(得分:5)

使用此代码 在可绘制文件夹名称中创建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/buutton_pressed" />
  <item 
     android:drawable="@drawable/button_image" />
</selector>

并在按钮xml文件中

 android:background="@drawable/button"

答案 4 :(得分:3)

要更改按钮背景,我们可以使用2种方法

  1. 在OnClick按钮中,只需添加以下代码:

     public void onClick(View v) {
         if(v == buttonName) {
            buttonName.setBackgroundDrawable
             (getResources().getDrawable(R.drawable.imageName_selected));
          }
    
           }
    

    2.在drawable文件夹中创建button_background.xml。(使用xml)

    res - &gt; drawable - &gt; button_background.xml

       <?xml version="1.0" encoding="UTF-8"?>
        <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
             <item android:state_selected="true"
                   android:drawable="@drawable/tabs_selected" /> <!-- selected-->
             <item android:state_pressed="true"
                   android:drawable="@drawable/tabs_selected" /> <!-- pressed-->
             <item  android:drawable="@drawable/tabs_selected"/>
        </selector>
    

    现在在按钮的后台文件中设置上述文件。

         <Button
               android:layout_width="fill_parent" 
               android:layout_height="wrap_content"
               android:background="@drawable/button_background"/>
    
                              (or)
    
             Button tiny = (Button)findViewById(R.id.tiny);
                   tiny.setBackgroundResource(R.drawable.abc);
    

    第二种方法更适合设置背景fd按钮

答案 5 :(得分:2)

您只需设置背景并在布局文件中的按钮背景中提供previous.xml文件。

<Button
 android:id="@+id/button1"
 android:background="@drawable/previous"
 android:layout_width="200dp"
 android:layout_height="126dp"
 android:text="Hello" />

和done.Edit以下是drawable目录中的previous.xml文件

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@drawable/onclick" android:state_selected="true"></item>
<item android:drawable="@drawable/onclick" android:state_pressed="true"></item>
<item android:drawable="@drawable/normal"></item>

答案 6 :(得分:0)

如果要向视图中添加更多详细信息,也可以直接在item标签内创建形状,例如:

<?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="#81ba73" />
            <corners android:radius="6dp" />
        </shape>
        <ripple android:color="#c62828"/>
    </item>
    <item android:state_enabled="false">
        <shape>
            <solid android:color="#788e73" />
            <corners android:radius="6dp" />
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="#add8a3" />
            <corners android:radius="6dp" />
        </shape>
    </item>
</selector>

请注意,Android将从顶部到底部循环显示所有项目,因此,您必须将item无条件地放置在列表的底部(因此,它的作用类似于默认/后备)。

答案 7 :(得分:0)

  1. 在可绘制的play_pause.xml文件中创建文件
for (Question q : questions) {
    if (q == null) {
        continue;  // ignore nulls
    }
    HashMap<String, Response> thisResponse = new HashMap<>();
    listOfResponses.add(thisResponse);
    // populate thisResponse
}
  1. 在xml文件中,在下面的代码中添加该代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true"
          android:drawable="@drawable/pause" />

    <item android:state_selected="false"
          android:drawable="@drawable/play" />
    <!-- default -->
</selector>
  1. 在Java文件中,将此代码添加到下面
 <ImageView
                android:id="@+id/iv_play"
                android:layout_width="@dimen/_50sdp"
                android:layout_height="@dimen/_50sdp"
                android:layout_centerInParent="true"
                android:layout_centerHorizontal="true"
                android:background="@drawable/pause_button"
                android:gravity="center"
                android:scaleType="fitXY" />

并添加

iv_play = (ImageView) findViewById(R.id.iv_play);
iv_play.setSelected(false);