2013-04-17 80 views
6

我想向用戶顯示一些信息,但我不希望信息在用戶點擊其他位置或按下後退按鈕之前解散。我意識到顯而易見的選擇是在對話框中顯示文本(而不是吐司)。我希望我的對話框類似於系統吐司。我認識到我可以複製transient_notification.xml佈局(及其相關資源),但由於Toast樣式因設備和操作系統而異,因此不太可能產生良好的匹配。Android:有沒有一種創建類似Toast的對話框的好方法?

那麼,是否有一種很好的方法來創建一個繼承系統Toast樣式的Dialog?

+0

吐司是爲了這樣工作。您可以創建自定義對話框並根據您的需要進行設置。有自定義主題。不應該是一個問題 – Raghunandan

回答

1

你可能想嘗試Crouton,它的可定製的,可以被解僱的聯繫。

1

兩個可能的建議。一種可能性是使用PopupWindow和自定義XML。不應該太難實施。另一種選擇可能是使用開源項目Crouton(https://github.com/keyboardsurfer/Crouton)中的Toast替換系統。基本上它提供了一個更美觀的用戶界面,我知道的選項等待用戶點擊前解僱。您可以在Play商店下載他們的演示。

3

或者你可以使用自定義佈局

自定義方法來顯示舉杯

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"); 

編輯 我已經修改了的方法一點。現在它不會創建吐司隊列,並且會像普通吐司一樣被解散。

如果其他人可以改善它,請隨時做到這一點:)

相關問題