1. 程式人生 > >Android頂部彈出提示的兩種實現方式

Android頂部彈出提示的兩種實現方式

先給大家上一張效果圖:


越來越多的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功能相同

結語:

其實延伸開還有很多效果可以實現,例如淡入淡出的動畫效果,這就需要大家去開動腦筋去實現了

相關推薦

android 底部提示框的實現方式

1.android實現底部彈框的兩種實現方式: (1) 使用系統自帶對話方塊AlertDialog 實現 (2)自定義對話方塊實現  1.1使用系統自帶對話方塊AlertDialog 實現 public class MainActivity extends AppCo

Android頂部提示實現方式

先給大家上一張效果圖:越來越多的APP提示越來越花哨,有中間的,有頂部的,有底部的,滑動滑出的,淡入淡出的,今天就先給大家做一個簡單的頂部彈出提示效果其實這是一個很簡單的功能,做起來也並不複雜,我們先看使用Toast如何實現第一種:Toast實現佈局檔案layout_toas

Android開發——彈性滑動的實現方式

0. 前言我們在Android開發——View滑動的三種實現方式中學習瞭如何進行View滑動,在第一種方法,利用ScrollBy和ScrollTo進行滑動時,滑動效果是瞬間完成的,為了更好的使用者體驗,

android縮放動畫的實現方法

get odi omx rac tor Coding eight rpo odin 在android開發。我們會常常使用到縮放動畫,普通情況下縮放動畫有兩種實現方式。一種是直接通過java代碼去實現,第二種是通過配置文件實現動畫,以下是兩種動畫的基本是用法: Ja

Android】打電話的實現方式

第一種實現方式:直接給聯絡人打電話 Intent intent=new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:110")); startActivity(intent);

自動補全、自動提示實現方式(前端實現與後端實現

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="style

移動端HTML5導航欄吸頂:IOS(sticky)和Android實現方式

混合App,前端H5頁面,實現導航欄滑動到的時候貼頂。 注意: 首先寫的時候,監聽scroll事件,滑動到指定位置時改為定位 position:fixed;,實際運用過程中,IOS無法實時監聽scroll事件,在滾動停止之後才觸發的 $(wind

android介面設計筆記(二)底部導航欄的實現方式

demo:https://github.com/linliangliang/BottomNavagationBar android底部導航欄的實現方式比較多,今天學習其中兩種方式: 一、使用tabLayout+Fragment實現。 二、使用BottomNavagationBar實現。 第一

android介面設計筆記(一)底部導航欄的實現方式

demo:https://github.com/linliangliang/BottomNavagationBar android底部導航欄的實現方式比較多,今天學習其中兩種方式: 一、使用tabLayout+Fragment實現。 二、使用BottomNavigationBar實現。

android介面設計(二)側邊欄的實現方式

dome:https://github.com/linliangliang/sidebar 一、使用sideingMenu結合fragment實現。 二、使用NavigationView和DrawerLayout實現。 第一種實現方式:https://mp.csdn.net/posted

android介面設計(一)側邊欄的實現方式

dome:https://github.com/linliangliang/sidebar 一、使用slideingMenu結合fragment實現。 二、使用Navigation和DrawerLayout實現。 第二種實現方式:https://mp.csdn.net/postedit/

Android-動態載入外掛化的實現方式(二):介面

上一篇部落格中http://blog.csdn.net/lxping51/article/details/71480239,主要通過反射的方式來實現動態載入外掛化,今天我們以介面的方式來達到目的。介面的實現比反射更為簡單,而且直接呼叫對效能有很大的提高。但是這也

Android 圓形頭像的實現方式

前言 這篇部落格只是為了做一個記錄而已,方便而後查詢,核心程式碼都是直接採用鴻洋部落格裡面的程式碼的。 圓形頭像在實際開發中實際很常見,一般來說,主要有兩種實現方式: 第一種: 使用 Paint 的 Xfermode 實戰 第二種方法: 使用 B

AndroidAndroid開發之常用的loading等待效果實現,仿微博等待動畫。實現方式詳解

長期維護的Android專案,裡面包括常用功能實現,以及知識點詳解, 當然還有Java中的知識點。 具體請看github:https://github.com/QQ986945193/DavidAndroidProjectTools 首先大家都知道,當我

Android PopupWindow視窗的完美實現實現背景變暗效果)

最近嘗試使用popupWindow實現背景變暗效果,自己優化了一下,並封裝成一個可以呼叫的方法,預設實現彈出視窗顯示在傳入view的下方,以下程式碼有詳細註釋,有問題可以留言 展示效果如下: 程式碼展示 佈局中 <RelativeLayou

Android中將方形圖片擷取成圓形的實現方式

以下兩種方法均有不足,僅供參考 第一種實現方式是通過設定畫筆的渲染方式對圖片進行處理: 首先要了解幾種渲染方式 1.BitmapShader(影象渲染)   BitmapShader的作用是

android------引導頁實現方式(原生和WebView網頁實現

有的App當你第一次開啟的是和常常會有引導頁來描述一些App資訊(功能,特點),當然也要做驗證,驗證第二次進入不進入引導頁,直接進入App,此部落格藉助ViewPager來實現引導頁, ViewPager類提供了多介面切換的新效果,是谷歌在3.0之後加入的新特性,所以需要引

Android呼叫系統相機拍照並儲存到SD卡的實現方式

1.呼叫照相機時通過putExtra的方式直接指定儲存路徑 String FilePath = "/sdcard/pic/"; File file = new File(FilePath); file.mkdirs();// 建立資料夾 Intent intent

[轉]Web APi之認證(Authentication)實現方式【二】(十三)

用戶數 ted das 客戶 元素 基礎 目標 開始 net 本文轉自:http://www.cnblogs.com/CreateMyself/p/4857799.html 前言 上一節我們詳細講解了認證及其基本信息,這一節我們通過兩種不同方式來實現認證,並且分析如

多線程實現方式的區別

http [] tick 避免 main 單繼承 style 區別 tar 請解釋Thread類與Runnable接口實現多線程的區別?(請解釋多線程兩種實現方式的區別?) 1. Thread類時Runnable接口的子類,使用Runnable接口實現多線程可以避免單繼承局