Hallo zusammen,
ich habe hier ein komplettes Beispiel wo folgendes gemacht wird:
strukturiertes Eingabefenster im XML-Editor
Daten eingegeben im EditText
Zugriff auf die Daten als Zahlenwerte
einfache Berechnungen mit den Daten
Ausgabe der Ergebnisse im EditText
Zugriff auf die Text-Resource aus dem Programm
einfache Plausibilitaetpruefung der Benutzereingaben
Grundlage ist das "Hello World" Programm, das automatisch erzeugt wird. Den Namen habe ich in MyCalcApplication geaendert.
danach die Dateien mit den hier aufgefuerten Code-Schnippseln fuellen.
Die Ausgabe erscheint bei mir im Emulator. Alle Felder (ausser den beiden Eingaben) sind gesperrt. Die beiden Eingabe akzeptieren nur Zahlen, und leider auch eine leere Eingabe, wenn der User den Vorgabewert loescht. Das ist im Programm abgefangen.
Wenn eine des Eingaben angeklickt wird, erscheint ein Softkeyboard mit Zahlen. Fals nicht erscheint unten im Handy-Gehaeuse ein Keyboard-Symbol. Dord druecken und waehlen. Leider habe ich schon vergessen was zu waehlen ist. Bitte probieren.
Ich hoffe, das viele Fragen die ich im Forum lese (oder die ungefragt mitkommen) mit diesem Beispiel beantwortet werden.
Viel Erfolg
MarkNeb
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1">
<!-- diesen Platz erscheint noetig -->
<Space
android:layout_width="20px"
android:layout_height="20px" />
<!-- erste Eingabezeile -->
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:text="Ihre Groesse in cm :"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:textIsSelectable="false"
android:editable="false"
android:clickable="false" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="3"
android:id="@+id/editGroesse"
android:editable="true"
android:clickable="true"
android:enabled="true"
android:text="@string/def_groesse" />
</TableRow>
<!-- zweite Eingabezeile -->
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:text="Ihr Gewicht in kg :"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:editable="false"
android:textIsSelectable="false"
android:clickable="false" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="3"
android:id="@+id/editGewicht"
android:editable="true"
android:clickable="true"
android:enabled="true"
android:text="@string/def_gewicht" />
</TableRow>
<Space
android:layout_width="20px"
android:layout_height="50px" />
<!-- beim Click wird die Funktion RechneBmi aufgerufen siehe MainActivity.java-->
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Berechne"
android:onClick="RechneBmi" />
<!-- Ausgabezeile -->
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:text="Ihr Body-Mass-Index :"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:editable="false"
android:textIsSelectable="false"
android:clickable="false" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="5"
android:id="@+id/editBmi"
android:text=".??."
android:textIsSelectable="false"
android:editable="false"
android:clickable="false" />
</TableRow>
</LinearLayout>
Alles anzeigen
<resources>
<string name="app_name">MyCalc Application</string>
<string name="action_settings">Settings</string>
<string name="def_groesse">160</string>
<string name="def_gewicht">80</string>
</resources>
<!--action_settings kommt im Menue vor, wird hier aber nicht verwendet-->
<!--der string def_groesse MUSS in eine Zahl wandelbar sein, KEINE Buchstaben usw.-->
<!--der string def_gewicht natuerlich auch-->
package com.example.mark.mycalcapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText; // automatisch hinzugefuegt durch Alt+Enter (Cursor steht auf rotem Text)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
// wird beim click des Sendebuttons aufgerufen. Zuordnung ueber den Namen im onClick-parameter
public void RechneBmi(View viev){
int gewicht = 0, groesse = 0, ibmi=0;
double bmi=0.0 ;
String MyText = "1211"; // Class fuer die Rueckgabewerte
// Zugriff auf Zahleneingabe, damit werden die Eingabewerte verfuegbar
EditText Groesse = (EditText) findViewById(R.id.editGroesse);
EditText Gewicht = (EditText) findViewById(R.id.editGewicht);
EditText Bmi = (EditText) findViewById(R.id.editBmi);
// lese Eingaben und pruefe plausibilitaet
// Groesse
MyText = Groesse.getText().toString(); // hier steht die Eingabe als Text
if (MyText.isEmpty()) { // User loescht die Vorgabe, dann gaebe es Aerger bei der Umwandlung
MyText = "0";
groesse = 0;} // hier wird die nachfolgende Abfrage ausgenutzt
else groesse = Integer.valueOf(MyText); // hier wird die User-Eingabe verwendet
if (groesse < 100 || groesse > 250) {
MyText = getString(R.string.def_groesse); // Zugriff auf Text-Resource
Groesse.setText(MyText); // schreibe zurueck ins Zahlenfeld
groesse = Integer.valueOf(MyText); // korrigiere Zahlenwert
};
// Gewicht
MyText = Gewicht.getText().toString();
if (MyText.isEmpty()) {
MyText = "0";
gewicht =0;}
else gewicht = Integer.valueOf(MyText);
if (gewicht < 40 || gewicht > 400) {
MyText = getString(R.string.def_gewicht); // Zugriff auf Text-Resource
Gewicht.setText(MyText); // schreibe zurueck ins Zahlenfeld
gewicht = Integer.valueOf(MyText); // korrigiere Zahlenwert
};
// valueOf() wandelt alles siehe http://developer.android.com/reference/java/lang/String.html
//rechne
bmi = gewicht * 100.0 * 100.0 / (groesse * groesse); // hier steht bmi als double
ibmi = (int) (bmi*100.0); // begrenzung auf zwei Nachkommastellen
bmi = ibmi /100.0;
//ausgabe
Bmi.setText(Double.toString(bmi)); // wandeln in string und zuweisen in Ausgabe
}
}
Alles anzeigen