2016-04-13 2 views
-1

У меня есть десять кнопок, 0-9, и когда один нажат, я хочу отобразить его значение в TextView. Таким образом, первоначальный дисплей выглядит следующим образом:Отображение содержимого с помощью кнопок Щелчки

0,00

Если я нажимаю кнопку 2, то оно должно быть отображено в TextView так:

0.02

Теперь, если я нажал 5, то новое значение должно быть:

0,25

и так далее. Я никогда не делал ничего подобного, поэтому я не совсем уверен, с чего начать. Итак, мой вопрос: какой лучший способ реализовать что-то подобное?

EDIT: Я знаю, как отображать контент при нажатии кнопки, однако я не уверен, как перевести каждое число при нажатии новой кнопки в новое положение.

+0

Какой текст вы показываете на каждой кнопке? –

+0

Его аналогичный дисплей как базовый калькулятор. – mur7ay

+0

Таким образом, максимальное число в вашем случае будет 9.99, правильно? –

ответ

1

Сохраните int со значением, которое вы показываете, и когда вы вводите число, умножьте это значение на 10 и добавьте новый номер.

Что-то вроде:

public void updateValue(int buttonPressed){ 
    currentValue = (currentValue*10) + buttonPressed; 
} 

тогда, когда вы обновляете TextView убедитесь, что вы форматировать строку соответствующим образом:

public String formatNum(){ 
    String valueAsString = Integer.toString(currentValue); 
    while(valueAsString.length()<3){ 
     valueAsString = '0' + valueAsString; 
    } 
    char[] stringBuilding = new char[valueAsString.length()+(((valueAsString.length())-2)/3)+1]; 
    int valueAsStringPtr = valueAsString.length()-1; 
    int stringBuildingPtr = stringBuilding.length-1; 
    while(stringBuildingPtr>=0){ 
     if(stringBuildingPtr==stringBuilding.length-3){ 
      stringBuilding[stringBuildingPtr--] = '.'; 
     } else if((stringBuilding.length-stringBuildingPtr-3)%4==0){ 
      stringBuilding[stringBuildingPtr--] = ','; 
     } else { 
      stringBuilding[stringBuildingPtr--] = valueAsString.charAt(valueAsStringPtr--); 
     } 
    } 
    String returnVal = String.copyValueOf(stringBuilding); 
    return returnVal; 
} 

Все это предполагает, что у вас есть целое поле CurrentValue.

Также старайтесь делать это в рабочей нити, чтобы избежать отставания от пользовательского интерфейса, это не должно занять слишком много времени, но все же хорошая идея.

Примечание: для кого-то интересно, почему я решил использовать ints вместо float/double, так как тогда мы представим ошибку, отображающую двоичное представление как десятичное.

Смежные вопросы