android dp转px的公式_Android特效专辑——自定义不一样的Toast
大家都知道,Android的控件有时候很难满足我们的需求,所以我们需要自定义View。自定义的方式很多,有继承原生控件也有直接自定义View的,今天写的是自定义的Toast,当然,这个不是复写Toast,是换一种表达形式,哈哈,后续会增加自定义View的方方面面
先来看看效果图吧
是不是挺好看的,如果你看过Toast的源码就会知道,他主要是用了WindowManager,我们也直接来写一个
TabToast
package com.lgl.toast;import android.content.Context;import android.text.TextUtils;import android.util.DisplayMetrics;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class TabToast {/** * Toast字体大小 */private static final float DEFAULT_TEXT_SIZE = 14;/** * Toast字体颜色 */private static final int DEFAULT_TEXT_COLOR = 0xffffffff;/** * Toast背景颜色 */private static final int DEFAULT_BG_COLOR = 0xE6f5695a;/** * Toast的高度(单位dp) */private static final float DEFAULT_TOAST_HEIGHT = 50.0f;private static Context mContext;private volatile static TabToast mInstance;private static Toast mToast;private View layout;private TextView tv;public TabToast(Context context) {mContext = context;}/** * 单例模式 * * @param context * 传入的上下文 * @return TabToast实例 */private static TabToast getInstance(Context context) {if (mInstance == null) {synchronized (TabToast.class) {if (mInstance == null) {mInstance = new TabToast(context.getApplicationContext());}}}return mInstance;}private static void getToast(int duration) {//设置位置int gravity, int xOffset, int yOffsetif (mToast == null) {mToast = new Toast(mContext);mToast.setGravity(Gravity.BOTTOM, 0, 0);//设置显示时间mToast.setDuration(duration == Toast.LENGTH_LONG ? Toast.LENGTH_LONG: Toast.LENGTH_SHORT);}}public static void makeText(Context context, String text) {makeText(context, text, Toast.LENGTH_SHORT);}public static void makeText(Context context, String text, int duration) {getInstance(context);getToast(duration);if (mInstance.layout == null || mInstance.tv == null) {LinearLayout container = new LinearLayout(mContext);LinearLayout.LayoutParams rootParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);container.setLayoutParams(rootParams);container.setBackgroundColor(DEFAULT_BG_COLOR);container.setGravity(Gravity.CENTER);mInstance.tv = new TextView(mContext);LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(getScreenWidth(mContext), dp2px(DEFAULT_TOAST_HEIGHT));mInstance.tv.setLayoutParams(tvParams);mInstance.tv.setPadding(dp2px(5), dp2px(2), dp2px(5), dp2px(2));mInstance.tv.setGravity(Gravity.CENTER);mInstance.tv.setTextColor(DEFAULT_TEXT_COLOR);mInstance.tv.setMaxLines(2);mInstance.tv.setEllipsize(TextUtils.TruncateAt.END);mInstance.tv.setBackgroundColor(DEFAULT_BG_COLOR);mInstance.tv.setTextSize(DEFAULT_TEXT_SIZE);container.addView(mInstance.tv);mInstance.layout = container;mToast.setView(mInstance.layout);}mInstance.tv.setText(text);mToast.show();}/** * dp转px * * @param value * dp * @return px */public static int dp2px(float value) {float scale = mContext.getResources().getDisplayMetrics().density;return (int) (value * scale + 0.5f);}/** * 获得屏幕宽度 * * @param context * Context * @return px */public static int getScreenWidth(Context context) {WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(outMetrics);float density = outMetrics.density;return (int) (outMetrics.widthPixels * density);}}
然后直接调用就可以了
TabToast.makeText(MainActivity.this, "自定义Toast");
Demo下载地址:http://download.csdn.net/detail/qq_26787115/9391760
android dp转px的公式_Android特效专辑——自定义不一样的Toast相关推荐
- android dp转px的公式_dp和px换算公式
dp = dip : device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不 ...
- android dp转px的公式_公式px到dp,dp到px android
注意:上面广泛使用的解决方案基于displayMetrics.density.但是,文档解释说这个值是一个舍入值,与屏幕"桶"一起使用.例如.在我的Nexus 10上,它返回2,其 ...
- Android dp转px,sp转px
/*** 将dip或dp值转换为px值,保证尺寸大小不变*/ public static int dip2px(Context context, float dipValue) {final floa ...
- Android dp与px的转换
密度类型 代表的-------分辨率(px) 屏幕密度(dpi) 换算(px/dp) 比例 低密度(ldpi)---------- 240x320------- 120 --------------- ...
- Android的计量单位px,in,mm,pt,dp,dip,sp
px :是屏幕的像素点 in :英寸 mm :毫米 pt :磅,1/72 英寸 dp :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px dip :等 ...
- 设计中涉及到的dip、dp、px、sp等单位说明
在进行UI设计中常会遇到各种数值单位,开始使用时也常搞混,于是搜集了单位解说的文章与大家一同分享 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效 ...
- dp和px的区别,dp与px换算关系
一.首先要认识下:屏幕密度ppi ppi pixles percent inch 每英寸的像素数 ppi = 水平方向的像素数 / 屏幕宽度 例如:3.7in 480 x 800 ...
- android 字体像素转换工具类_android px,dp,sp大小转换工具
package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类 * * float s ...
- android分辨率px跟dp,Android屏幕适配 px,dp,dpi及density的关系与深入理解
PX(pixel): 即传统计算机语言中描述的像素,在Android则代表绝对像素. 之所以Android中不推荐使用这种单位,正是因为不同生产厂商,不同品牌,不同屏幕的设备,其分辨率亦不一. 举例来 ...
最新文章
- GitHub 标星 2.5K+,U^2-Net 跨界肖像画,完美复刻人物细节!
- Java获取数据库表的字段信息,及如何将ResultSet转为json
- Java游戏地下城_地下城与勇士DNF-鬼剑士
- 事物的开始和结束命令分别是什么_人教版小学四年级语文下册期末测试题及答案[1]...
- Python学习14 模块和包
- 最小的html5页面,第一个html5+响应式页面
- 如何删除顽固文件或文件夹?
- 一文搞懂移动端单位em、rem、vh、vw
- 格灵深瞳,天才AI公司跌入谷底之后 | 小败局
- SDS(Spoken Dialogue System) 对话系统
- 解决vue项目格式报错问题_@jie
- mac百度网盘加速下载
- includes的使用
- 如何用Python求解微分方程组
- Typora+MarkDown
- ICPC 2018 南京站游记
- python循环里使用len()与计算出len()后速度有区别吗
- 微软人工智能-深度学习框架和工具.md
- Android安卓原生接入微信app支付PHP服务端
- 【B类比赛】 第十一届蓝桥杯 省国赛经历
热门文章
- 十四、Python第十四课——文件和异常
- html和css哪个优先,CSS3 | 样式和优先级
- bugku 杂项 就五层你能解开吗_长春老旧小区加装电梯,你家符合条件吗?_媒体_澎湃新闻...
- c中获取python控制台输出_在真实的tim中用C捕获控制台python打印
- c是过程化语言吗数据库,A.数据库语言B.过程化语言C.宿主语言D.数据库管理系统...
- 怎么用计算机算立方数,计算器的使用方法
- FTP命令:下载,上传FTP服务器中的文件
- 运行shell脚本报错:“syntax error near unexpected token fi 的解决方法
- JDK源码解析之Java.util.Collections
- linux 调优系列