Android開發(fā)Popwindow仿微信右上角下拉菜單實(shí)例代碼
先給大家看下效果圖:
MenuPopwindow:
package com.cloudeye.android.cloudeye.view; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; import com.cloudeye.android.cloudeye.R; import com.cloudeye.android.cloudeye.base.MenuPopwindowBean; import java.util.List; /** * Created by 袁磊 on 2016/10/26. */ public class MenuPopwindow extends PopupWindow { private View conentView; private ListView lvContent; public MenuPopwindow(Activity context, List<MenuPopwindowBean> list) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); conentView = inflater.inflate(R.layout.menu_popup_window, null); lvContent = (ListView) conentView.findViewById(R.id.lv_toptitle_menu); lvContent.setAdapter(new MyAdapter(context, list)); int h = context.getWindowManager().getDefaultDisplay().getHeight(); int w = context.getWindowManager().getDefaultDisplay().getWidth(); // 設(shè)置SelectPicPopupWindow的View this.setContentView(conentView); // 設(shè)置SelectPicPopupWindow彈出窗體的寬 this.setWidth(w / 3-30); // 設(shè)置SelectPicPopupWindow彈出窗體的高 this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); // 設(shè)置SelectPicPopupWindow彈出窗體可點(diǎn)擊 this.setFocusable(true); this.setOutsideTouchable(true); // 刷新狀態(tài) this.update(); // 實(shí)例化一個(gè)ColorDrawable顏色為半透明 ColorDrawable dw = new ColorDrawable(0000000000); // 點(diǎn)back鍵和其他地方使其消失,設(shè)置了這個(gè)才能觸發(fā)OnDismisslistener ,設(shè)置其他控件變化等操作 this.setBackgroundDrawable(dw); // mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog); // 設(shè)置SelectPicPopupWindow彈出窗體動(dòng)畫效果 this.setAnimationStyle(R.style.AnimationPreview); } public void setOnItemClick(AdapterView.OnItemClickListener myOnItemClickListener) { lvContent.setOnItemClickListener(myOnItemClickListener); } class MyAdapter extends BaseAdapter { private List<MenuPopwindowBean> list; private LayoutInflater inflater; public MyAdapter(Context context, List<MenuPopwindowBean> list) { inflater = LayoutInflater.from(context); this.list = list; } @Override public int getCount() { return list == null ? 0 : list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.menu_popup_window_item, null); holder = new Holder(); holder.ivItem = (ImageView) convertView.findViewById(R.id.iv_menu_item); holder.tvItem = (TextView) convertView.findViewById(R.id.tv_menu_item); convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); } holder.ivItem.setImageResource(list.get(position).getIcon()); holder.tvItem.setText(list.get(position).getText()); return convertView; } class Holder { ImageView ivItem; TextView tvItem; } } /** * 顯示popupWindow * * @param parent */ public void showPopupWindow(View parent) { if (!this.isShowing()) { // 以下拉方式顯示popupwindow this.showAsDropDown(parent); } else { this.dismiss(); } } }
MenuPopwindow布局:
<?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="match_parent" android:orientation="vertical" android:paddingRight="10dp"> <ListView android:id="@+id/lv_toptitle_menu" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@mipmap/back_toptitle_menu" /> </LinearLayout>
Adapter中的Item布局文件:
<?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="match_parent" android:gravity="center" android:orientation="horizontal" android:paddingBottom="10dp" android:paddingTop="10dp"> <ImageView android:id="@+id/iv_menu_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginRight="10dp" android:src="@mipmap/icon_menu_item_edit" /> <TextView android:id="@+id/tv_menu_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="測(cè)試" android:textColor="@color/black" android:textSize="18sp" /> </LinearLayout>
使用:
int[] icons = {R.mipmap.icon_menu_item_edit, R.mipmap.icon_menu_item_delete}; String[] texts = {"編輯", "刪除"}; List<MenuPopwindowBean> list = new ArrayList<>(); MenuPopwindowBean bean = null; for (int i = 0; i < icons.length; i++) { bean = new MenuPopwindowBean(); bean.setIcon(icons[i]); bean.setText(texts[i]); list.add(bean); } MenuPopwindow pw = new MenuPopwindow(PersonalImgPlayActivity.this, list); pw.setOnItemClick(myOnItemClickListener); pw.showPopupWindow(findViewById(R.id.img_top1_share));//點(diǎn)擊右上角的那個(gè)button
以上所述是小編給大家介紹的Android開發(fā)Popwindow仿微信右上角下拉菜單實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的
相關(guān)文章
Android開發(fā)技巧之像QQ一樣輸入文字和表情圖像
QQ聊天輸入框,在輸入框中可以同時(shí)輸入文字和表情圖像。實(shí)際上,這種效果在Android SDK中只需要幾行代碼就可以實(shí)現(xiàn),本文將會(huì)介紹如何實(shí)現(xiàn)像QQ一樣輸入表情圖像2013-01-01Android滑動(dòng)刪除數(shù)據(jù)功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android滑動(dòng)刪除功能2017-01-01android通過(guò)Location API顯示地址信息的實(shí)現(xiàn)方法
這篇文章主要介紹了android通過(guò)Location API顯示地址信息的方法,涉及Android操作Geocoder類獲取地址信息的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07Android如何防止apk程序被反編譯(尊重勞動(dòng)成果)
作為Android應(yīng)用開發(fā)者,不得不面對(duì)一個(gè)尷尬的局面,就是自己辛辛苦苦開發(fā)的應(yīng)用可以被別人很輕易的就反編譯出來(lái),天下痛苦之事莫過(guò)于此啊,本文會(huì)介紹一種防止apk程序被反編譯的方法,感興趣的朋友可以了解下哦2013-01-01Android 雙進(jìn)程守護(hù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 雙進(jìn)程守護(hù)的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08詳解如何在Flutter中集成華為認(rèn)證服務(wù)
這篇文章主要介紹了詳解如何在Flutter中集成華為認(rèn)證服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Android如何實(shí)現(xiàn)翻轉(zhuǎn)動(dòng)畫效果(卡片翻轉(zhuǎn))
卡片翻轉(zhuǎn)這個(gè)效果大家應(yīng)該都不陌生,這篇文章主要給大家介紹了關(guān)于Android如何實(shí)現(xiàn)翻轉(zhuǎn)動(dòng)畫效果的相關(guān)資料,文中將實(shí)現(xiàn)的源代碼以及過(guò)程中遇到的bug都介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08