Android
Rostat bröd
Sök…
Introduktion
En toast ger enkel feedback om en operation i en liten popup och försvinner automatiskt efter en timeout. Det fyller bara den mängd utrymme som krävs för meddelandet och den aktuella aktiviteten förblir synlig och interaktiv.
Syntax
- Toast makeText (Context context, CharSequence text, int Duration)
- Toast makeText (Context context, int resId, int Duration)
- void setGravity (int gravity, int xOffset, int yOffset)
- void show ()
parametrar
Parameter | detaljer |
---|---|
sammanhang | Det sammanhang som ska visas din Toast i. this används vanligtvis i en aktivitet och getActivity() används vanligtvis i ett fragment |
text | En CharSequence som anger vilken text som ska visas i Toast. Alla objekt som implementerar CharSequence kan användas, inklusive en sträng |
Resid | Ett resurs-ID som kan användas för att tillhandahålla en resurssträng som ska visas i toasten |
varaktighet | Heltalsflagg som representerar hur länge toasten kommer att visas. Alternativ är Toast.LENGTH_SHORT och Toast.LENGTH_LONG |
allvar | Heltal som anger positionen, eller "gravitationen" för toasten. Se alternativ här |
XOffset | Anger den horisontella förskjutningen för toastpositionen |
'Yoffset' | Anger den vertikala förskjutningen för toastpositionen |
Anmärkningar
En rostat bröd ger enkel feedback om en operation i en liten popup. Det fyller bara den mängd utrymme som krävs för meddelandet och den aktuella aktiviteten förblir synlig och interaktiv.
Ett nyare alternativ till Toast är SnackBar. SnackBar erbjuder en uppdaterad visuell stil och gör att användaren kan avvisa meddelandet eller vidta ytterligare åtgärder. Se dokumentationen för SnackBar för mer information.
Officiell dokumentation:
https://developer.android.com/reference/android/widget/Toast.html
Ställ in en rostat bröd
En vanlig toastmeddelande visas längst ner på skärmen i linje i horisontellt centrum. Du kan ändra denna position med setGravity(int, int, int)
. Detta accepterar tre parametrar: en Gravitykonstant, en X-position offset och en y-position offset.
Om du till exempel bestämmer dig för att rostat bröd ska visas i det övre vänstra hörnet kan du ställa in tyngdkraften så här:
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
Visar ett toastmeddelande
I Android är Toast ett enkelt användargränssnitt som kan användas för att ge kontextuell feedback till en användare.
För att visa ett enkelt toastmeddelande kan vi göra följande.
// Declare the parameters to use for the Toast
Context context = getApplicationContext();
// in an Activity, you may also use "this"
// in a fragment, you can use getActivity()
CharSequence message = "I'm an Android Toast!";
int duration = Toast.LENGTH_LONG; // Toast.LENGTH_SHORT is the other option
// Create the Toast object, and show it!
Toast myToast = Toast.makeText(context, message, duration);
myToast.show();
Eller, för att visa en Toast inline, utan att hålla fast vid Toast-objektet kan du:
Toast.makeText(context, "Ding! Your Toast is ready.", Toast.LENGTH_SHORT).show();
VIKTIGT: Se till att show()
metoden anropas från UI-tråden. Om du försöker visa en Toast
från en annan tråd kan exempelvis använda runOnUiThread
metod en Activity
.
Om du inte gör det, vilket innebär att du försöker ändra användargränssnittet genom att skapa en RuntimeException
, kommer det att kasta en RuntimeException
som ser ut så här:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Det enklaste sättet att hantera detta undantag är bara genom att använda runOnUiThread: syntax visas nedan.
runOnUiThread(new Runnable() {
@Override
public void run() {
// Your code here
}
});
Skapa en anpassad toast
Om du inte vill använda standarden Toast-vyn kan du ge din egen med setView(View)
på ett Toast
objekt.
Skapa först den XML-layout som du vill använda i din rostat bröd.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
android:background="#111">
<TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"/>
<TextView android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"/>
</LinearLayout>
När du skapar din rostat bröd, blåsa sedan upp din anpassade vy från XML och ring setView
// Inflate the custom view from XML
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast_layout,
(ViewGroup) findViewById(R.id.toast_layout_root));
// Set the title and description TextViews from our custom layout
TextView title = (TextView) layout.findViewById(R.id.title);
title.setText("Toast Title");
TextView description = (TextView) layout.findViewById(R.id.description);
description.setText("Toast Description");
// Create and show the Toast object
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Trådsäker sätt att visa rostat bröd (Application Wide)
public class MainApplication extends Application {
private static Context context; //application context
private Handler mainThreadHandler;
private Toast toast;
public Handler getMainThreadHandler() {
if (mainThreadHandler == null) {
mainThreadHandler = new Handler(Looper.getMainLooper());
}
return mainThreadHandler;
}
@Override public void onCreate() {
super.onCreate();
context = this;
}
public static MainApplication getApp(){
return (MainApplication) context;
}
/**
* Thread safe way of displaying toast.
* @param message
* @param duration
*/
public void showToast(final String message, final int duration) {
getMainThreadHandler().post(new Runnable() {
@Override
public void run() {
if (!TextUtils.isEmpty(message)) {
if (toast != null) {
toast.cancel(); //dismiss current toast if visible
toast.setText(message);
} else {
toast = Toast.makeText(App.this, message, duration);
}
toast.show();
}
}
});
}
Kom ihåg att lägga till MainApplication
i manifest
.
Nu kan du ringa det från valfri tråd för att visa ett toastmeddelande.
MainApplication.getApp().showToast("Some message", Toast.LENGTH_LONG);
Visa rostat brödmeddelande ovanför mjukt tangentbord
Som standard visar Android Toast-meddelanden längst ner på skärmen även om tangentbordet visas. Detta visar ett Toast-meddelande precis ovanför tangentbordet.
public void showMessage(final String message, final int length) {
View root = findViewById(android.R.id.content);
Toast toast = Toast.makeText(this, message, length);
int yOffset = Math.max(0, root.getHeight() - toast.getYOffset());
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, yOffset);
toast.show();
}
Trådssäkert sätt att visa ett rostat brödmeddelande (för AsyncTask)
Om du inte vill förlänga applikationen och hålla dina toastmeddelanden säkra i tråden, se till att du visar dem i avsnittet för exekvering av posten i dina AsyncTasks.
public class MyAsyncTask extends AsyncTask <Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// Do your background work here
}
@Override
protected void onPostExecute(Void aVoid) {
// Show toast messages here
Toast.makeText(context, "Ding! Your Toast is ready.", Toast.LENGTH_SHORT).show();
}
}