android toast doesn't fit text

后端 未结 2 732
一向
一向 2021-02-15 03:48

I am developing an application where I have to use numerous toasts.

I display these toasts by using:

Toast.makeText(context, \"Some medium-sized text\",          


        
相关标签:
2条回答
  • 2021-02-15 04:39

    Using the main idea of this Custom toast in android : a simple example and this Android's Toast default colors and alpha I developed a simple custom Toast that looks like the default one but it wraps the text in multilines.

    I create a simple class with the makeText(context,text,duration) static method, so I had only to replace Toast.makeText with CustomToast.makeText everywhere in my projects.

    Below the code

    CustomToast.java

    public class CustomToast extends Toast{
        /**
         * Construct an empty Toast object.  You must call {@link #setView} before you
         * can call {@link #show}.
         *
         * @param context The context to use.  Usually your {@link Application}
         *                or {@link Activity} object.
         */
        public CustomToast(Context context) {
            super(context);
        }
    
        public static Toast makeText(Context context, CharSequence text, int duration) {
            Toast t = Toast.makeText(context,text,duration);
            LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            View layout = inflater.inflate(R.layout.custom_toast,null);
    
            TextView textView = (TextView) layout.findViewById(R.id.text);
            textView.setText(text);
    
            t.setView(layout);
    
    
            return t;
        }
    
    }
    

    The layout layout/custom_toast.xml

     <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/custom_toast_layout_id"
                  android:background="@android:drawable/toast_frame"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:orientation="horizontal"
                  android:gravity="center_horizontal|center_vertical"
                  android:padding="5dp" >
    
        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_gravity="center_horizontal|center_vertical"
            android:layout_height="wrap_content"
            android:singleLine="false"
            android:layout_weight="1"
            android:textAppearance="@android:style/TextAppearance.Small"
            android:textColor="@android:color/background_light"
            android:shadowColor="#BB000000"
            android:shadowRadius="2.75"/>
    
    </LinearLayout>
    
    0 讨论(0)
  • 2021-02-15 04:40

    Try inserting a carriage-return and line-feed where you want to split the text.

    These characters refer back to the old typewriter models. Carriage return was the cylinder moving back to the start and line feed was the cylinder rolling (feeding) by one line.

    In computing these are represented by two escaped characters (special codes that allow non-printable codes inside a string by prefixing them with a backslash \).

    • A carriage return is represented by \r
    • A line-feed is represented by \n (you can remember this as a new line).

    Some non-unix systems (e.g. Windows) require both, others (e.g Linux on which Android is based) only need the new line but it is generally safe to do both everywhere. The one thing that is essential is the order they are in. It must be \r\n

    To put this into your example:

    Toast.makeText(context, "First line of text\r\nSecond line of text", Toast.LENGTH_SHORT).show();
    

    In Android you should be able to reduce this to just the new line character \n as unix based systems are not so fussy:

    Toast.makeText(context, "First line of text\nSecond line of text", Toast.LENGTH_SHORT).show();
    
    0 讨论(0)
提交回复
热议问题