Letzte Woche hatten wir Validierungsfehler, heute geht es um das Kontaktformular an sich. Ich bin der Meinung, dass jede App ein Kontaktformular haben sollte. Egal ob Verbesserungsvorschlag, Anfrage, Kritik oder Fehlermeldung – der App-Nutzer sollte stets in der Lage sein mit dem Entwickler zu kommunizieren. Ansonsten erfährt man über die schlechten Bewertungen im Play Store, dass irgendwas nicht stimmt…
Ich baue meistens das Layout zu erst, um spätere Funktionen besser ableiten zu können. In diesem Beispiel habe ich mich für ein LinearLayout entschieden. Es ist klein, leicht und einfach in der Anwendung. Außerdem brauchen wir noch folgende Bilder und Zeichenketten.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Validierungsfehler</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="content_Description">Beschreibung</string> <string name="kontakt_name">Dein Name (Rita Rakete)</string> <string name="kontakt_email">Deine e-Mailadresse (rita@rakete.de)</string> <string name="kontakt_message">Deine Nachricht (Die App ist cool, aber...)</string> <string name="kontakt_senden">senden</string> <string name="kontakt_err_name">Dein Name muss mindestens 3 Buchstaben haben!</string> <string name="kontakt_err_mail">Deine e-Mailadresse fehlt oder ist nicht gültig!</string> <string name="kontakt_err_message">Deine Nachricht fehlt!</string> <string name="kontakt_err_send">Die Nachricht konnte nicht gesendet werden:-/</string> <string name="kontakt_info_send">Die Nachricht wurde gesendet!</string> </resources>
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:layout_width="38dp" android:layout_height="38dp" android:contentDescription="@string/content_Description" android:scaleType="fitCenter" android:src="@drawable/kontakt_name" /> <EditText android:id="@+id/kontakt_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:hint="@string/kontakt_name" android:inputType="textPersonName" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:orientation="horizontal" > <ImageView android:layout_width="38dp" android:layout_height="38dp" android:contentDescription="@string/content_Description" android:scaleType="fitCenter" android:src="@drawable/kontakt_mail" /> <EditText android:id="@+id/kontakt_mail" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:hint="@string/kontakt_email" android:inputType="textEmailAddress" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:orientation="horizontal" > <ImageView android:layout_width="38dp" android:layout_height="38dp" android:contentDescription="@string/content_Description" android:scaleType="fitCenter" android:src="@drawable/kontakt_message" /> <EditText android:id="@+id/kontakt_message" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:hint="@string/kontakt_message" android:inputType="textMultiLine" /> </LinearLayout> <Button android:id="@+id/kontakt_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:text="@string/kontakt_senden" android:textColor="@android:color/holo_blue_dark" /> </LinearLayout> </ScrollView>
Das Layout und die Ressourcen haben wir, jetzt fehlt nur noch die Klasse. Die besteht nur aus zwei Methoden:)
In Zeile 67 bis 73 ist noch eine interessante Stelle. Hier rufe ich ein e-Mail-Intent, der die Nachricht versendet.
package de.axxg.validierungsfehler; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class KontaktFragment extends Fragment { private EditText nameET; private EditText mailET; private EditText messageET; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // View holen View v = inflater.inflate(R.layout.kontakt_fragment, container, false); nameET = (EditText) v.findViewById(R.id.kontakt_name); mailET = (EditText) v.findViewById(R.id.kontakt_mail); messageET = (EditText) v.findViewById(R.id.kontakt_message); // Button Button sendBtn = (Button) v.findViewById(R.id.kontakt_btn); sendBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sendMail(); } }); return v; } private void sendMail() { // validieren boolean isValid = true; if(nameET.getText().length() < 3){ nameET.setError(getActivity().getText(R.string.kontakt_err_name)); isValid = false; } if(!android.util.Patterns.EMAIL_ADDRESS.matcher(mailET.getText()).matches()){ mailET.setError(getActivity().getText(R.string.kontakt_err_mail)); isValid = false; } if(messageET.getText().length() < 1){ messageET.setError(getActivity().getText(R.string.kontakt_err_message)); isValid = false; } if(!isValid){ Toast.makeText(getActivity(), getActivity().getText(R.string.kontakt_err_send), Toast.LENGTH_LONG).show(); return; } // alles ist valid!! Intent i = new Intent(Intent.ACTION_SEND); i.setType("message/rfc822"); i.putExtra(Intent.EXTRA_EMAIL, new String[] { "beispiel@axxg.de" }); i.putExtra(Intent.EXTRA_SUBJECT, getActivity().getText(R.string.app_name) + " von " + nameET.getText() + "(" + mailET.getText() + ")"); i.putExtra(Intent.EXTRA_TEXT, messageET.getText().toString()); try { getActivity().startActivity(Intent.createChooser(i, "Mail-Apps:")); nameET.setText(""); mailET.setText(""); messageET.setText(""); Toast.makeText(getActivity(), getActivity().getText(R.string.kontakt_info_send), Toast.LENGTH_LONG).show(); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(getActivity(), getActivity().getText(R.string.kontakt_err_send), Toast.LENGTH_LONG).show(); } } }
Das Ergebnis sieht dann so aus:
Für Faule gibt es hier das fertige Projekt…
Copyright © 2015 AxxG – Alexander Gräsel
Warum kann man keine E-Mails wie Telefonnummern Sperren lassen ??