Sie geben die Anpassung der gesamten Anwendung unter dem Android-Betriebssystem !!!
Mit diesem Slogan möchte ich heute über das Anpassen einer Popup-Nachricht (Toast) im Android-Betriebssystem berichten. In jeder Anwendung, die mit größter Sorgfalt entworfen und entwickelt wurde, kann die Frage auftauchen, selbst ein solches Element wie eine Popup-Nachricht anzupassen. Denn der Erfolg von Anwendungen hängt nicht nur von der Idee und Nützlichkeit ab, sondern auch von der Umsetzung des Erscheinungsbildes selbst kleinster und scheinbar unwichtiger Details. Was können wir über Anwendungen mit auffälligem Design sagen?
Projektstruktur
In dieser Lektion wird vorgeschlagen, eine Anwendung zu schreiben, die eine angepasste Popup-Nachricht auf dem Bildschirm anzeigt, wenn eine Schaltfläche gedrückt wird, die nicht angepasst werden kann.
Es gibt zwei Klassen im Projekt:
- Hauptaktivität
- MyListAdapter - der für die Übergabe von Daten an das Listenelementformular verantwortlich ist
Das Projekt enthält außerdem die folgenden Ressourcendateien:
- activity_main.xml
- toast_info.xml – Markup für Popup-Meldungen
- toast_border:xml - zusätzliches Markup für den Hintergrund der Popup-Nachricht
- ic_info.png – ein Bild eines Informationssymbols, das in einer Popup-Nachricht verwendet wird
- string.xml - Datei mit String-Konstanten
Bildet das Markup der Anwendung
activity_main.xml
Markup der Hauptaktivität, von wo aus die Popup-Nachricht aufgerufen wird
<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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:background="#ffffff" android:orientation="vertical"> <TextView android:text="@string/check_toast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/push_me" android:id="@+id/button" android:layout_gravity="center_horizontal" android:textSize="30sp"/> </LinearLayout>
toast_info.xml
Toast-Markup-Datei. Diese Datei definiert das Layout von zwei Elementen:
- ImageView - in dem das Bild des Informationssymbols platziert wird;
- TextView - das Element, in dem der Text der Nachricht platziert wird.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="240dp" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="8dp" android:layout_gravity="center_horizontal" android:background="@drawable/toast_border"> <ImageView android:id="@+id/imageView1" android:src="@mipmap/ic_info" android:padding="4dp" android:layout_width="48dp" android:layout_height="48dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_gravity="center_vertical" android:contentDescription="ToastPicture" /> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:maxWidth="260dp" android:layout_height="wrap_content" android:layout_margin="8dp" android:text="Android Tutorial Custom Toast" android:textColor="#fff" android:textSize="24sp" android:layout_gravity="center_vertical"/> </LinearLayout>
toast_border.xml
Eine XML-Datei, die das Rendern des Rahmens und das Abrunden der Ecken der Popup-Nachricht konfiguriert.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <padding android:left="8dp" android:top="8dp" android:right="8dp" android:bottom="8dp" /> <corners android:radius="10dp" /> <solid android:color="#661f1f21"/> </shape>
Hauptprojektklasse - MainActivity.java
In dieser Klasse wird die Hauptaktivität des Projekts gestartet, aus der ein angepasster Toast aufgerufen wird.Das Projekt wurde in Android Studio sofort mit einer vorgefertigten Aktivität (Blank Activity Project) erstellt.
Diese Klasse implementiert die OnClickListener-Methode und überschreibt @Override. Bei dieser Methode wird eine Popup-Nachricht aufgerufen, und zwar in einer Zeile.
package ru.evileg.customtoast; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; public class MainActivity extends ActionBarActivity implements View.OnClickListener { private static Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * Инициализация кнопки, по нажатию на которую будет вызываться * всплывающее сообщение */ button = (Button) this.findViewById(R.id.button); button.setOnClickListener(this); } @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); } @Override public void onClick(View v) { /* * Вызов всплывающего сообщения */ CustomToast.makeText(this, R.string.toast_message).show(); } }
CustomToast.java-Klasse
Diese Klasse wird verwendet, um eine angepasste Nachricht zu bilden. Die Essenz der Toast-Anpassung in diesem Lernprogramm besteht darin, die vorhandene Toast-Klasse zu erben, dann Ihr eigenes Markup für die Popup-Nachricht zu initialisieren und das Informationssymbolbild festzulegen. Auch in der Klasse gibt es mehrere Methoden zum Setzen des Textes in der Nachricht. Die Nachricht wird von der geerbten show()-Methode der Toast-Elternklasse aufgerufen, wie in der Auflistung der MainActivity-Klasse gezeigt.
package ru.evileg.customtoast; import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.res.Resources; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; /** * Application FinancialAccounting * Created by EvILeg on 26.07.2015. */ public class CustomToast extends Toast { private static TextView toastText; /** * Construct an empty Toast object. You must call {@link #setView} before you * can call {@link #show}. * * @param context The context to use. Usually your {@link Application} * or {@link Activity} object. */ public CustomToast(Context context) { super(context); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); /* * Производится инициализация разметки всплывающего сообщения, * устанавливается изображение значка информации в всплывающее сообщение */ View rootView = inflater.inflate(R.layout.toast_info, null); ImageView toastImage = (ImageView) rootView.findViewById(R.id.imageView1); toastImage.setImageResource(R.mipmap.ic_info); toastText = (TextView) rootView.findViewById(R.id.textView1); /* * Устанавливается инициализированный внешний вид, * местоположение всплывающего сообщения на экране устройства, * а также длительность существованая сообщения */ this.setView(rootView); this.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0); this.setDuration(Toast.LENGTH_SHORT); } /* * Метод вызова сообщения без установки длительности существования * с передачей сообщению текстовой информации в качестве последовательности * текстовых символов или строки */ public static CustomToast makeText(Context context, CharSequence text) { CustomToast result = new CustomToast(context); toastText.setText(text); return result; } /* * Метод вызова сообщения с установкой длительности существования и * с передачей сообщению текстовой информации в качестве последовательности * текстовых символов или строки */ public static CustomToast makeText(Context context, CharSequence text, int duration) { CustomToast result = new CustomToast(context); result.setDuration(duration); toastText.setText(text); return result; } /* * Метод вызова сообщения без установки длительности существования * с передачей сообщению ID текстового ресурса */ public static Toast makeText(Context context, int resId) throws Resources.NotFoundException { return makeText(context, context.getResources().getText(resId)); } /* * Метод вызова сообщения с установкой длительности существования и * с передачей сообщению ID текстового ресурса */ public static Toast makeText(Context context, int resId, int duration) throws Resources.NotFoundException { return makeText(context, context.getResources().getText(resId), duration); } }
Insgesamt
Wenn beim Studium des Materials keine Probleme und Fehler aufgetreten sind, sollte durch Drücken der Schaltfläche eine Popup-Meldung des folgenden Typs angezeigt werden.
Klicken Sie auf die Schaltfläche, um eine Popup-Meldung anzuzeigen
Und hier ist die Popup-Nachricht