2013-04-17 11 views
6

Chciałbym wyświetlić pewne informacje dla użytkownika, ale nie chcę, aby informacje się odsuwały, dopóki użytkownik nie dotknie innego miejsca lub nie naciśnie przycisku Wstecz. Zdaję sobie sprawę, że oczywistą opcją jest wyświetlenie tekstu w oknie dialogowym (w przeciwieństwie do tostu). Chciałbym, aby mój dialog przypominał system Toast. Rozumiem, że mogę po prostu skopiować układ transient_notification.xml (i jego odpowiednie zasoby), ale ponieważ stylizacja Toast różni się znacznie w zależności od urządzenia i systemu operacyjnego, jest mało prawdopodobne, aby dobrze pasowała.Android: Czy istnieje dobry sposób na utworzenie okna dialogowego Toast?

Czy istnieje dobry sposób na utworzenie okna dialogowego, które dziedziczy stylizację systemu Toast?

+0

toast jest przeznaczony do pracy w ten sposób. Możesz utworzyć niestandardowe okno dialogowe i dostosować je do swoich potrzeb. Mają niestandardowe motywy. Nie powinien stanowić problemu – Raghunandan

Odpowiedz

1

Możesz spróbować Crouton, można go dostosować i można go wyłączyć po dotknięciu.

1

Dwie możliwe sugestie. Jedną z możliwości jest użycie PopupWindow i niestandardowego XML. Nie powinno być zbyt trudne do wdrożenia. Inną opcją może być skorzystanie z systemu zastępującego toast znajdującego się w projekcie Open Source Crouton (https://github.com/keyboardsurfer/Crouton). Zasadniczo oferuje bardziej estetyczny interfejs użytkownika i wiem, jakie opcje czeka użytkownik, aby kliknąć przed zwolnieniem. Możesz pobrać ich wersję demo w sklepie Play.

3

lub można użyć

sposób niestandardowy niestandardowy układ do wyświetlania toast

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

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

firmy T O to wykorzystać zadzwoń

Utils.customToast("Just a test to see if toast is working!\nPerfect"); 

EDIT Mam zmodyfikował metodę trochę. Teraz nie stworzy kolejki tostów i zostanie odrzucony na dotyk, tak jak normalny tost.

Jeśli ktokolwiek może to poprawić, prosimy, aby to zrobić :)

Powiązane problemy