关于button按钮响应的三种写法和ImageButton判断状态

本文详细介绍了Android中按钮点击事件的三种实现方式:匿名内部类、独立监听器类及直接在Activity中定义的方法,并展示了ImageButton如何判断选中状态。

1. //第一种方式    

2.         Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源    

3.         Btn1.setOnClickListener(new Button.OnClickListener(){//创建监听    

4.             public void onClick(View v) {    

5.                 String strTmp = "点击Button01";    

6.                 Ev1.setText(strTmp);    

7.             }    

8.         });     

9.         //第二种方式    

10.         Button Btn2 = (Button) findViewById(R.id.button2);//获取按钮资源    

11.         Btn2.setOnClickListener(listener);//设置监听      

12.     }  

13.     Button.OnClickListener listener = new Button.OnClickListener(){//创建监听对象    

14.         public void onClick(View v){    

15.             String strTmp="点击Button02";    

16.             Ev1.setText(strTmp);    

17.         }    

18.     };  

19.  //第三种方式(Android1.6版本及以后的版本中提供了)    

20.     public void Btn3OnClick(View view){    

21.         String strTmp="点击Button03";  

22.         Ev1.setText(strTmp);  

23.     }    


ImageButton判断状态:

<ImageButton
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:layout_gravity="center_horizontal"
    android:src="@drawable/remider_selecter"
    android:background="@null"
    android:id="@+id/remind_select_img_btn"
    android:focusable="false"
    />

<?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/btn_remind_selected" />
    <item android:drawable="@drawable/btn_remind_default"/>
</selector>

remindBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        if(remindBtn.isSelected())
        {
        }
        else
        {
        }
    }
});

也可以这样设定其状态:

remindBtn.setSelected(true);
remindBtn.setSelected(false);

package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import com.example.myapplication.databinding.ActivityMainBinding; import net.objecthunter.exp4j.Expression; import net.objecthunter.exp4j.ExpressionBuilder; public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; private String currentInput = ""; private String expression = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); // 直接通过 binding 访问控件,无需强转 binding.btnClear.setOnClickListener(v -> { currentInput = ""; expression = ""; binding.textViewHistory.setText(""); binding.editTextDisplay.setText("0"); }); binding.btnDelete.setOnClickListener(v -> { if (!currentInput.isEmpty()) { currentInput = currentInput.substring(0, currentInput.length() - 1); binding.editTextDisplay.setText(currentInput.isEmpty() ? "0" : currentInput); } }); private void setButtonListeners() { // 所有按钮ID数组 int[] buttonIds = { R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9, R.id.btnAdd, R.id.btnSubtract, R.id.btnMultiply, R.id.btnDivide, R.id.btnDot, R.id.btnPercent, R.id.btnPlusMinus, R.id.btnClear, R.id.btnDelete, R.id.btnEquals }; View.OnClickListener listener = v -> { String text = ((Button) v).getText().toString(); if (v.getId() == R.id.btnClear) { currentInput = ""; expression = ""; textViewHistory.setText(""); editTextDisplay.setText("0"); } else if (v.getId() == R.id.btnDelete) { if (!currentInput.isEmpty()) { currentInput = currentInput.substring(0, currentInput.length() - 1); editTextDisplay.setText(currentInput.isEmpty() ? "0" : currentInput); } } else if (v.getId() == R.id.btnEquals) { try { Expression exp = new ExpressionBuilder(expression.isEmpty() ? currentInput : expression).build(); double result = exp.evaluate(); long longResult = (long) result; String displayResult = (result == (double) longResult) ? String.valueOf(longResult) : String.valueOf(result); textViewHistory.setText((expression.isEmpty() ? currentInput : expression) + " ="); editTextDisplay.setText(displayResult); currentInput = displayResult; expression = ""; } catch (Exception e) { editTextDisplay.setText("Error"); } } else if (v.getId() == R.id.btnPlusMinus) { if (!currentInput.isEmpty() && !currentInput.equals("0")) { if (currentInput.startsWith("-")) { currentInput = currentInput.substring(1); } else { currentInput = "-" + currentInput; } editTextDisplay.setText(currentInput); } } else if (v.getId() == R.id.btnPercent) { if (!currentInput.isEmpty()) { double val = Double.parseDouble(currentInput) / 100; currentInput = String.valueOf(val); editTextDisplay.setText(currentInput); } } else { // 处理数字操作符 if (isOperator(text)) { if (!currentInput.isEmpty()) { expression = currentInput + text; textViewHistory.setText(expression); currentInput = ""; } else if (!expression.isEmpty()) { expression = expression.replaceAll("[+\\-×÷]$", text); textViewHistory.setText(expression); } } else { currentInput += text; editTextDisplay.setText(currentInput); } } }; for (int id : buttonIds) { Button btn = findViewById(id); if (btn != null) btn.setOnClickListener(listener); } } private boolean isOperator(String str) { return str.equals("+") || str.equals("-") || str.equals("×") || str.equals("÷"); } }
最新发布
09-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kunzai6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值