如何突出显示android中的一个按钮

时间:2012-01-27 07:51:27

标签: android

在我基于数据库值的项目中,我正在动态创建按钮。现在通过按一个按钮,我突出显示该按钮。如果我按下另一个按钮则会突出显示该按钮将突出显示,并且第一个按下的按钮将被取消突出显示

我的问题是:总是按下按钮会突出显示,直到按下另一个按钮。

    for (int i = 0; i < arr.length; i++) {

        final Button b = new Button(this);          
        b.setWidth(80);
        b.setId(i + 1);         
        b.setText("M" + arr[i]);            
        ll.addView(b);      

        b.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                  b.setBackgroundColor(R.drawable.buttonbtn);

                  String str = b.getText().toString().substring(1);
                  Constant.diametervalue = str;
                  f1 = l.indexOf(Constant.diametervalue);
                  f2 = l.size();Log.e("","f1 value--"+f2);
                  Constant.length = f2;
                  InnerList adapter11 = new InnerList(this, str); 
                  adapter11.getCount();
                  gallery.setAdapter(adapter11);    
        }
    }

按下我的代码,按下一个按钮就会突出显示。如果我先按第二个按钮,第二个按钮突出显示,则按下。

3 个答案:

答案 0 :(得分:1)

按钮元素仅具有状态按下状态。在复选框中,有一个状态称为状态检查。您可以使用按钮图像创建一个复选框。

答案 1 :(得分:0)

我认为您需要使用复选框,而不是正常的按钮视图。如果这不清楚我可以为你制作一些代码..但基本上你会使用复选框并更改样式以同意你想要显示..在这种情况下,你将能够突出显示(检查),当点击其他按钮(复选框)如果您在组中使用它们,第一次检查将会消失

=======添加代码=======

我们去找我的朋友:

on mainactivity:

import android.app.Activity;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class HighListButtonActivity extends Activity implements OnCheckedChangeListener {
    private CheckBox b1,b2,b3;
    private int selectedChId=-1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        b1=(CheckBox)findViewById(R.id.ck1);
        b2=(CheckBox)findViewById(R.id.ck2);
        b3=(CheckBox)findViewById(R.id.ck3);

        b1.setOnCheckedChangeListener(this);
        b2.setOnCheckedChangeListener(this);
        b3.setOnCheckedChangeListener(this);
    }

  @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    // here just to follow the checkbox which is checked to uncheck it later when other checkbox is checked..
      if(selectedChId==-1){
          selectedChId=buttonView.getId();
      }else if(selectedChId==buttonView.getId()){
          selectedChId=-1;
      }else{
          ((CheckBox)findViewById(selectedChId)).setChecked(false);
          selectedChId=buttonView.getId();
      }

      //make your logic here......

}


}

main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <CheckBox 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="bt1"
        android:button="@drawable/hlor"
        android:background="@drawable/hlor"
        android:id="@+id/ck1"        
        />
    <CheckBox 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="bt2"
        android:button="@drawable/hlor"
        android:background="@drawable/hlor"
        android:id="@+id/ck2"        
        />
    <CheckBox 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="bt3"
        android:button="@drawable/hlor"
        android:background="@drawable/hlor"
        android:id="@+id/ck3"        
        />

</LinearLayout>

hlor.xml(作为选择器样式):

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

hlord.xml(已检查样式可绘制):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape>
  <android:solid android:color="#FF555555"/>
</shape>
</item>
</layer-list>

hlornd.xml(作为未经检查的样式可绘制):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape>
  <android:solid android:color="#FF000000"/>
</shape>
</item>
</layer-list>

突出显示改变hlornd / hlord样式的颜色

祝你好运......

答案 2 :(得分:0)

试试这个:

假设选择Button1和Button2两个按钮。

并为2个按钮创建四个drawable:

示例:普通图像:buttonone_normal,buttontwo_normal。

选择的图像:buttonone_selected,buttontwo_selected

 and onClickListeners put something like this:
buttonone.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) 
{
  buttonone.setImageResource(R.drawable.buttonone_selected)
  buttontwo.setImageResource(R.drawable.buttontwo_normal)
}
buttontwo.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) 
{
  buttonone.setImageResource(R.drawable.buttonone_normal)
  buttontwo.setImageResource(R.drawable.buttontwo_selected)
}