功能描述:点击下拉按钮,显示出所有的条目,有删除和点击功能,点击后将条目显示。
注意:泡泡窗默认是没有焦点的。要让泡泡窗获取到焦点。假如ListvIEw的item中有button,Imagebutton,CheckBox等会强制获取焦点的vIEw 此时,ListvIEw的item无法获取焦点,从而无法被点击 解决方法:给item的根布局增加以下属性 AndroID:descendantFocusability="blocksDescendants"
设置之后,button获取焦点,item中其他控件也可以获取焦点,如果文本的文字过多,会被后面的图标盖住,首先设置单行androID:singleline="true"
再设置右边距就盖不住androID:padding="40dp"
需要添加下面三项
//让泡泡窗额度条目获取到焦点 popupWindow.setFocusable(true); //设置背景图 popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setoutsIDetouchable(true);
主布局文件activity_main.xml
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="#22000000" tools:context=".MainActivity" > <relativeLayout androID:layout_margintop="40dp" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_centerHorizontal="true" > <EditText androID:ID="@+ID/et" androID:singleline="true" androID:padding="40dp" androID:layout_wIDth="300dp" androID:layout_height="40dp" /> <ImageVIEw androID:layout_wIDth="wrap_content" androID:layout_height="40dp" androID:ID="@+ID/iv_select" androID:layout_centerVertical="true" androID:background="@drawable/ic_launcher" androID:layout_alignRight="@ID/et" /> </relativeLayout> </relativeLayout>
每一个条目的布局文件item_List.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" androID:padding="5dp" androID:orIEntation="horizontal" > <TextVIEw androID:layout_wIDth="0dp" androID:layout_height="wrap_content" androID:drawableleft="@drawable/ic_launcher" androID:gravity="center_vertical" androID:drawablepadding="3dp" androID:text="123" androID:ID="@+ID/tv_number" androID:layout_weight="1" /> <ImageVIEw androID:ID="@+ID/iv_delete" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:background="@drawable/ic_launcher" /> </linearLayout>
逻辑代码MainActivity.java
package com.lDW.select; import java.util.ArrayList; import androID.app.Activity; import androID.graphics.drawable.BitmapDrawable; import androID.os.Bundle; import androID.vIEw.VIEw; import androID.vIEw.VIEw.OnClickListener; import androID.vIEw.VIEwGroup; import androID.Widget.AdapterVIEw; import androID.Widget.AdapterVIEw.OnItemClickListener; import androID.Widget.BaseAdapter; import androID.Widget.EditText; import androID.Widget.ImageVIEw; import androID.Widget.ListVIEw; import androID.Widget.PopupWindow; import androID.Widget.TextVIEw; public class MainActivity extends Activity implements OnClickListener{ private ImageVIEw iv_select; private EditText et; private ArrayList<String> List = new ArrayList<String>(); private TextVIEw tv_number; private ImageVIEw iv_delete; private ListVIEw ListVIEw; private PopupWindow popupWindow; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initVIEw(); initListener(); initData(); } private voID initVIEw() { setContentVIEw(R.layout.activity_main); iv_select = (ImageVIEw) findVIEwByID(R.ID.iv_select); et = (EditText) findVIEwByID(R.ID.et); } private voID initListener() { iv_select.setonClickListener(this); } //集合中添加数据 private voID initData() { for(int i = 0; i< 20; i++){ List.add(1340000000 + i + ""); } initListVIEw(); } //初始化列表 private voID initListVIEw(){ ListVIEw = new ListVIEw(this); //设置ListVIEw的背景图 ListVIEw.setBackgroundResource(R.drawable.ic_launcher); //让ListVIEw的滚动条不可见 ListVIEw.setVerticalScrollbarEnabled(false); MyAdapter adapter = new MyAdapter(); ListVIEw.setAdapter(adapter); ListVIEw.setonItemClickListener(new OnItemClickListener(){ @OverrIDe public voID onItemClick(AdapterVIEw<?> parent,VIEw vIEw,int position,long ID) { et.setText(List.get(position)); //关闭泡泡窗 popupWindow.dismiss(); } }); } //泡泡窗实现点击显示列表,泡泡窗默认是不获取焦点的 private voID showNumberList(){ if(popupWindow == null){ //泡泡窗的填充,设置宽高 popupWindow = new PopupWindow(ListVIEw,et.getWIDth(),300); } //让泡泡窗额度条目获取到焦点 popupWindow.setFocusable(true); //设置背景图 popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setoutsIDetouchable(true); //第一个参数是依附哪一个参数下,x轴,y轴的偏移量,相对于第一个参数的左下角的位置 popupWindow.showAsDropDown(et,0); } @OverrIDe public voID onClick(VIEw v){ switch (v.getID()){ case R.ID.iv_select: //点击d出列表 showNumberList(); break; } } //ListVIEw填充 class MyAdapter extends BaseAdapter{ @OverrIDe public int getCount() { return List.size(); } @OverrIDe public Object getItem(int position) { return null; } @OverrIDe public long getItemID(int position) { return 0; } @OverrIDe public VIEw getVIEw(final int position,VIEw convertVIEw,VIEwGroup parent) { final VIEw vIEw = VIEw.inflate(MainActivity.this,R.layout.item_List,null); tv_number = (TextVIEw) vIEw.findVIEwByID(R.ID.tv_number); iv_delete = (ImageVIEw) vIEw.findVIEwByID(R.ID.iv_delete); tv_number.setText(List.get(position)); //删除按键 iv_delete.setonClickListener(new OnClickListener(){ @OverrIDe public voID onClick(VIEw v) { //删除条目 List.remove(position); //更新页面 notifyDataSetChanged(); //根据当前条目的个数设置,当前条目的高度 int ListVIEwHeight = List.size() * vIEw.getHeight(); if(ListVIEwHeight > 300){ ListVIEwHeight = 300; }else{ ListVIEwHeight = ListVIEwHeight; } //更新泡泡窗的高度 popupWindow.update(et.getWIDth(),ListVIEwHeight); //删除完了,泡泡窗小消失 if(List.size() == 0){ popupWindow.dismiss(); //下拉条消失 iv_select.setVisibility(VIEw.GONE); } } }); return vIEw; } } }
以上所述是小编给大家介绍的AndroID仿泡泡窗实现下拉菜单条实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
总结以上是内存溢出为你收集整理的Android仿泡泡窗实现下拉菜单条实例代码全部内容,希望文章能够帮你解决Android仿泡泡窗实现下拉菜单条实例代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)