Мой пользовательский тост Android не показывает текст

Мудрые люди!

Это мой первый вопрос здесь. Я застрял с проблемой, которая казалась мне довольно простой для решения. Я не могу показать собственное сообщение в моем приложении Android.

Я создал два пользовательских макета

  1. my_toast.xml - файл макета

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/toast_layout_root"
    android:layout_width="match_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:layout_marginRight="10dp"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_height="wrap_content">
    
    <TextView
    android:id = "@+id/text"
    android:background="@color/yumist_red"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:paddingBottom="10dp" 
    android:paddingLeft="20dp" 
    android:paddingRight="20dp" 
    android:textColor="#fff"
    android:text = "ToastText"
    android:gravity = "center"
       />

</LinearLayout>

  1. my_toast_up.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/toast_layout_root"
    android:layout_width="match_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:layout_marginRight="10dp"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_height="wrap_content">
    
    
    <ImageView
        android:layout_width="30dp"
        android:layout_height="10dp"
        android:src="@drawable/chat_arrow" 
        android:rotation="180"
        />
    
    <TextView
    android:id = "@+id/text"
    android:background="@color/yumist_red"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:paddingBottom="10dp" 
    android:paddingLeft="20dp" 
    android:paddingRight="20dp" 
    android:textColor="#fff"
    android:text = "ToastText"
    android:gravity = "center"
       />

</LinearLayout>

Единственная разница между ними - это изображение, содержащее изображение стрелки. Я пытаюсь создать тост в стиле пузырькового текста.

Я хорошо могу показать и использовать первый в моем приложении. Но когда я использую второй макет с изображением, все, что я вижу, это изображение и пустой TextView ширины и стандартной высоты ImageView. Я перепробовал много постов и существующих вопросов онлайн, но не могу найти решение этой проблемы.

Любая помощь?

[Java-код для показа тостов]

 public static void showToast(String message, int type)
 { //'message' is the text to display, 'type' determines which of the three toasts is shown
      
      /*
      * There are three fixed toasts:
      * 1. One pointing upwards (with an angle) and placed near the top. (upperNotification)
      * 2. Placed in the default position, to show general messages. (no issues with this | mToast)
      * 3. Placed to point at bar at the bottom. (lowerNotification)
      */
      
      
  TextView textView = null ;            //this will refer to the message TextView 
                                              //corresponding to the toast selected
  Toast toast = null;                   //to refer to the toast to display
  switch(type)
  {
  case MyToast.ARROW_DOWN:textView = lowerToastText; toast = lowerNotification; break;

  case MyToast.ARROW_UP:textView = upperToastText; toast= upperNotification; break;

  case MyToast.ARROW_NONE:textView = toastText; toast = mToast; break;
  }
  if(textView != null && toast != null)
  {
   
   System.out.println(message);
   textView.setText(message);
   toast.show();
  }
  else
  {
   System.out.println("NULL!");
  }
 }

//Below is the code I used to init these.

 public static void setUpToast(Activity activity, LayoutInflater inflater)
 {
  mToast = new Toast(activity);
  upperNotification = new Toast(activity);
  lowerNotification = new Toast(activity);
  
  View layout = inflater.inflate(R.layout.my_toast, null);
  toastText = (TextView) layout.findViewById(R.id.text);
  mToast.setView(layout);
  mToast.setDuration(Toast.LENGTH_LONG);
  
  layout = inflater.inflate(R.layout.my_toast_up, null);
  upperToastText = (TextView) layout.findViewById(R.id.text);
  upperNotification.setView(layout);
  upperNotification.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP, 0, Dish.dpToPx(96, activity));
  upperNotification.setDuration(Toast.LENGTH_LONG);
  
  layout = inflater.inflate(R.layout.my_toast_down, null);
  lowerToastText = (TextView) layout.findViewById(R.id.text);
  lowerNotification.setView(layout);
  lowerNotification.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 0, Dish.dpToPx(48, activity));
  lowerNotification.setDuration(Toast.LENGTH_LONG);
  
 }

1 ответ

Решение

Я разобрался с методом проб и ошибок сам.

В моем макете я сохранил ширину моего TextViews, чтобы соответствовать его родителю. По какой-то причине это привело к уменьшению ширины ImageView.

Я изменил его на WRAP_CONTENT, а родительское представление на MATCH_PARENT, и это исправило мою проблему.

Мне, однако, все еще любопытно, есть ли способ показать текст с шириной родителя.

Другие вопросы по тегам