自定义一个Toast(技巧)

自定义一个Toast

要实现这样的效果:





使用下面的代码:

		LayoutInflater inflater = LayoutInflater.from(this);
		View view = inflater.inflate(R.layout.book_reading_seekbar_toast, null);
		TextView chapterNameTV = (TextView) view.findViewById(R.id.chapterName);
		TextView percentageTV = (TextView) view.findViewById(R.id.percentage);
		chapterNameTV.setText(chapterName);
		percentageTV.setText(df.format(persent * 100) + "%");
		
		Toast toast = new Toast(this);
		toast.setGravity(Gravity.BOTTOM, 0, PixelFormat.formatDipToPx(this, 70));
		toast.setDuration(Toast.LENGTH_LONG);
		toast.setView(view);
		toast.show();

就可以实现这样的效果,但是还不够!得借助于布局:




    

        

        
    

借助于LInearLayout,把布局撑开,然后借助于里面的RelativeLayout 调整布局参数!打到最终效果!



但是这样还存在一个问题:虽然效果可以一样,但是有时候有些东西在代码中设置比较方便!所以要使用以上代码中的:

PixelFormat.formatDipToPx(this, 70)

这个的作用是:将美工的切图中的70dp,转换成pix 的值。 这样就可以在不同的屏幕显示相同的效果,可以达到适配所有屏幕!

我把这个转换的方法也发上来吧:

import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;

/**
 * 像素转换类

 */
public class PixelFormat {
	/**
	 * 把dip单位转成px单位
	 * 
	 * @param context
	 *            context对象
	 * @param dip
	 *            dip数值
	 * @return
	 */
	public static int formatDipToPx(Context context, int dip) {
		DisplayMetrics dm = new DisplayMetrics();
		((Activity) context).getWindowManager().getDefaultDisplay()
				.getMetrics(dm);
		return (int) Math.ceil(dip * dm.density);
	}

	/**
	 * 把px单位转成dip单位
	 * 
	 * @param context
	 *            context对象
	 * @param px
	 *            px数值
	 * @return
	 */
	public static int formatPxToDip(Context context, int px) {
		DisplayMetrics dm = new DisplayMetrics();
		((Activity) context).getWindowManager().getDefaultDisplay()
				.getMetrics(dm);
		return (int) Math.ceil(((px * 160) / dm.densityDpi));
	}

}

刚才忘记添加那个圆角了,呵呵,现在加上:
book_reading_toast_bg .xml




    

    

    




这样就很完美了!


这个是讨论的地址:http://www.apkbus.com/android-83241-1-1.html

如果有问题就问吧,我尽力回答!


你可能感兴趣的:(Android)