Android自定義PopupWindow簡(jiǎn)單小例子
最近沒(méi)事做就寫(xiě)了一下PopupWindow,希望對(duì)有些人有點(diǎn)幫助。
照常先看一下完成后的結(jié)果(界面比較難看就不要吐槽了)


點(diǎn)擊地理位置然后彈出的PopupWindow,數(shù)據(jù)我寫(xiě)死了但是可以根據(jù)你們的需求自己改,或者通過(guò)網(wǎng)絡(luò)獲取數(shù)據(jù)。我是通過(guò)listView進(jìn)行展示的你們也可以改成表格布局,具體的實(shí)現(xiàn)代碼如下:
PopupWindow的彈出框的整體布局(listView)fragment_popup:
<?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">
<ListView
android:id="@+id/pop_path"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
listview要加載的item:pop_list_adapter.xml
<?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">
<TextView
android:id="@+id/item_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18dp"/>
</LinearLayout>
listview的適配器:PopAdapter
public class PopAdapter extends BaseAdapter {
private List<String> list;
private Context context;
public PopAdapter(List<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.pop_list_adapter, null);
viewHolder.item_content = (TextView) convertView.findViewById(R.id.item_content);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.item_content.setText(list.get(position));
return convertView;
}
private class ViewHolder {
private TextView item_content;
}
}
寫(xiě)一個(gè)MyPopupWindow類(lèi)繼承PopupWindow:
public class MyPopuWindow extends PopupWindow {
private View contentView;
private ListView lv_pop;
private List<String> paths;
private Context context;
public MyPopuWindow(final Activity context) {
this.context = context;
//獲得 LayoutInflater 的實(shí)例
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
contentView = inflater.inflate(R.layout.fragment_popup, null);
//獲取屏幕的寬高
int h = context.getWindowManager().getDefaultDisplay().getHeight();
int w = context.getWindowManager().getDefaultDisplay().getWidth();
this.setContentView(contentView);
// 設(shè)置SelectPicPopupWindow彈出窗體的寬
this.setWidth(LayoutParams.MATCH_PARENT);
// 設(shè)置SelectPicPopupWindow彈出窗體的高
this.setHeight(LayoutParams.WRAP_CONTENT);
// 設(shè)置SelectPicPopupWindow彈出窗體可點(diǎn)擊
this.setFocusable(true);
this.setOutsideTouchable(true);
// 刷新?tīng)顟B(tài)
this.update();
// 實(shí)例化一個(gè)ColorDrawable顏色為半透明
ColorDrawable dw = new ColorDrawable(0000000000);
// 點(diǎn)back鍵和其他地方使其消失,設(shè)置了這個(gè)才能觸發(fā)OnDismisslistener ,設(shè)置其他控件變化等操作
this.setBackgroundDrawable(dw);
// 設(shè)置SelectPicPopupWindow彈出窗體動(dòng)畫(huà)效果
this.setAnimationStyle(R.style.AnimationPreview);
initData();
}
private void initData() {
paths = new ArrayList<>();
paths.add("北京");
paths.add("上海");
paths.add("廣州");
paths.add("天津");
paths.add("大連");
paths.add("長(zhǎng)春");
paths.add("濟(jì)南");
paths.add("青島");
paths.add("無(wú)錫");
paths.add("鄭州");
paths.add("寧波");
paths.add("廈門(mén)");
lv_pop = (ListView) contentView.findViewById(R.id.pop_path);
lv_pop.setAdapter(new PopAdapter(paths, context));
lv_pop.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(context, paths.get(position), Toast.LENGTH_SHORT).show();
showPopupWindow(view);
}
});
}
/**
* 顯示popupWindow
*
* @param parent
*/
public void showPopupWindow(View parent) {
if (!this.isShowing()) {
// 以下拉方式顯示popupwindow
this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 18);
} else {
this.dismiss();
}
}
}
接下來(lái)就是調(diào)用PopupWindow顯示了。actionPath:是你的組件也就是我的地理位置
myPopuWindow= new MyPopuWindow(getActivity()); myPopuWindow.showPopupWindow(actionPath);
好了大概的一個(gè)代碼就是這樣了希望對(duì)你們有用。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解Android中提示對(duì)話框(ProgressDialog和DatePickerDialog和TimePickerDialog&PopupWindow)
- Android自定義PopupWindow仿點(diǎn)擊彈出分享功能
- android自定義popupwindow仿微信右上角彈出菜單效果
- Android自定義彈出窗口PopupWindow使用技巧
- Android中自定義PopupWindow實(shí)現(xiàn)彈出框并帶有動(dòng)畫(huà)效果
- Android實(shí)現(xiàn)類(lèi)似iOS風(fēng)格的對(duì)話框?qū)嵗a
- Android仿IOS底部彈出對(duì)話框
- android底部彈出iOS7風(fēng)格對(duì)話選項(xiàng)框(QQ對(duì)話框)--第三方開(kāi)源之IOS_Dialog_Library
- Android自定義PopupWindow實(shí)現(xiàn)炫酷的IOS對(duì)話框效果
相關(guān)文章
Android使用Handler實(shí)現(xiàn)倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了Android使用Handler實(shí)現(xiàn)倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Android選擇圖片或視頻進(jìn)行循環(huán)播放
這篇文章主要為大家詳細(xì)介紹了Android選擇圖片或視頻進(jìn)行循環(huán)播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
android實(shí)現(xiàn)滑動(dòng)解鎖
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)滑動(dòng)解鎖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
Android中home鍵和back鍵區(qū)別實(shí)例分析
這篇文章主要介紹了Android中home鍵和back鍵區(qū)別,以實(shí)例形式較為詳細(xì)的分析并總結(jié)了home鍵和back鍵區(qū)別及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
Android使用AsyncTask實(shí)現(xiàn)多線程下載的方法
這篇文章主要介紹了Android使用AsyncTask實(shí)現(xiàn)多線程下載的方法,以完整實(shí)例形式詳細(xì)分析了Android使用AsyncTask實(shí)現(xiàn)多線程下載的功能代碼,界面布局及權(quán)限控制的具體方法,需要的朋友可以參考下2016-03-03
Android實(shí)現(xiàn)多線程斷點(diǎn)續(xù)傳
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)多線程斷點(diǎn)續(xù)傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
Android開(kāi)發(fā)筆記之:Dialog的使用詳解
本篇文章是對(duì)Android中Dialog的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

