【问题标题】:How to make clicked button highlighted with one color and set other all buttons with one color when button is cliked如何使单击的按钮以一种颜色突出显示,并在单击按钮时将其他所有按钮设置为一种颜色
【发布时间】:2016-11-18 11:02:20
【问题描述】:

实际上,当我单击按钮时,我有多个矩形按钮,我将获得列表视图。现在,当我单击按钮时,我需要它以红色突出显示,其他所有按钮必须为绿色。请大家帮忙。

活动:

if(name.isEmpty()||name==null){
    billnumber  +=name;
}
else{
    if(count==3){
        billnumber  +="  , "+name;
    }
    else if(count==2){
        billnumber  +="  , "+name;
    } 
    else if(count==1){
        billnumber  +=name;
    }
}


 if (count == 3) {
    id++;
    final Button dynamicTextView = new Button(this);
    dynamicTextView.setLayoutParams(new LayoutParams(350,
            LayoutParams.MATCH_PARENT));
    dynamicTextView.setBackgroundColor(Color.parseColor("#1c7900"));
    dynamicTextView.setText("Bill Numbers\n"+billnumber);
    dynamicTextView.setId(id);
    final Button dynamicinvnumber=new Button(this);


    if(id==(clickedid-1)){
        dynamicTextView.setBackgroundColor(Color
                        .parseColor("#cf0000"));
    }
    if(istouched){
    if (id == clickedid) {
        touchedlist=dynamicTextView.getText().toString();
        if(touchedlist.contains("Bill Numbers"))
        {
            touchedlist=touchedlist.replace("Bill Numbers","");
        }
        text=touchedlist;

        if(bumpedbillnumber!="0")
        {


            if(touchedlist.contains(bumpedbillnumber))
            {
                touchedlist=touchedlist.replace(bumpedbillnumber,"");
            }
            if(text.contains(bumpedbillnumber))
            {
                text=text.replace(bumpedbillnumber,"");
            }
        }
        dynamicTextView.setBackgroundColor(Color
                        .parseColor("#cf0000"));
    }
}
if(refreshlist!=1)
{
    if(id==1)
    {
        dynamicTextView.setBackgroundColor(Color
                        .parseColor("#cf0000"));
    }
}
if (invoice1 == null) {
    if (id ==1) {
        dynamicTextView.setBackgroundColor(Color
                .parseColor("#cf0000"));
    }

}
dynamicTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);
dynamicTextView.setOnClickListener(new OnClickListener() {

    @SuppressWarnings("deprecation")
    @Override
    public void onClick(View v)
    {           
        EnabledButton = dynamicTextView.getId();
        clickedid=dynamicTextView.getId();

        dynamicTextView.setBackgroundColor(Color
                            .parseColor("#cf0000"));
        dynamicTextView.setSelected(true);
        invoiceToDisplay = null;
        invoiceToDisplay = new ArrayList<String>();
        text = dynamicTextView.getText().toString();
        if(text.contains("Bill Numbers"))
        {
            text=text.replace("Bill Numbers","");
        }
        String s[] = text.split("  , ");

        invoice = text.split("  , ");
        System.out.println("s" + s[0]);
        istouched=true;
        refreshlist=1;
        if (s.length == 1) {

            if(s[0].contains("\n"))
            {
                s[0]=s[0].replace("\n","");
            }
            int invoice11=receiptlist.indexOf(s[0].trim());
            String invoiceselected=invoiceList.get(invoice11);

            tv1.setVisibility(View.GONE);
            tv2.setVisibility(View.GONE);
            tv.setVisibility(View.VISIBLE);
            footerText3.setVisibility(View.GONE);
            footerText2.setVisibility(View.GONE);
            loadListViews(invoiceselected, listView1, headerButton

可绘制的 Xml:

<corners android:radius="3dp" />
  <solid android:color="#124a01" />

<stroke
    android:width="2px"
    android:color="#c8ea32" />

【问题讨论】:

  • 检查这个stackoverflow.com/questions/3882064/…按钮颜色在点击时的变化
  • 只需将您点击的位置传递给适配器并在代码下方设置 condilike if (pos == position) { mListview.setSelection(pos); mCardView.setCardBackgroundColor(getResources().getColor(android.R.color.white)); mAdapter.notifyDataSetChanged(); } else { mCardView.setCardBackgroundColor(getResources().getColor(R.color.blue_trans)); }
  • @sagar 问题是不同的,我希望点击的按钮为红色,其他为绿色
  • @vadivel 我想改变点击按钮的颜色,不在列表视图中按钮不会获​​得位置
  • 声明按钮数组,然后为每个按钮分配id,然后获取点击位置id并使用for循环检查条件

标签: android android-button


【解决方案1】:

btn_selected.xml

   <?xml version="1.0" encoding="utf-8"?>
  <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  android:shape="rectangle">
     <solid android:color="red_color"/>
 </shape>

btn_un_selected.xml

  <?xml version="1.0" encoding="utf-8"?>
  <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  android:shape="rectangle">
     <solid android:color="ordinary_color"/>
 </shape>

btn_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

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

 <item android:drawable="@drawable/btn_selected"  android:state_pressed="true"/>
 <item android:drawable="@drawable/btn_un_selected"/>
</selector>

在xml中更改按钮的按钮背景

<Button 
........
android:background="@drawable/btn_selector/>

在代码更改中

btn.setSelected(!btn.isSelected);

【讨论】:

    【解决方案2】:

    不要以编程方式创建按钮,而是在 xml 上创建它们,然后在您的活动中检索它们的 ID,以便您可以访问它们;在为它们设置 onTouchListener 之后,在你应该这样做的内部。

    将 Rect rect 和 shouldPerformClick 定义为活动的全局变量。

    button1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getActionMasked()){
                    case MotionEvent.ACTION_DOWN:
                        changeButtonBackgrounds(v.getId());
                        shouldPerformClick = true;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        rect = new Rect();
                        v.getDrawingRect(rect);
                        if(!(rect.left < event.getX() && event.getX() < rect.right)){
                            shouldPerformClick = false;
                            resetButtonBackgrounds();
                        }
                        if(!(rect.bottom < event.getY() && event.getY() < rect.top)){
                            shouldPerformClick = false;
                            resetButtonBackgrounds();
                        }
                        break;
                    case MotionEvent.ACTION_UP:
                        resetButtonBackgrounds();
                        if(shouldPerformClick){
                            button1.performClick;
                        }
                        break;
                }
                return true;
            }
        });
    

    我会在 changeButtonBackgrounds() 上使用 switch(viewID),我认为我的整个方法需要更多样板,但它更优化。

    【讨论】:

      【解决方案3】:

      定义按钮数组buttons,它们是您的XML文件中的按钮和一个全局变量int selectedIndex=0

      确保在您的 XML 文件中所有按钮都是绿色的。

      selectedIndex 将是最后一个选定按钮的数组中的索引。

      然后,在数组中的每个按钮上

          for (int i = 0 ; i < buttons.length ; i++)
              buttons[i].setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                      buttons[selectedIndex]
                              .setBackgroundTintList(ColorStateList.valueOf(getResources()
                                      .getColor(R.color.green, getTheme())));
      
      
                      switch (view.getId()) {
      
                          case R.id.button1:
                              buttons[0].setBackgroundTintList(ColorStateList.valueOf(getResources()
                                      .getColor(R.color.red)));
                              selectedIndex = 0;
                              break;
      
                          case R.id.button2:
                              buttons[1].setBackgroundTintList(ColorStateList.valueOf(getResources()
                                      .getColor(R.color.red)));
                              selectedIndex = 1;
                              break;
      
                          .
                          .
                          .
                      }
      
                  }
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 2014-11-06
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多