Android 自定义d出菜单和对话框功能实例代码

Android 自定义d出菜单和对话框功能实例代码,第1张

概述Android开发当中,可能会存在许多自定义布局的需求,比如自定义d出菜单(popupWindow),以及自定义对话框(Dialog)。

AndroID 开发当中,可能会存在许多自定义布局的需求,比如自定义d出菜单(popupWindow),以及自定义对话框(Dialog)。

话不多说,直接上图片。

 

先讲第一种,自定义PopUpWindow

1.popupWindow

protected voID showPopWindow(VIEw vIEw,final int pos){  WindowManager wm= (WindowManager) myContext.getSystemService(Context.WINDOW_SERVICE);  int wIDth=wm.getDefaultdisplay().getWIDth();  LayoutInflater layoutInflater=(LayoutInflater)myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  VIEw popVIEw=layoutInflater.inflate(R.layout.layout_shoucang_popupwindow,null);  //加载d出菜单的布局文件  final ListVIEw lvpop= (ListVIEw) popVIEw.findVIEwByID(R.ID.lvShouCangPop);  List<String> strData=new ArrayList<>();  strData.add("删除");  strData.add("分享");  popVIEw.measure(VIEw.MeasureSpec.UnspecIFIED,VIEw.MeasureSpec.UnspecIFIED);  popupWindow=new PopupWindow(popVIEw,3*wIDth/10,VIEwGroup.LayoutParams.WRAP_CONTENT); //设置popupWindow 的大小  lvpop.setAdapter(new AdapterShouCangDeletePop(myContext,strData));  lvpop.setonItemClickListener(new AdapterVIEw.OnItemClickListener() {   @OverrIDe   public voID onItemClick(AdapterVIEw<?> parent,VIEw vIEw,int position,long ID) {    if(position==0){     //点击删除按钮的逻辑//     ToastUtil.toastButtom(myContext,"点击删除按钮");//     datas.remove(pos); //remove掉这行数据     toActivityPos=pos;//     notifyDataSetChanged();     sendDeleteBoardCast(); //发送一条广播     popupWindow.dismiss();    }else if(position ==1){     //点击分享的逻辑     String Title=datas.get(position).ucDesc;     String photoUrl=datas.get(position).ucIcon;     String contentUrl=datas.get(position).ucUrl;     DialogShouCangShare dialogShouCangShare=new DialogShouCangShare(myContext,Title,photoUrl,contentUrl); //d出分享对话框     dialogShouCangShare.show();     popupWindow.dismiss();    }   }  });  int[] location=new int[2];  vIEw.getLocationOnScreen(location);  popupWindow.setFocusable(true);  popupWindow.setBackgroundDrawable(new BitmapDrawable());//最好加上这一句,因为他可以取消显示这个d出菜单,不加的话,d出菜单很难消失  //下方:popupWindow.showAsDropDown(v);  //popupWindow.showAtLocation(v,Gravity.NO_GraviTY,location[0]+v.getWIDth(),location[1]); 显示在右边  //popupWindow显示在左边  popupWindow.showAtLocation(vIEw,location[0]-popupWindow.getWIDth(),location[1]); //这里的vIEw是传进来的vIEw,比如点击事件中的vIEw,就把它传进来,popupwindow的位置可以自行调整 }

d出菜单的布局,用ListVIEw 填充,然后由于要加圆角的背景,所以更改background

<?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/lvShouCangPop"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  androID:padding="2dp"  androID:background="@drawable/bg_shoucang_popup_bg"  androID:ListSelector="@drawable/izd_shoucang_delete_selector_pop"  /></linearLayout>

ListVIEw的圆角背景图片

<?xml version="1.0" enCoding="utf-8"?><selector xmlns:androID="http://schemas.androID.com/apk/res/androID"> <item>  <shape   xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:shape="rectangle" >   <solID androID:color="#eeeeee"/>   <corners androID:radius="8.0dip"/>  </shape> </item></selector>

然后你只要在你的逻辑代码中调用showPopWindow()这个方法就行了,是不是很简单!

紧接着开始讲自定义对话框了,因为很多app中都有这个功能,而且效果还不错!

public class DialogShouCangShare extends Dialog{ private Context myContext; private relativeLayout rlCancle; private GrIDVIEw grIDVIEw; //那些图片 private int[] data=new int[]{R.drawable.izd_shoucang_wechat,R.drawable.izd_shoucang_frIEnd,R.drawable.izd_shoucang_qq,R.drawable.izd_shoucang_weibo,R.drawable.izd_shoucang_qzone,R.drawable.izd_shoucang_email}; public DialogShouCangShare(Context context,String Title,String photoUrl,String contentUrl) {  super(context); } @OverrIDe protected voID onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  super.setContentVIEw(R.layout.izd_shoucang_dialog_share);  ShareSDK.initSDK(myContext);  grIDVIEw = (GrIDVIEw) super.findVIEwByID(R.ID.gv_share);  grIDVIEw.setSelector(new colorDrawable(color.transparent));  AdapterSCShareGrIDVIEw adapter=new AdapterSCShareGrIDVIEw(myContext,data);  grIDVIEw.setAdapter(adapter);  grIDVIEw.setonItemClickListener(new AdapterVIEw.OnItemClickListener() {   @OverrIDe   public voID onItemClick(AdapterVIEw<?> parent,long ID) {    switch (position) {     //对于GrIDVIEw中的item的点击事件    }    DialogShouCangShare.this.dismiss();   }  });  rlCancle = (relativeLayout) findVIEwByID(R.ID.shoucang_rlCancle);  rlCancle.setonClickListener(new VIEw.OnClickListener() {   @OverrIDe   public voID onClick(VIEw v) {    DialogShouCangShare.this.dismiss();   }  }); @OverrIDe public voID show() {  this.requestwindowFeature(Window.FEATURE_NO_Title);  this.requestwindowFeature(Window.FEATURE_ACTION_bar_OVERLAY);  this.setCanceledOntouchOutsIDe(true);  Window dialogWindow = this.getwindow(); //得到对话框  dialogWindow.setGravity(Gravity.left | Gravity.BottOM);  dialogWindow.getDecorVIEw().setpadding(0,0);  WindowManager.LayoutParams lp = dialogWindow.getAttributes();  lp.wIDth = WindowManager.LayoutParams.MATCH_PARENT;  lp.height = WindowManager.LayoutParams.WRAP_CONTENT;  dialogWindow.setAttributes(lp);  dialogWindow.setwindowAnimations(R.style.izd_dialogWindowAnim); //设置窗口d出动画,由styles配置,有进入和退出动画  //dialogWindow.setwindowAnimations(R.anim.dialog_enter_anim);  //  //  WindowManager.LayoutParams lp = dialogWindow.getAttributes();  //  lp.wIDth = 100; // 宽度  //  lp.height = 300; // 高度  //  //lp.Alpha = 0.7f; // 透明度  //  //dialogWindow.setAttributes(lp);  dialogWindow.setBackgroundDrawableResource(R.drawable.radius_shoucang_share_nopadding); //设置对话框背景//  dialogWindow.setBackgroundDrawableResource(R.color.izd_white); //设置对话框背景  super.show(); }}

再看下该对话框的布局文件:只有一个grIDVIEw 和relativeLayout

<?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:layout_margintop="10dp" androID:layout_marginleft="10dp" androID:layout_marginRight="10dp" androID:layout_marginBottom="8dp" androID:background="@color/transparent" > <linearLayout  androID:layout_wIDth="match_parent"  androID:orIEntation="vertical"  androID:layout_height="match_parent">  <GrIDVIEw   androID:ID="@+ID/gv_share"   androID:layout_wIDth="match_parent"   androID:layout_height="0dp"   androID:layout_weight="1"   androID:numColumns="3"   androID:verticalSpacing="-36dp"   androID:background="@drawable/bg_share_shoucang">  </GrIDVIEw>  <relativeLayout   androID:ID="@+ID/shoucang_rlCancle"   androID:layout_wIDth="match_parent"   androID:layout_height="48dp"   androID:layout_margintop="8dp"   androID:background="@drawable/bg_share_shoucang"   >   <TextVIEw    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:text="取消"    androID:textcolor="#009688"    androID:textSize="16sp"    androID:layout_centerInParent="true"/>  </relativeLayout> </linearLayout></linearLayout>

这是设置对话框的背景的布局文件,其实主要设置对话框的圆角,以及对话框颜色为透明就行了!

<?xml version="1.0" enCoding="utf-8"?><shape xmlns:androID="http://schemas.androID.com/apk/res/androID"> <solID androID:color="#ffffff"/> <corners androID:radius="4dp" /> <gradIEnt androID:startcolor="#00000000" androID:endcolor="#00000000"/></shape>

再次声明,这里使用GrIDVIEw是为了,方便以后填充更多的数据,如果用相对布局加线性布局,写死的话,以后若要再次添加数据的话,就要再去修改布局,比较麻烦!因为有前车之鉴的我,下面就是我之前不用GrIDVIEw去写的布局文件!新手如果想练手的话,可以尝试!

<?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" > <linearLayout  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:orIEntation="horizontal">   <relativeLayout    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_weight="1">    <linearLayout     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:orIEntation="vertical"     androID:layout_centerInParent="true">    <ImageVIEw     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:layout_margintop="32dp"     androID:src="@drawable/izd_shoucang_wechat"     androID:layout_centerHorizontal="true"/>    <TextVIEw     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:text="微信"     androID:layout_gravity="center"     androID:layout_margintop="9dp"     androID:layout_centerHorizontal="true"/>    </linearLayout>   </relativeLayout>   <relativeLayout    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_weight="1">    <linearLayout     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:orIEntation="vertical"     androID:layout_centerInParent="true">     <ImageVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_margintop="32dp"      androID:src="@drawable/izd_shoucang_frIEnd"      androID:layout_centerHorizontal="true"/>     <TextVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:text="朋友圈"      androID:layout_gravity="center"      androID:layout_margintop="9dp"      androID:layout_centerHorizontal="true"/>    </linearLayout>   </relativeLayout>   <relativeLayout    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_weight="1">    <linearLayout     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:orIEntation="vertical"     androID:layout_centerInParent="true">     <ImageVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_margintop="32dp"      androID:src="@drawable/izd_shoucang_qq"      androID:layout_centerHorizontal="true"/>     <TextVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:text="QQ好友"      androID:layout_gravity="center"      androID:layout_margintop="9dp"      androID:layout_centerHorizontal="true"/>    </linearLayout>   </relativeLayout>  </linearLayout>  <linearLayout   androID:layout_wIDth="match_parent"   androID:layout_height="wrap_content"   androID:orIEntation="horizontal">   <relativeLayout    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_weight="1">    <linearLayout     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:orIEntation="vertical"     androID:layout_centerInParent="true">     <ImageVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_margintop="24dp"      androID:src="@drawable/izd_shoucang_weibo"      androID:layout_centerHorizontal="true"/>     <TextVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:text="微博"      androID:layout_gravity="center"      androID:layout_margintop="9dp"      androID:layout_centerHorizontal="true"/>    </linearLayout>   </relativeLayout>   <relativeLayout    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_weight="1">    <linearLayout     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:orIEntation="vertical"     androID:layout_centerInParent="true">     <ImageVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_margintop="24dp"      androID:src="@drawable/izd_shoucang_qzone"      androID:layout_centerHorizontal="true"/>     <TextVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:text="QQ空间"      androID:layout_gravity="center"      androID:layout_margintop="9dp"      androID:layout_centerHorizontal="true"/>    </linearLayout>   </relativeLayout>   <relativeLayout    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_weight="1">    <linearLayout     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:orIEntation="vertical"     androID:layout_centerInParent="true">     <ImageVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_margintop="24dp"      androID:src="@drawable/izd_shoucang_email"      androID:layout_centerHorizontal="true"/>     <TextVIEw      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:text="邮箱"      androID:layout_gravity="center"      androID:layout_margintop="9dp"      androID:layout_centerHorizontal="true"/>    </linearLayout>   </relativeLayout>  </linearLayout> </linearLayout> <relativeLayout  androID:layout_wIDth="match_parent"  androID:layout_height="48dp"  androID:layout_margintop="8dp"  >  <TextVIEw   androID:layout_wIDth="wrap_content"   androID:layout_height="wrap_content"   androID:text="取消"   androID:textcolor="#009688"   androID:textSize="16sp"   androID:layout_centerInParent="true"/> </relativeLayout></linearLayout>

效果也是一样的!

然后你要使用该对话框的话,只要新建对话框就可以了!

DialogShouCangShare dialogShouCangShare=new DialogShouCangShare(myContext); //d出分享对话框 dialogShouCangShare.show();

总结

以上所述是小编给大家介绍的AndroID 自定义d出菜单和对话框功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的Android 自定义d出菜单和对话框功能实例代码全部内容,希望文章能够帮你解决Android 自定义d出菜单和对话框功能实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1144791.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存