我想向用戶顯示一些信息,但我不希望信息在用戶點擊其他位置或按下後退按鈕之前解散。我意識到顯而易見的選擇是在對話框中顯示文本(而不是吐司)。我希望我的對話框類似於系統吐司。我認識到我可以複製transient_notification.xml
佈局(及其相關資源),但由於Toast樣式因設備和操作系統而異,因此不太可能產生良好的匹配。Android:有沒有一種創建類似Toast的對話框的好方法?
那麼,是否有一種很好的方法來創建一個繼承系統Toast樣式的Dialog?
我想向用戶顯示一些信息,但我不希望信息在用戶點擊其他位置或按下後退按鈕之前解散。我意識到顯而易見的選擇是在對話框中顯示文本(而不是吐司)。我希望我的對話框類似於系統吐司。我認識到我可以複製transient_notification.xml
佈局(及其相關資源),但由於Toast樣式因設備和操作系統而異,因此不太可能產生良好的匹配。Android:有沒有一種創建類似Toast的對話框的好方法?
那麼,是否有一種很好的方法來創建一個繼承系統Toast樣式的Dialog?
你可能想嘗試Crouton,它的可定製的,可以被解僱的聯繫。
兩個可能的建議。一種可能性是使用PopupWindow和自定義XML。不應該太難實施。另一種選擇可能是使用開源項目Crouton(https://github.com/keyboardsurfer/Crouton)中的Toast替換系統。基本上它提供了一個更美觀的用戶界面,我知道的選項等待用戶點擊前解僱。您可以在Play商店下載他們的演示。
你可以使用這個小部件(沒有Undo按鈕),如下所示。 https://plus.google.com/u/0/+RomanNurik/posts/RA9WEEGWYp6
或者你可以使用自定義佈局
自定義方法來顯示舉杯
public static Toast currentToast;
/**
* Use a custom display for Toasts.
*
* @param message
*/
public static void customToast(String message) {
// Avoid creating a queue of toasts
if (currentToast != null) {
// Dismiss the current showing Toast
currentToast.cancel();
}
//Retrieve the layout Inflater
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//Assign the custom layout to view
View layout = inflater.inflate(R.layout.custom_toast, null);
//Return the application context
currentToast = new Toast(context.getApplicationContext());
//Set toast gravity to center
currentToast.setGravity(Gravity.CENTER | Gravity.CENTER, 0, 0);
//Set toast duration
currentToast.setDuration(Toast.LENGTH_LONG);
//Set the custom layout to Toast
currentToast.setView(layout);
//Get the TextView for the message of the Toast
TextView text = (TextView) layout.findViewById(R.id.text);
//Set the custom text for the message of the Toast
text.setText(message);
//Display toast
currentToast.show();
// Check if the layout is visible - just to be sure
if (layout != null) {
// Touch listener for the layout
// This will listen for any touch event on the screen
layout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// No need to check the event, just dismiss the toast if it is showing
if (currentToast != null) {
currentToast.cancel();
// we return True if the listener has consumed the event
return true;
}
return false;
}
});
}
}
和custom_toast.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dip"
android:background="@drawable/custom_toast_shape">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="@color/blue"
android:textSize="16sp"
android:text="@string/app_name"
/>
<View
android:layout_gravity="center"
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="@color/blue"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:maxEms="15"
android:gravity="center_horizontal"
android:id="@+id/text"
/>
</LinearLayout>
ŧ Ø使用這個就叫
Utils.customToast("Just a test to see if toast is working!\nPerfect");
編輯 我已經修改了的方法一點。現在它不會創建吐司隊列,並且會像普通吐司一樣被解散。
如果其他人可以改善它,請隨時做到這一點:)
吐司是爲了這樣工作。您可以創建自定義對話框並根據您的需要進行設置。有自定義主題。不應該是一個問題 – Raghunandan