Problèmes de calculatrice - Programmation Android
-
12-11-2019 - |
Question
J'essaie de concevoir une calculatrice simple pour une utilisation comme tableau de bord pour un jeu ou deux. En fin de compte, je veux pouvoir sélectionner le nombre de joueurs, que de nombreux trackers de score apparaissent à l'écran, de pouvoir utiliser la calculatrice tactile pour ajouter ou soustraire (ou diviser ou multiplier), je l'ai fait fonctionner pour le plus partie.
Actuellement, il prend le texte entré dans l'affichage de la calculatrice, ajoute / soustrait / quel que soit le score du joueur que je choisis.
Le problème est d'essayer d'obtenir les touches numériques pour s'afficher dans la partie d'affichage de la calculatrice. Par exemple, je veux pouvoir frapper "1" puis "0" et faire apparaître "10" dans la calculatrice. Cela aurait dû être facile, car je suis en mesure de saisir le texte manuellement (en utilisant le clavier par défaut Android), mais le plus proche possible est que pour un seul numéro apparaît à la fois ...
Pour faire court, j'essaie de faire fonctionner et afficher les boutons numériques de la calculatrice de type tactile. Vous trouverez ci-dessous mon code de projet principal. Si vous avez besoin de mon code de mise en page, je peux également le publier (pour des références aux ID).
Je sais que c'est probablement une solution simple, mais chaque tutoriel que je trouve est trop compliqué ou ne fonctionne pas ... toute aide est grandement appréciée!
package com.MCalculator8.test;
import com.MCalculator8.test.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MCalculator8Activity extends Activity {
private EditText player1name;
private EditText player2name;
private EditText player3name;
private EditText player4name;
private EditText player5name;
private EditText player6name;
private EditText player7name;
private EditText player1score;
private EditText player2score;
private EditText player3score;
private EditText player4score;
private EditText player5score;
private EditText player6score;
private EditText player7score;
private EditText input;
private TextView operator;
private MCalculator8Activity mContext;
// Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.main);
player1name = (EditText) findViewById(R.id.player1name);
player2name = (EditText) findViewById(R.id.player2name);
player3name = (EditText) findViewById(R.id.player3name);
player4name = (EditText) findViewById(R.id.player4name);
player5name = (EditText) findViewById(R.id.player5name);
player6name = (EditText) findViewById(R.id.player6name);
player7name = (EditText) findViewById(R.id.player7name);
input = (EditText) findViewById(R.id.input);
player1score = (EditText) findViewById(R.id.player1score);
player2score = (EditText) findViewById(R.id.player2score);
player3score = (EditText) findViewById(R.id.player3score);
player4score = (EditText) findViewById(R.id.player4score);
player5score = (EditText) findViewById(R.id.player5score);
player6score = (EditText) findViewById(R.id.player6score);
player7score = (EditText) findViewById(R.id.player7score);
operator = (TextView) findViewById(R.id.operator);
// We create an OnClick Event in each button.
Button plusButton = (Button) findViewById(R.id.add);
Button minusButton = (Button) findViewById(R.id.subtract);
Button multiplyButton = (Button) findViewById(R.id.multiply);
Button player1equals = (Button) findViewById(R.id.player1equals);
Button player2equals = (Button) findViewById(R.id.player2equals);
Button player3equals = (Button) findViewById(R.id.player3equals);
Button player4equals = (Button) findViewById(R.id.player4equals);
Button player5equals = (Button) findViewById(R.id.player5equals);
Button player6equals = (Button) findViewById(R.id.player6equals);
Button player7equals = (Button) findViewById(R.id.player7equals);
plusButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
operator.setText("+");
}
});
minusButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
operator.setText("-");
}
});
multiplyButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
operator.setText("x");
}
});
player1equals.setOnClickListener(new OnClickListener() {
private AlertDialog show;
public void onClick(View arg0) {
if ((input.getText().length() == 0)
|| (input.getText().toString() == " ")) {
// || (input2.getText().length() == 0)
// || (input2.getText().toString() == " ")) {
show = new AlertDialog.Builder(mContext).setTitle("Error")
.setMessage("Some inputs are empty")
.setPositiveButton("OK", null).show();
} else if (operator.getText().equals("")) {
show = new AlertDialog.Builder(mContext).setTitle("Error")
.setMessage("Operator is null").setPositiveButton(
"OK", null).show();
} else if (operator.getText().equals("+")) {
double result = new Double(input.getText().toString())
+ new Double(player1score.getText().toString());
player1score.setText(Double.toString(result));
} else if (operator.getText().equals("-")) {
double result = new Double(player1score.getText().toString())
- new Double(input.getText().toString());
player1score.setText(Double.toString(result));
} else if (operator.getText().equals("x")) {
double result = new Double(input.getText().toString())
* new Double(player1score.getText().toString());
player1score.setText(Double.toString(result));
}
}
});
La solution
Comment est cet exemple?
Voici la classe principale appelée "calculatorexample.java"
package com.calculatorExample;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class CalculatorExample extends Activity implements android.view.View.OnClickListener{
Button add, subtract, multiply, divide;
TextView firstInput, secondInput, output;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Reference TextViews and Buttons
firstInput = (TextView) findViewById(R.id.firstIput);
secondInput = (TextView) findViewById(R.id.secondInput);
output = (TextView) findViewById(R.id.output);
add = (Button) findViewById(R.id.add);
subtract = (Button) findViewById(R.id.subtract);
multiply = (Button) findViewById(R.id.multiply);
divide = (Button) findViewById(R.id.divide);
// Set listeners for when buttons are pressed
add.setOnClickListener(this);
subtract.setOnClickListener(this);
multiply.setOnClickListener(this);
divide.setOnClickListener(this);
}
/**
* Switch statement to decide which button was pressed
*/
public void onClick(View arg0) {
// Get values from top two TextViews
double firstInputValue = Double.parseDouble(firstInput.getText().toString());
double secondInputValue = Double.parseDouble(secondInput.getText().toString());
// Initialise output
double outputValue = 0;
// Perform relevant operations
switch(arg0.getId()){
case R.id.add:
outputValue = firstInputValue + secondInputValue;
break;
case R.id.subtract:
outputValue = firstInputValue - secondInputValue;
break;
case R.id.multiply:
outputValue = firstInputValue * secondInputValue;
break;
case R.id.divide:
outputValue = firstInputValue / secondInputValue;
break;
}
// Add result to Running total stored in output TextView
outputValue += Double.parseDouble(output.getText().toString());
output.setText("" + outputValue);
}
}
Et voici le fichier XML ("main.xml")
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:weightSum="100"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<EditText
android:layout_weight="50"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/firstIput">
</EditText>
<EditText
android:layout_weight="50"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/secondInput">
</EditText>
</LinearLayout>
<LinearLayout
android:weightSum="100"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:layout_weight="50"
android:text="+"
android:id="@+id/add"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:layout_weight="50"
android:text="-"
android:id="@+id/subtract"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
<LinearLayout
android:weightSum="100"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:layout_weight="50"
android:text="X"
android:id="@+id/multiply"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:layout_weight="50"
android:text="/"
android:id="@+id/divide"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
<EditText
android:text="0.0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/output">
</EditText>
</LinearLayout>
Autres conseils
Ne pourriez-vous pas avoir une chaîne que vous pouvez ajouter à chaque fois qu'un bouton sur la calculatrice est enfoncé? Puis mettez à jour l'affichage de la calculatrice avec la nouvelle chaîne?