0%

Android开发 自定义Toast样式

默认的Toast有点单调,与项目UI不匹配,自己写了一个。 先定义Layout,:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="111dp"
    android:orientation="horizontal" >

    <ImageView
        android:layout_width="25dp"
        android:layout_height="fill_parent"
        android:src="@drawable/my_toast_left" />

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:background="#CCFFFFFF"
        android:gravity="center"
        android:singleLine="true"
        android:textColor="@color/black"
        android:textSize="31dp" />

    <ImageView
        android:layout_width="25dp"
        android:layout_height="fill_parent"
        android:src="@drawable/my_toast_right" />

</LinearLayout>

有是一个半透明的背景框,上面有一个TextView,左右分开是因为四角是椭圆的。本来中间TextView的背景也是用一张半透明的图片,但发现用了以后,宽度即便改成wrap_content,也不能自动适应了,宽度是背景图片的宽度。 所以现在直接写成白色,再设置一个透明度。 MyToast类继承Toast:

package com.jtang.android.components;

import com.jtang.android.R;

import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


public class MyToast extends Toast {

    public MyToast(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    public static Toast makeText(Context context, CharSequence text, int duration) {
        Toast result = new Toast(context);

        LayoutInflater inflate = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflate.inflate(R.layout.my_toast, null);
        TextView tv = (TextView)v.findViewById(R.id.message);
        tv.setText(text);
        
        result.setView(v);
        //setGravity方法用于设置位置,此处为垂直居中
        result.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
        result.setDuration(duration);
        return result;
    }
    
}