首页 > 编程知识 正文

android怎样自定义类,top widgets全屏时钟怎么设置

时间:2023-05-03 18:43:06 阅读:108921 作者:2361

Toast是Android中使用频率较高的弹窗提示手段,使用方便。 正常使用方法在此不再赘述,接上一篇博客《Android中Toast全屏显示》,其中展示了如何轻松实现Toast全屏显示,发现无法控制Toast的显示时间。 Toast具有setduration(intduration )接口,但在跟踪代码中,设置的时间不起作用,系统的缺省时间为LENGTH_DURATION=3500毫秒,short 也就是说,不管设置了多长时间,最终只有两个参数影响Toast.LENGTH_LONG和Toast.LENGTH_SHORT。

目前,解决这个问题的方法主要有两种。

1、关于如何利用反射原理,通过控制Toast的show ()和hide ()界面来控制显示时间,请参考博客《利用反射机制控制Toast的显示时间》。 但是,该方法只对Android4.0以下的系统有效,用模拟器实测也是如此。 现在的系统几乎都是安卓4.0以上,这个方法太旧了。

2、WindowManager添加视图)方法动态刷新屏幕,即可查看博客《Android自定义Toast,可设定显示时间》。 该方法已被许多软件用于显示浮动窗口和图像的动态悬浮效果,包括360手机软件和一些手游软件。 在安卓4.0上是个不错的选择。 当然,如果系统遇到默认关闭浮动窗口功能的手机,这一招可能就不灵了。

通过分析Toast的显示原理和弹匣控制逻辑,本人利用Handler和Runnable机制,也成功地在Toast上显示了任意定制时间。 代码根据Toast的全屏显示进行了修改,发布如下。

package com.dls.nltest;

import android.content.Context;

import android.os.Handler;

import Android.util.display metrics;

import android.util.Log;

import android.view.Gravity;

import Android.view.window manager;

import Android.widget.linear layout;

import android.widget.TextView;

import android.widget.Toast;

import Android.widget.linear layout.layout params;

公共类通用类{

privatestaticfinalstringtag=' generic toast ';

privatestaticfinalinttoast _ text size=20;

/* { @ link toast # length _ short } defaulttimeis 3500 ms * /

privatestaticfinalintlength _ short _ time=2000;

privatestaticcontextmcontext=null;

private static Toast mToast=null;

privatestatictextviewmtextview=null;

private static int mDuration=0;

privatestaticcharsequencemtext=null;

privatehandlermhandler=new handler (;

privategenerictoast (上下文上下文)

mContext=context;

}

publicstaticgenerictoastmaketext (上下文上下文,CharSequence text,int duration ) {

generictoastinstance=newgenerictoast (context );

mContext=context;

mDuration=duration;

mText=text;

返回实例;

}

privatestaticvoidgettoast (上下文上下文,CharSequence text ) {

mtoast=toast.maketext(context,null,Toast.LENGTH_LONG );

m toast.set gravity (gravity.center,0,0 );

linearlayouttoastview=(linear layout ) mToast.getView );

//getthescreensizewithunitpixels。

windowmanagerWM=(windowmanager ) context.getsystemservice (context.window _ service );

displaymetricsoutmetrics=newdisplaymetrics (;

wm.getDefaultDisplay ().getmetrics ) outmetrics;

mtextview=newtextview(context );

layoutparamsvlp=newlayoutparams (out metrics.width pixels,

outMetrics.heightPixels;

VLP.set margins (0,0,0,0 );

mtextview.setlayoutparams(VLP;

m textview.settext size (toast _ text size );

mtextview.settext(text );

m textview.set gravity (gravity.center );

toastview.addview(mtextview;

}

//*

* Before call this method,you should call {@link makeText}。

*

* @return Toast display duration。

*/

公共获取冗馀

返回m duration;

}

公共void show () }

log.d(tag,' Show custom toast ' );

Mandler.post(showrunnable;

}

公共语音() {

log.d(tag,' Hide custom toast ' );

mDuration=0;

if(mtoast!=null ) {

mToast.cancel (;

}

}

privaterunnableshowrunnable=new runnable {

@Override

公共语音运行(}

if(mtoast!=null ) {

mtextview.settext(mtext );

}else{

gettoast(mcontext,mText );

}

if(mduration )!=0}{

mToast.show (;

}else{

log.d(tag,' Hide custom toast in runnable ' );

hide (;

返回;

}

mdurationlength _ short _ time (if ) {

mhandler.post delayed (show runnable,LENGTH_SHORT_TIME );

mDuration -=LENGTH_SHORT_TIME;

}else{

mhandler.post delayed (show runnable,mDuration;

mDuration=0;

}

}

(;

}

Toast弹匣10s,测试代码如下。

generictoastmgtoast=generic toast.maketext (this,' I am generic toast ',10 * 1000 );

mGToast.show (;

如果需要结束弹夹,只需在需要的地方调用hide ()。

以上是本文的全部内容,希望对大家的学习有帮助。 另外,我希望你能多多支持编剧。

感兴趣的文章:安卓自定义Toast设置显示时间

使用反射机制控制Toast的显示时间

安卓定制Toast显示时间

安卓开发技术的永不关闭的Toast消息框(长时间显示而不是关闭系统) )。

Toast类如何避免显示时间重复

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。