亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android控件PopupWindow模仿ios底部彈窗

2019-10-23 20:08:51
字體:
來源:轉載
供稿:網友

前言

在H5火熱的時代,許多框架都出了底部彈窗的控件,在H5被稱為彈出菜單ActionSheet,今天我們也來模仿一個ios的底部彈窗,取材于蘋果QQ的選擇頭像功能。

正文

廢話不多說,先來個今天要實現的效果圖

Android,PopupWindow,ios,彈窗

整個PopupWindow的開啟代碼

private void openPopupWindow(View v) {  //防止重復按按鈕  if (popupWindow != null && popupWindow.isShowing()) {    return;  }  //設置PopupWindow的View  View view = LayoutInflater.from(this).inflate(R.layout.view_popupwindow, null);  popupWindow = new PopupWindow(view, RelativeLayout.LayoutParams.MATCH_PARENT,      RelativeLayout.LayoutParams.WRAP_CONTENT);  //設置背景,這個沒什么效果,不添加會報錯  popupWindow.setBackgroundDrawable(new BitmapDrawable());  //設置點擊彈窗外隱藏自身  popupWindow.setFocusable(true);  popupWindow.setOutsideTouchable(true);  //設置動畫  popupWindow.setAnimationStyle(R.style.PopupWindow);  //設置位置  popupWindow.showAtLocation(v, Gravity.BOTTOM, 0, navigationHeight);  //設置消失監聽  popupWindow.setOnDismissListener(this);  //設置PopupWindow的View點擊事件  setOnPopupViewClick(view);  //設置背景色  setBackgroundAlpha(0.5f);}

步驟分析:

PopupWindow的布局
PopupWindow的創建
PopupWindow添加動畫效果
PopupWindow設置背景陰影
PopupWindow監聽點擊事件
獲取NavigationBar的高度

PopupWindow的布局:在Layout中,設計我們需要的布局

<?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="wrap_content" android:orientation="vertical">  <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="8dp" android:background="@drawable/popup_shape" android:orientation="vertical">    <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="16dp" android:text="你可以將照片上傳至照片墻" android:textColor="#666" android:textSize="14sp" />    <View android:layout_width="match_parent" android:layout_height="0.1px" android:background="#888" />    <TextView android:id="@+id/tv_pick_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="16dp" android:text="從手機相冊選擇" android:textColor="#118" android:textSize="18sp" />    <View android:layout_width="match_parent" android:layout_height="0.1px" android:background="#888" />    <TextView android:id="@+id/tv_pick_zone" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="16dp" android:text="從空間相冊選擇" android:textColor="#118" android:textSize="18sp" />  </LinearLayout>  <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="8dp" android:background="@drawable/popup_shape">    <TextView android:id="@+id/tv_cancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="16dp" android:text="取消" android:textColor="#118" android:textSize="18sp" android:textStyle="bold" />  </LinearLayout></LinearLayout>

其效果是:

Android,PopupWindow,ios,彈窗

PopupWindow的創建:這個創建與我們普通的控件創建方法是一樣的

//設置PopupWindow的ViewView view = LayoutInflater.from(this).inflate(R.layout.view_popupwindow, null);popupWindow = new PopupWindow(view, RelativeLayout.LayoutParams.MATCH_PARENT,        RelativeLayout.LayoutParams.WRAP_CONTENT);

PopupWindow添加動畫效果:我們創建一個anim文件夾,創建我們的out和in動畫效果,然后在style添加我們的動畫

<?xml version="1.0" encoding="utf-8"?><!--進入動畫--><translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromYDelta="100%" android:toYDelta="0" android:duration="200"/><?xml version="1.0" encoding="utf-8"?><!--退出動畫--><translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromYDelta="0" android:toYDelta="100%" android:duration="200"/><!--彈窗動畫--><style name="PopupWindow"> <item name="android:windowEnterAnimation">@anim/window_in</item> <item name="android:windowExitAnimation">@anim/window_out</item> </style>

//設置動畫
popupWindow.setAnimationStyle(R.style.PopupWindow);

PopupWindow設置背景陰影:彈窗打開時設置透明度為0.5,彈窗消失時設置透明度為1

//設置屏幕背景透明效果public void setBackgroundAlpha(float alpha) {  WindowManager.LayoutParams lp = getWindow().getAttributes();  lp.alpha = alpha;  getWindow().setAttributes(lp);}

PopupWindow監聽點擊事件:監聽我們PopupWindow里面控件的點擊事件

//設置PopupWindow的View點擊事件setOnPopupViewClick(view);private void setOnPopupViewClick(View view) {  TextView tv_pick_phone, tv_pick_zone, tv_cancel;  tv_pick_phone = (TextView) view.findViewById(R.id.tv_pick_phone);  tv_pick_zone = (TextView) view.findViewById(R.id.tv_pick_zone);  tv_cancel = (TextView) view.findViewById(R.id.tv_cancel);  tv_pick_phone.setOnClickListener(this);  tv_pick_zone.setOnClickListener(this);  tv_cancel.setOnClickListener(this);}

獲取NavigationBar的高度:這里需要適配有些手機沒有NavigationBar有些手機有,這里以存在NavigationBar來演示
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
navigationHeight = getResources().getDimensionPixelSize(resourceId);

對存在NavigationBar的手機上,設置其PopupWindow的出現位置
//設置位置
popupWindow.showAtLocation(v, Gravity.BOTTOM, 0, navigationHeight);

對沒有NavigationBar的手機上,設置其PopupWindow的出現位置
//設置位置
popupWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0);

源碼

Github:https://github.com/AndroidHensen/IOSPopupWindow

public class MainActivity extends AppCompatActivity implements View.OnClickListener, PopupWindow.OnDismissListener {  private Button bt_open;  private PopupWindow popupWindow;  private int navigationHeight;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    bt_open = (Button) findViewById(R.id.bt_open);    bt_open.setOnClickListener(this);    int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");    navigationHeight = getResources().getDimensionPixelSize(resourceId);  }  @Override  public void onClick(View v) {    switch (v.getId()) {      case R.id.bt_open:        openPopupWindow(v);        break;      case R.id.tv_pick_phone:        Toast.makeText(this, "從手機相冊選擇", Toast.LENGTH_SHORT).show();        popupWindow.dismiss();        break;      case R.id.tv_pick_zone:        Toast.makeText(this, "從空間相冊選擇", Toast.LENGTH_SHORT).show();        popupWindow.dismiss();        break;      case R.id.tv_cancel:        popupWindow.dismiss();        break;    }  }  private void openPopupWindow(View v) {    //防止重復按按鈕    if (popupWindow != null && popupWindow.isShowing()) {      return;    }    //設置PopupWindow的View    View view = LayoutInflater.from(this).inflate(R.layout.view_popupwindow, null);    popupWindow = new PopupWindow(view, RelativeLayout.LayoutParams.MATCH_PARENT,        RelativeLayout.LayoutParams.WRAP_CONTENT);    //設置背景,這個沒什么效果,不添加會報錯    popupWindow.setBackgroundDrawable(new BitmapDrawable());    //設置點擊彈窗外隱藏自身    popupWindow.setFocusable(true);    popupWindow.setOutsideTouchable(true);    //設置動畫    popupWindow.setAnimationStyle(R.style.PopupWindow);    //設置位置    popupWindow.showAtLocation(v, Gravity.BOTTOM, 0, navigationHeight);    //設置消失監聽    popupWindow.setOnDismissListener(this);    //設置PopupWindow的View點擊事件    setOnPopupViewClick(view);    //設置背景色    setBackgroundAlpha(0.5f);  }  private void setOnPopupViewClick(View view) {    TextView tv_pick_phone, tv_pick_zone, tv_cancel;    tv_pick_phone = (TextView) view.findViewById(R.id.tv_pick_phone);    tv_pick_zone = (TextView) view.findViewById(R.id.tv_pick_zone);    tv_cancel = (TextView) view.findViewById(R.id.tv_cancel);    tv_pick_phone.setOnClickListener(this);    tv_pick_zone.setOnClickListener(this);    tv_cancel.setOnClickListener(this);  }  //設置屏幕背景透明效果  public void setBackgroundAlpha(float alpha) {    WindowManager.LayoutParams lp = getWindow().getAttributes();    lp.alpha = alpha;    getWindow().setAttributes(lp);  }  @Override  public void onDismiss() {    setBackgroundAlpha(1);  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
夜夜躁日日躁狠狠久久88av| 欧美一区二粉嫩精品国产一线天| 亚洲一区二区自拍| 久久97精品久久久久久久不卡| 亚洲精品v天堂中文字幕| 亚洲欧美激情精品一区二区| 日韩女优人人人人射在线视频| 久久久综合av| 久久久亚洲影院你懂的| 91久久久在线| 欧美日韩在线影院| 国产欧美va欧美va香蕉在| 51精品国产黑色丝袜高跟鞋| 亚洲精品之草原avav久久| 久久久久久这里只有精品| 韩日精品中文字幕| 国产丝袜一区二区| 亚洲嫩模很污视频| 激情成人在线视频| 91产国在线观看动作片喷水| 国产精品自在线| 欧美激情视频网址| 日韩免费av在线| 伊人久久综合97精品| x99av成人免费| 亚洲精品久久视频| 欧美剧在线观看| 另类少妇人与禽zozz0性伦| 一区二区在线视频播放| 久久久噜噜噜久噜久久| 亚洲午夜激情免费视频| 日本一本a高清免费不卡| 日韩欧美中文在线| 在线亚洲男人天堂| 九九九热精品免费视频观看网站| 国产一区av在线| 亚洲欧洲在线视频| 亚洲国产精品推荐| 7777精品视频| 久久乐国产精品| 欧美视频中文字幕在线| 一本色道久久88精品综合| 乱亲女秽乱长久久久| 亚洲精品第一国产综合精品| 欧美日韩国产精品一区二区三区四区| 成人免费视频在线观看超级碰| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品69久久久久| 日韩**中文字幕毛片| 原创国产精品91| 久久国产精品网站| 国产精品视频自拍| 国产一区二区三区网站| 精品久久久久久久中文字幕| 欧美成人全部免费| 欧美精品18videos性欧美| 爽爽爽爽爽爽爽成人免费观看| 欧美丰满少妇xxxxx| 亚洲欧美变态国产另类| 亚洲第一精品自拍| 日本视频久久久| 不卡av在线网站| 最近2019中文字幕大全第二页| 国产成人自拍视频在线观看| 日韩欧美精品中文字幕| 久久精品99久久久久久久久| 91国产一区在线| 亚洲乱码一区av黑人高潮| 都市激情亚洲色图| 国产999在线观看| 98精品在线视频| 日韩久久免费电影| 久久久久久美女| 久久欧美在线电影| 亚洲精品99久久久久中文字幕| 欧美日韩中文字幕日韩欧美| 欧美精品18videos性欧| 久久久久久com| 欧美激情在线视频二区| 久久久精品影院| 亚洲国产精品久久91精品| 91免费看片在线| 92国产精品视频| 日韩电影中文字幕一区| 日韩av中文字幕在线播放| 久久久久久久爱| 91精品视频专区| 亚洲自拍欧美色图| 亚洲精品av在线| 久久精品国产一区二区三区| 日韩欧美成人精品| 亚洲成人av片| 国产亚洲精品美女| www.久久久久| 欧美色另类天堂2015| 国产午夜精品久久久| 精品国产网站地址| 久久免费视频在线观看| 日产精品久久久一区二区福利| 日韩中文在线视频| 欧美日韩午夜剧场| 国产91久久婷婷一区二区| 成人精品视频在线| 久久噜噜噜精品国产亚洲综合| 欧美日韩国产91| 免费91麻豆精品国产自产在线观看| 91大神福利视频在线| 国产精品一香蕉国产线看观看| 国产精品久久久久久久美男| 日韩电影免费观看中文字幕| 国产精品偷伦视频免费观看国产| 国产精品视频自拍| 搡老女人一区二区三区视频tv| 91爱爱小视频k| 国产suv精品一区二区三区88区| 欧美乱大交xxxxx| 欧美电影在线观看| 亚洲在线观看视频网站| 国产欧美 在线欧美| 亚洲人成电影在线观看天堂色| 国产在线精品播放| 中文字幕欧美精品日韩中文字幕| 久久色免费在线视频| 庆余年2免费日韩剧观看大牛| 欧美一级黑人aaaaaaa做受| 国产精品都在这里| 欧美激情手机在线视频| 欧美性受xxxx白人性爽| 国产精品久久99久久| 欧美风情在线观看| 亚洲人精品午夜在线观看| 精品久久久久久亚洲精品| 亚洲一区二区三区久久| 国产精品九九九| 欧美成人午夜激情在线| 欧美视频精品一区| 国产精品欧美一区二区三区奶水| 亚洲伊人久久大香线蕉av| 亚洲欧美中文字幕| 亚洲精品短视频| 国产精品va在线播放| 欧美午夜美女看片| 中文字幕日韩av电影| 亚洲自拍偷拍在线| 国产欧美日韩视频| 自拍偷拍免费精品| 国内免费久久久久久久久久久| 亚洲国产日韩欧美在线图片| 国产ts一区二区| 亚洲精品按摩视频| 91精品啪在线观看麻豆免费| 亚洲精品456在线播放狼人| 久久精品视频在线观看| 精品久久久久久久久久久久| 日韩电影在线观看永久视频免费网站| 日韩欧美在线观看| 久久久女女女女999久久| 97国产成人精品视频| 久久中文字幕视频| 在线播放亚洲激情| 欧美中文字幕视频在线观看| 日韩中文在线视频| 亚洲韩国欧洲国产日产av| 久久久久成人精品|