最近没事做就写了一下PopupWindow,希望对有些人有点帮助。
照常先看一下完成后的结果(界面比较难看就不要吐槽了)
点击地理位置然后弹出的PopupWindow,数据我写死了但是可以根据你们的需求自己改,或者通过网络获取数据。我是通过listView进行展示的你们也可以改成表格布局,具体的实现代码如下:
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; } }
写一个MyPopupWindow类继承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 的实例 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); // 设置SelectPicPopupWindow弹出窗体的宽 this.setWidth(LayoutParams.MATCH_PARENT); // 设置SelectPicPopupWindow弹出窗体的高 this.setHeight(LayoutParams.WRAP_CONTENT); // 设置SelectPicPopupWindow弹出窗体可点击 this.setFocusable(true); this.setOutsideTouchable(true); // 刷新状态 this.update(); // 实例化一个ColorDrawable颜色为半透明 ColorDrawable dw = new ColorDrawable(0000000000); // 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作 this.setBackgroundDrawable(dw); // 设置SelectPicPopupWindow弹出窗体动画效果 this.setAnimationStyle(R.style.AnimationPreview); initData(); } private void initData() { paths = new ArrayList<>(); paths.add("北京"); paths.add("上海"); paths.add("广州"); paths.add("天津"); paths.add("大连"); paths.add("长春"); paths.add("济南"); paths.add("青岛"); paths.add("无锡"); paths.add("郑州"); paths.add("宁波"); paths.add("厦门"); 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(); } } }
接下来就是调用PopupWindow显示了。actionPath:是你的组件也就是我的地理位置
myPopuWindow= new MyPopuWindow(getActivity()); myPopuWindow.showPopupWindow(actionPath);
好了大概的一个代码就是这样了希望对你们有用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Android自定义控件案例汇总1(菜单、popupwindow、viewpager),包括了Android自定义控件案例汇总1(菜单、popupwindow、viewpager)的使用技巧和注意事项,需要的朋友参考一下 自定义控件是根据自己的需要自己来编写控件。安卓自带的控件有时候无法满足你的需求,这种时候,我们只能去自己去实现适合项目的控件。同时,安卓也允许你去继承已经存在的控件
本文向大家介绍Android自定义单例AlertDialog详解,包括了Android自定义单例AlertDialog详解的使用技巧和注意事项,需要的朋友参考一下 当Android开发处理错误信息时,经常会以Dialog的形式显示错误信息,但是每次都new一个Dialog,很麻烦,也增加程序的开销,所以今天就分享一种自定义单例AlertDialog 布局文件view_alertdialog.xml
本文向大家介绍android自定义popupwindow仿微信右上角弹出菜单效果,包括了android自定义popupwindow仿微信右上角弹出菜单效果的使用技巧和注意事项,需要的朋友参考一下 微信右上角的操作菜单看起来很好用,就照着仿了一下,不过是旧版微信的,手里刚好有一些旧版微信的资源图标,给大家分享一下。 不知道微信是用什么实现的,我使用popupwindow来实现,主要分为几块内容: 1
本文向大家介绍Python自定义线程类简单示例,包括了Python自定义线程类简单示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python自定义线程类。分享给大家供大家参考,具体如下: 一. 代码 二. 运行结果 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python Socket编程技巧总结》、《Python数据结构与算法教
本文向大家介绍Android popupwindow简单使用方法介绍,包括了Android popupwindow简单使用方法介绍的使用技巧和注意事项,需要的朋友参考一下 先看下效果 1.首页 2.首页布局 3.popupwindow布局,可根据情况自行布局,这里是demo布局 4.popupwindow条目布局 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Android自定义dialog简单实现方法,包括了Android自定义dialog简单实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android自定义dialog简单实现方法。分享给大家供大家参考,具体如下: 更多关于Android开发相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》 希望本文所述对大家Android程序设计有所帮助。
本文向大家介绍JS简单实现自定义右键菜单实例,包括了JS简单实现自定义右键菜单实例的使用技巧和注意事项,需要的朋友参考一下 RT,一个简单的例子,仅仅讲述原理 假设我要把上面这个div设置为右键菜单,先随意美化一下。 原理就是利用contextmenu事件,右键点击时,会触发这个事件时,该事件对象可以获得鼠标距离页面左上角的距离clientX和clientY, 我们可以利用这两个属性,来控制d
本文向大家介绍Android自定义UI手势密码简单版,包括了Android自定义UI手势密码简单版的使用技巧和注意事项,需要的朋友参考一下 先看看效果图: ImageLockActivity NinePointLineView 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。