Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明

Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失。信息可以是简单的文本,也可以是复杂的图片及其他内容(显示一个view)。

 

1.简单用法


Toast.makeText(midlet.getApplicationContext(), "用户名不能为空", Toast.LENGTH_LONG).show();


2.自定义显示位置效果


代码

toast = Toast.makeText(getApplicationContext(),
     "自定义位置Toast", Toast.LENGTH_LONG);
   toast.setGravity(Gravity.CENTER, 0, 0);
   toast.show();

 

3.带图片效果


 

代码

toast = Toast.makeText(getApplicationContext(),
     "带图片的Toast", Toast.LENGTH_LONG);
   toast.setGravity(Gravity.CENTER, 0, 0);
   LinearLayout toastView = (LinearLayout) toast.getView();
   ImageView imageCodeProject = new ImageView(getApplicationContext());
   imageCodeProject.setImageResource(R.drawable.icon);
   toastView.addView(imageCodeProject, 0);
   toast.show();

 

三、常量

 

       int  LENGTH_LONG

 持续显示视图或文本提示较长时间。该时间长度可定制。

       参见

              setDuration(int)

 

int  LENGTH_SHORT

持续显示视图或文本提示较短时间。该时间长度可定制。该值为默认值。

       参见

              setDuration(int)

 

  四、构造函数

 

       public Toast (Context context)

       构造一个空的 Toast 对象。在调用 show() 之前,必须先调用 setView(View)

(译者注:只有使用setView(View)的时候,才使用new Toast(Content content)来得到Toast对象,否则必须用makeText()方法来创建toast对象,并且这种方式获得Toast对象不能使用setText()方法。

       参数

              context     使用的上下文。通常是你的  Application   Activity  对象。  

 

  五、公共方法

 

public int cancel()

     如果视图已经显示则将其关闭,还没有显示则不再显示。一般不需要调用该方法。正常情况下,视图会在超过存续期间后消失。

 

public int getDuration()

返回存续期间

       请参阅

              setDuration(int)

public int getGravity()

     取得提示信息在屏幕上显示的位置。

    

Gravity

setGravity()

 

public float getHorizontalMargin()

返回横向栏外空白。

 

public float getVerticalMargin()

返回纵向栏外空白。

 

public ViewgetView()

返回 View 对象。

    

setView(View)

 

public int getXOffset()

返回相对于参照位置的横向偏移像素量。

        Toast msg = Toast.makeText(Main.this, "Message", Toast.LENGTH_LONG);         msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);         msg.show();

 

public int getYOffset()

返回相对于参照位置的纵向偏移像素量。

 

public static ToastmakeText(Context context, int resId, int duration)

生成一个从资源中取得的包含文本视图的标准 Toast 对象。

    参数

context

使用的上下文。通常是你的ApplicationActivity对象。

resId

要使用的字符串资源ID,可以是已格式化文本。

duration

该信息的存续期间。值为LENGTH_SHORTLENGTH_LON

      异常

      当资源未找到时抛异常Resources.NotFoundException

 

public static ToastmakeText(Context context, CharSequence text, int duration)

生成一个包含文本视图的标准 Toast 对象。

    参数

context

使用的上下文。通常是你的ApplicationActivity对象。

resId

要显示的文本,可以是已格式化文本。

duration

该信息的存续期间。值为LENGTH_SHORTLENGTH_LONG

   

public void setDuration(int duration)

设置存续期间。//注意:设置过大不起作用,duration的实际可用最大值为3500,即最多只能显示3.5s

    

LENGTH_SHORT

LENGTH_LONG

 

public void setGravity(int gravity, int xOffset, int yOffset)

设置提示信息在屏幕上的显示位置。

(译者注:自定义Toast的显示位置,例如toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)可以把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移,小于0向左移

    

Gravity

getGravity()

 

public void setMargin(float horizontalMargin, float verticalMargin)

设置视图的栏外空白。

    参数

        horizontalMargin         容器的边缘与提示信息的横向空白(与容器宽度的比)。

           verticalMargin             容器的边缘与提示信息的纵向空白(与容器高度的比)。

 

public void setText(int resId)

更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。

    参数

        resId       Toast 指定的新的字符串资源ID

 

public void setText(CharSequence s)

更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。

    参数

        s    Toast 指定的新的文本。

 

public void setView(View view)

设置要显示的 View 

(译者注:注意这个方法可以显示自定义的toast视图,可以包含图像,文字等等。是比较常用的方法。

    

getView()

 

public void show()

按照指定的存续期间显示提示信息。


接下来我就教大家用最简单的方式自定义toast布局吧。

   首先加载一个自定义的布局

     LayoutInflater inflater = context.getLayoutInflater();

     View view=inflater.inflate(R.layout.toast_info, null);

    然后找到里面的控件,以单纯的textview为例

   TextView txt=(TextView) view.findViewById(R.id.txt_tips);

   接下接下来就是给textview设置信息

       txt.setText(info);


最重要的就是下面了,把布局引用到toast当中


获得toast

Toast toast=new Toast(context);


设置toast显示的位置                

toast.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM, 0, 80);


设置弹出显示的时间

toast.setDuration(time);


设置布局

toast.setView(view);


最后一步,show出来

toast.show();


亲们!是不是很简单的呢?  以后你们就可以用帅气的toast的信息啦,远离矮矬穷,这就是我们奋斗的目标

Toast自定义布局,通俗易懂 - Gobby.X - Just Miss.Gobby

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先需要了解一下 Android 中通知的相关知识。Android 中的通知是通过 NotificationManager 来管理的,通知的显示效果是由 Notification 类的实例来控制的。一般情况下,我们可以使用 NotificationCompat 类来构造通知,可以兼容不同版本的 Android 系统。 接下来,我们来介绍一下如何通过自定义 Toast 实现悬浮通知效果: 1. 首先,在 AndroidManifest.xml 文件中添加权限声明: ```xml <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> ``` 2. 在代码中创建自定义Toast 类,并重写其 onWindowFocusChanged() 方法,用于创建悬浮通知: ```java public class FloatingToast extends Toast { private WindowManager mWindowManager; private View mView; private WindowManager.LayoutParams mParams; public FloatingToast(Context context) { super(context); mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); mView = LayoutInflater.from(context).inflate(R.layout.floating_toast, null); mParams = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); mParams.gravity = Gravity.TOP | Gravity.START; } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { mWindowManager.addView(mView, mParams); } else { mWindowManager.removeView(mView); } } } ``` 3. 在布局文件 floating_toast.xml 中定义悬浮通知的样式: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/floating_toast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bg_floating_toast" android:orientation="horizontal"> <ImageView android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_notification" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一条悬浮通知" /> </LinearLayout> ``` 4. 在 Activity 中使用自定义 Toast 实现悬浮通知: ```java FloatingToast toast = new FloatingToast(this); toast.setDuration(Toast.LENGTH_LONG); toast.setView(LayoutInflater.from(this).inflate(R.layout.floating_toast, null)); toast.show(); ``` 5. 最后,记得在 Activity 的 onDestroy() 方法中销毁自定义 Toast 对象: ```java @Override protected void onDestroy() { super.onDestroy(); if (toast != null) { toast.cancel(); } } ``` 上述代码中的布局文件和相关资源文件可以根据需要自行修改,以实现不同的悬浮通知样式。同时,需要注意的是,由于 Android 8.0 及以上版本对通知权限进行了限制,如果需要在这些系统版本上显示悬浮通知,需要申请权限并设置 targetSdkVersion 为 25 或以下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值