2011-12-31 3 views
5

У меня есть обычное уведомление тоста, у которого есть изображение и текст. Пользовательский тост прекрасно работает, но мне интересно, как сделать свой собственный тост наследовать тосты по умолчанию? Я хочу, чтобы он выглядел как по умолчанию с красивыми закругленными углами и границами.Android: Пользовательский Toast Notification Inherit Default Toast

Это то, что мой пользовательский тост выглядит.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toast_layout_root" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:background="#DAAA"> 
    <ImageView android:id="@+id/chatIcon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="10dp" 
     android:src="@drawable/ic_chat"/> 
    <TextView android:id="@+id/text" 
     android:text="@string/unread_message_toast" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:textColor="#FFF" 
       /> 
</LinearLayout> 

ответ

6

я использую это в одном из моих приложений. Измените несколько вещей вокруг, и это должно сработать и для вас.

Toast ImageToast = new Toast(getBaseContext()); 
       LinearLayout toastLayout = new LinearLayout(
         getBaseContext()); 
       toastLayout.setOrientation(LinearLayout.HORIZONTAL); 
       ImageView image = new ImageView(getBaseContext()); 
       image.setImageResource(R.drawable.easter_egg); 
       toastLayout.addView(image); 
       ImageToast.setView(toastLayout); 
       ImageToast.setDuration(Toast.LENGTH_SHORT); 
       ImageToast.show(); 
+0

Это здорово! Очень гибкий. Это можно использовать повторно, не добавляя эти макеты XML и управляющие идентификаторы элементов. Раньше я использовал метод инфлятора - не так просто повторное использование. +1 – iozee

+1

Это похоже, что больше не работает. Выдает исключение: java.lang.RuntimeException: этот тост не был создан с помощью Toast.makeText() – Silmarilos

0

Попробуйте

<style name="Themename" parent="android:Theme.dialog"> 

из developer.android.com/guide/topics/ui/themes.html

0

Просьба под кодом.

Надуйте представление из макета XML и назовите его как inflated_xml_view.

Toast toastView = new Toast(this); 
    toastView.setView(inflated_xml_view); 
    toastView.setDuration(Toast.LENGTH_LONG); 
    toastView.setGravity(Gravity.CENTER, 0,0); 
    toastView.show(); 
+0

Спасибо за ваш ответ, извините, что я не вернулся с вами. Я попробую сегодня вечером и награду победителя. – EpicOfChaos

1

Чтобы получить фон по умолчанию с хорошими закругленными углами (на леденец) используют:

android:background="@android:drawable/toast_frame" 

или

android:background="?android:attr/toastFrameBackground" 

Это даст фон Тост в зависимости от версии Android , если вы хотите получить последние данные, я предлагаю найти файл toast_frame.9.png под ..sdk \ platform \ android- [й версии] \ данные \ Рез \ drawable- [плотность]

Стиль текста:

android:textAppearance="@android:style/TextAppearance.Toast" 
    android:textColor="@android:color/bright_foreground_dark" 
    android:shadowColor="#BB000000" 
    android:shadowRadius="2.75" 

Источник: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/transient_notification.xml