Android: Einfaches Kontaktformular

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…

 

Die Ressourcen

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.

Bilder

Strings

<?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>

Das Layout

<?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>

 

Die Klasse

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

Das Ergebnis sieht dann so aus:

 

Download

Für Faule gibt es hier das fertige Projekt…

Android Version 4.0.3 Inhalt gepacktes Projekt
Android Support Library Version V4 (Version 21) Größe 871 KB (~1 MB)
IDE Eclipse IDE Version 4.2.1 Endung *.zip
Preis kostenlos Lizenz Creative Commons Lizenzvertrag

Android Kontakt Beispiel

 

Copyright © 2015 AxxG – Alexander Gräsel



Kommentar verfassen