2011-08-11 32 views
20

Tôi đã tạo chủ đề tùy chỉnh cho các hoạt động của mình mà tất cả chúng đều sử dụng. Trong chủ đề, tôi thiết lập android: background, và điều này xảy ra để gây ra bất kỳ hộp thoại hoặc tin nhắn bánh mì nướng trông rất lạ.Nền bánh mì nướng thay đổi để khớp với Chủ đề của Hoạt động

Làm cách nào để ngăn chặn bánh mì nướng và các hộp thoại khác hấp thụ các thuộc tính của chủ đề?

Trả lời

51

Bạn có thể dễ dàng tạo ra bánh mì nướng tùy chỉnh bằng đoạn mã sau:

Toast toast = Toast.makeText(context, resTxtId, Toast.LENGTH_LONG); 
View view = toast.getView(); 
view.setBackgroundResource(R.drawable.custom_bkg); 
TextView text = (TextView) view.findViewById(android.R.id.message); 
/*here you can do anything with text*/ 
toast.show(); 

Hoặc bạn có thể nhanh chóng một bánh mì nướng hoàn toàn tùy chỉnh:

Toast toast = new Toast(context); 
toast.setDuration(Toast.LENGTH_LONG); 

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.custom_layout, null); 
toast.setView(view); 
toast.show(); 

tùy Dialog là một thói quen phức tạp hơn. Nhưng có cách giải quyết tương tự.

+3

Javacadabra Câu trả lời là tốt hơn trong quan điểm của tôi – rubdottocom

+1

Tôi có đọc câu hỏi sai? Nhưng câu hỏi hỏi làm thế nào để ngăn chặn nó khỏi bị tùy chỉnh, và bạn đang nói CÁCH để tùy chỉnh nó? – WORMSS

+0

@WORRMS, bạn nói đúng, nhưng ... Theo như chủ đề được thay đổi, bất kỳ bánh mì nướng nào không áp dụng chủ đề này là bánh mì nướng tùy chỉnh (vì chúng tôi cần "đổi kiểu" lại) – Dmitry

4

đây là ví dụ hoàn chỉnh, được sử dụng cho Bánh mì nướng tùy chỉnh trên các hoạt động.

displayToast

// display customized Toast message 
    public static int SHORT_TOAST = 0; 
    public static int LONG_TOAST = 1; 
    public static void displayToast(Context caller, String toastMsg, int toastType){ 

     try {// try-catch to avoid stupid app crashes 
      LayoutInflater inflater = LayoutInflater.from(caller); 

      View mainLayout = inflater.inflate(R.layout.toast_layout, null); 
      View rootLayout = mainLayout.findViewById(R.id.toast_layout_root); 

      ImageView image = (ImageView) mainLayout.findViewById(R.id.image); 
      image.setImageResource(R.drawable.img_icon_notification); 
      TextView text = (TextView) mainLayout.findViewById(R.id.text); 
      text.setText(toastMsg); 

      Toast toast = new Toast(caller); 
      //toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
      toast.setGravity(Gravity.BOTTOM, 0, 0); 
      if (toastType==SHORT_TOAST)//(isShort) 
       toast.setDuration(Toast.LENGTH_SHORT); 
      else 
       toast.setDuration(Toast.LENGTH_LONG); 
      toast.setView(rootLayout); 
      toast.show(); 
     } 
     catch(Exception ex) {// to avoid stupid app crashes 
      Log.w(TAG, ex.toString()); 
     } 
    } 

toast_layout.xml

<?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/image" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:layout_marginRight="10dp" 
       /> 
    <TextView android:id="@+id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:textColor="#FFF" 
       /> 
</LinearLayout> 
25

Tôi nhận ra câu hỏi đã được trả lời và bài là khá cũ ở giai đoạn này. Tuy nhiên tôi nghĩ tôi sẽ để lại một câu trả lời cho những người gặp phải câu hỏi này.

Tôi chạy vào rắc rối với vấn đề này hôm nay và cách tôi giải quyết nó bằng cách hiển thị các thông điệp Toast của tôi như thế này:

Toast.makeText(getApplicationContext(), "Checking login details...", Toast.LENGTH_SHORT).show(); 

Trái ngược với này (giả sử các tin nhắn đang được gọi là từ bên trong một View) :

Toast.makeText(v.getContext(), "Checking login details...", Toast.LENGTH_SHORT).show(); 

Nó xóa các vấn đề tôi gặp phải. Dù sao hy vọng nó sẽ giúp. Đây là liên kết đến câu hỏi của tôi về chủ đề tương tự.

Toast background color being changed

+1

siêu. cảm ơn!! – OWADVL

+1

nhận xét tuyệt vời, cảm ơn bạn! btw, câu trả lời đầu tiên và được chấp nhận không có tác dụng đối với tôi, nhưng giải pháp của bạn thì không. – middlehut

+1

Cảm ơn, tôi đã có câu hỏi tương tự như OP và điều này làm việc cho tôi tuyệt vời! – deanresin

Các vấn đề liên quan