Android顶部弹出提示的两种实现方式

标签: Toast Android PopWindow 弹出提示 Toast宽高设置
6人阅读 评论(0) 收藏 举报
分类:

先给大家上一张效果图:



越来越多的APP提示越来越花哨,有中间的,有顶部的,有底部的,滑动滑出的,淡入淡出的,今天就先给大家做一个简单的顶部弹出提示效果

其实这是一个很简单的功能,做起来也并不复杂,我们先看使用Toast如何实现


第一种:Toast实现

布局文件layout_toast:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:background="#ff4959"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/test"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/txtToastMessage"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="测试测试"
            android:textColor="#ffffff"
            android:textSize="18sp" />
    </LinearLayout>

</LinearLayout>

就一个简单的文本嵌套,就不多说了

然后我们再看Java代码实现

if (mToast == null) {
    mToast = new Toast(mContext);
}
mToast.setDuration(Toast.LENGTH_SHORT);
mToast.setGravity(Gravity.TOP, 0, 0);
View toastView = LayoutInflater.from(mContext).inflate(R.layout.layout_toast, null);
mToast.setView(toastView);
mToast.show();

运行程序我们发现并没有我们想要的效果,而是在顶部自适应显示


我们已经setView了但是并没有根据我们的布局显示我们想要的效果,原因是什么呢?通过看源码我们发现Toas并没有设置宽高的方法,而且其宽高是根据内容的大小而自适应的,所以只能自己写了。

既然没有设置宽高的方法, 那我们是否可以通过setView(View)方法动态定义View的宽高来实现呢,想到就要做,于是我这样写

WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
View toastView = LayoutInflater.from(mContext).inflate(R.layout.layout_toast, null);
if (mToast == null) {
    mToast = new Toast(mContext);
}
LinearLayout relativeLayout = (LinearLayout) toastView.findViewById(R.id.test);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(wm
        .getDefaultDisplay().getWidth(), dip2px(mContext, 60));
relativeLayout.setLayoutParams(layoutParams);
mToast.setDuration(Toast.LENGTH_SHORT);
mToast.setGravity(Gravity.TOP, 0, 0);
mToast.setView(toastView);
mToast.show();

果然动态设置宽高后效果就实现了,但是这样有一个问题需要大家注意下

不能设置布局文件的根节点的宽高度,这一样无效,因此需要设置LinearLayout的宽高度

不能设置布局文件的根节点的宽高度,这一样无效,因此需要设置LinearLayout的宽高度

不能设置布局文件的根节点的宽高度,这一样无效,因此需要设置LinearLayout的宽高度

所以我在Textview上面包了一层


第二种:Popwindow实现

相对于Toast来说Popwindow实现起来就方便多了,我们只要有布局文件,只需要设置一下就可以实现跟上个相同的效果,关键代码如下:

// 把View添加到PopWindow中
this.setContentView(mPopWindow);
//设置SelectPicPopupWindow弹出窗体的宽
this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
//设置SelectPicPopupWindow弹出窗体的高
this.setHeight(dip2px(mContext, 60));
//  设置SelectPicPopupWindow弹出窗体可点击
this.setFocusable(false);
//   设置背景透明
this.setBackgroundDrawable(new ColorDrawable(0x00000000));

点击测试:

         popUtil = new PopUtil(MainActivity.this, "我是POP测试");
               new CountDownTimer(2000, 1000) {
                   @Override
                   public void onTick(long millisUntilFinished) {
                       popUtil.showAtLocation(MainActivity.this.findViewById(R.id.pop),
Gravity.TOP, 0, 0);
                   }

                   @Override
                   public void onFinish() {
                       popUtil.dismiss();
                   }
               }.start();

我这里做了一个两秒的倒计时,两秒后自动取消PopWindow,跟Toast功能相同


结语:

其实延伸开还有很多效果可以实现,例如淡入淡出的动画效果,这就需要大家去开动脑筋去实现了

Demo地址

CSDN地址













查看评论

android 从顶部弹出的SnackBar

在项目中需要用到从顶部弹出的SnackBar,于是在github找了一些代码看了下,并结合google 自家的SnackBar写了着么一个控件, github地址:https://github.co...
  • u012416928
  • u012416928
  • 2016-09-06 09:44:54
  • 6726

两种方式实现仿微信顶部标题栏弹窗效果(PopupWindow+Activity)

  • 2013年06月14日 16:04
  • 1024KB
  • 下载

Andriod 仿QQ顶部弹出式提示

最近看到QQ从顶部垂直向下显示Toast,自己也模仿写了一个。 废话不多说,直接上图↓ 其实特别简单,就是一个嵌入动画的处理。 代码中都有详细注释。 点击下载...
  • Krisutopia
  • Krisutopia
  • 2016-05-04 14:44:45
  • 626

顶部提示的悬浮窗

主要的类/** * 头部提示的悬浮窗 */ public class TopSnackBar { public static final int LENGTH_LONG = 3500; ...
  • forwordlove
  • forwordlove
  • 2016-10-12 20:27:24
  • 792

自定义顶部弹出Toast

自定义Toast
  • hnczgsy
  • hnczgsy
  • 2017-07-08 15:42:30
  • 386

Android封装类似微信的顶部TitleBar弹出的PopupWindow代码

android仿微信顶部titlebar,点击加号弹出的PopupWindow,是封装好的PopupWindow,直接拿来用即可,先看效果图: 调用代码非常简单,这是MainActivity的代...
  • yaochangliang159
  • yaochangliang159
  • 2016-03-16 17:29:59
  • 1978

android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果

需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果,  总在找事情做的产品经理又提出了奇葩的需求。之前在通知栏显示...
  • lowprofile_coding
  • lowprofile_coding
  • 2015-10-27 21:33:53
  • 3256

顶部弹出提示的两种实现方式

  • 2018年04月17日 09:47
  • 15.94MB
  • 下载

android特效集锦系列之七 仿QQ顶部消息工具

1. 仿QQ顶部消息工具,我就是贱,看到不错的东西总想把它弄过来收藏,手机QQ的消息上有个灯泡形状的东西,点一下弹出工具菜单。。。 效果:       源码地址...
  • jov123
  • jov123
  • 2013-10-12 12:05:41
  • 2243

Android消息提示方法介绍

Android消息提示有三种方式: 1.使用Toast显示消息提示 Toast用于在屏幕中显示一个提示信息框,该消息提示框没有任何控制按钮,并且不会获得焦点,经过一定时间后自动消失,通常用于显示一...
  • zhangbohun
  • zhangbohun
  • 2016-02-24 22:26:50
  • 3744
    个人资料
    持之以恒
    等级:
    访问量: 2118
    积分: 244
    排名: 31万+
    文章分类
    最新评论