【问题标题】:How to program 2 function C button in calculator?如何编写计算器中的2个功能C按钮?
【发布时间】:2016-08-17 11:40:26
【问题描述】:

我是 Android Studio 的初学者,我想在 calc 中制作一个具有 2 个功能的 C 按钮。 如何一键清除 C 按钮仅删除一个数字,并按住删除 TextView 中的所有数字?

 findViewById(R.id.btnClear).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            txtScreen.setText("");  // Clear the screen
            // Reset all the states and flags
            lastNumeric = false;
            stateError = false;
            lastDot = false;

【问题讨论】:

标签: android button calculator


【解决方案1】:

你可以设置一个 onClickListener 和 onLongClickListener 来实现。

cButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String currentText = textView.getText().toString();
            if(currentText.length >= 2){
                currentText = currentText.substring(0, currentText.length - 2);
            }else{
                currentText = "";
            } 
            textView.setText(currentText);
        }
 }); 



cButton.setOnLongClickListener(new View.OnLongClickListener() { 
        @Override
        public boolean onLongClick(View v) {
            textView.setText("");
            return true;
        }
 });

【讨论】:

  • 额外的else 分支解决了只剩下一个char 的问题。 @Jurica,使用这个实现。
【解决方案2】:

您是否查看过onClick()onLongPress() 方法?

cancelButton.setOnLongClickListener(new OnLongClickListener() { 
        @Override
        public boolean onLongClick(View v) {
            myTextView.setText("");
            return true;
        }
    });

 button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            removeOneCharacter();
        }
 });

private void removeOneCharacter()
{
    String textViewValue = myTextView.getText().toString();
    if (textViewValue != null && textViewValue.length >= 2)
    {
        myTextView.setText(textViewValue.substring(0, textViewValue.length() - 2);
    }
}

onClick() 方法一次从TextView 中删除char。但是,onClick() 方法会从 TextView 中删除整个 String,但仅考虑是否已经存在 2 个或更多字符以防止由于子字符串的上限而出现 Exception

这里的改进可能是添加另一个 if 函数,该函数检查长按中的字符长度并在只剩下一个字符时执行清除。

【讨论】:

  • 当我添加 'txtScreen.setText("");' 时,LongPress 工作正常,但 onClick 不行。
  • @Jurica 当您点击时,TextView 中的值是多少?
  • @Jurica 当仅输入 1 个字符时,此实现不会删除字符。看看下面我的回答如何解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多