展会信息港展会大全

自定义一个Toast(技巧)
来源:互联网   发布日期:2015-10-03 11:20:01   浏览:1346次  

导读:自定义一个Toast要实现这样的效果:缀用下面的代码:LayoutInflater inflater = LayoutInflater.from(this);嘀椀攀眀 ...

自定义一个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();

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

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@null" >

<RelativeLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="24dp"

android:layout_marginRight="24dp"

android:background="@drawable/book_reading_toast_bg"

android:gravity="center"

android:orientation="vertical"

android:paddingBottom="37dp"

android:paddingTop="39dp" >

<TextView

android:id="@+id/chapterName"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:ellipsize="end"

android:gravity="center"

android:singleLine="true"

android:text="第八百张鲤鱼跳龙门"

android:textColor="#ffffff"

android:textSize="20sp" />

<TextView

android:id="@+id/percentage"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/chapterName"

android:layout_centerHorizontal="true"

android:layout_marginTop="8dp"

android:gravity="center"

android:text="45%"

android:textColor="#ffffff"

android:textSize="16sp" />

</RelativeLayout>

</LinearLayout>

借助于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));

} www.2cto.com

}

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

book_reading_toast_bg .xml

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" >

<solid android:color="#aa000000" />

<corners android:radius="10dp" />

<padding

android:bottom="5dp"

android:left="5dp"

android:right="5dp"

android:top="5dp" />

</shape>

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港