简单实现从底部弹起的分享BottomDialog

来源:互联网 发布:web os 软件 编辑:程序博客网 时间:2024/05/29 19:46

前言
这是小编开启博客生涯的第一编技术文章,如果文章中存在问题,请各路大神多多指点哈!
今天小编将给大家实现一个从手机屏幕下方弹起的分享面板,效果如下:
运行效果
实现思路
1.自定义Dialog继承DialogFragment
2.自定义style
具体步骤
一、自定义Dialog继承DialogFragment
1.首先是继承官方DialogFragment,添加recycleview控件到自定义的Dialog的主布局文件中,然后重写OnCreateView方法并这个方法中给recylceview设置适配器(适配器代码后面会给出)和把recycleview设置为GridLayout模式来实现面板的项目网格式分布。
`public class Fragment_dialog extends DialogFragment {
RecyclerView recycleBottom;
private Bottom_sheetAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.my_bottom_sheets, null);
recycleBottom= (RecyclerView) v.findViewById(R.id.recycle_bottom);
adapter=new Bottom_sheetAdapter();
GridLayoutManager m=new GridLayoutManager(getActivity(),3);
recycleBottom.setLayoutManager(m);
recycleBottom.setAdapter(adapter);
return v;
}

2.在OncreateDialog方法中运用Dialog创建一个Dialog,并把这个Dialog的style设置为自定义style.
//重点部分
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
*Dialog alertDialog=new Dialog(getActivity(),R.style.MyBottom_sheet_style);
alertDialog.setContentView(R.layout.my_bottom_sheets);
alertDialog.setCanceledOnTouchOutside(true)//点击面板外部可以dismiss面板
Window window=alertDialog.getWindow();
WindowManager.LayoutParams wlp=window.getAttributes();
wlp.gravity= Gravity.BOTTOM;//设置面板的位置在屏幕底部
wlp.width=WindowManager.LayoutParams.MATCH_PARENT;
wlp.height=WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(wlp);
return alertDialog;*
}
}
二、自定义style

 <style name="MyBottom_sheet_style">        <item name="android:backgroundDimEnabled">false</item>        <item name="android:windowNoTitle">true</item>       <item name="android:windowAnimationStyle">@style/Animation.Design.BottomSheetDialog</item>//注意要把android support library 升级到23.2版本要不然是无法运用Animation.Design.BottomSheetDialog属性    </style>

三、在MainActivity运用
在MainActivity中的点击事件中动态创建自定义的Dialog对象

  protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @OnClick(R.id.btn)    public void onClick() {       Fragment_dialog dialog=new Fragment_dialog();        dialog.show(getSupportFragmentManager(),"bottom");    }}

适配器代码

public class Bottom_sheetAdapter extends RecyclerView.Adapter<Bottom_sheetAdapter.Myholder> {    private Share_Item_ClickListener share_item_click;    @Override    public Myholder onCreateViewHolder(ViewGroup parent, int viewType) {        Myholder myholder=null;        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.bottom_sheets_item_layout,null);        myholder=new Myholder(view,share_item_click);        return myholder;    }    @Override    public void onBindViewHolder(Myholder holder, int position) {        switch (position){            case 0:                holder.iv.setImageResource(R.drawable.wechat_circle);                holder.tv.setText("朋友圈");                break;            case 1:                holder.iv.setImageResource(R.drawable.wechat);                holder.tv.setText("微信");                break;            case 2:                holder.iv.setImageResource(R.drawable.qq);                holder.tv.setText("QQ");                break;            case 3:                holder.iv.setImageResource(R.drawable.qq_zone);                holder.tv.setText("QQ空间");                break;            case 4:                holder.iv.setImageResource(R.drawable.xinlang);                holder.tv.setText("新浪微博");                break;            case 5:                holder.iv.setImageResource(R.drawable.tecent);                holder.tv.setText("腾讯微博");                break;        }    }    public void setShare_item_click(Share_Item_ClickListener listener){        this.share_item_click=listener;    }    @Override    public int getItemCount() {        return 6;    }    static class Myholder extends RecyclerView.ViewHolder implements View.OnClickListener {        public RelativeLayout share_item;        public ImageView iv;        public TextView tv;        private Share_Item_ClickListener itemClickListener;        public Myholder(View itemView, Share_Item_ClickListener itemClickListener) {            super(itemView);            iv= (ImageView) itemView.findViewById(R.id.share_image);            tv= (TextView) itemView.findViewById(R.id.tv_text);            share_item= (RelativeLayout) itemView.findViewById(R.id.share_parent);            this.itemClickListener=itemClickListener;            share_item.setOnClickListener(this);        }        @Override        public void onClick(View v) {            itemClickListener.OnShare_itemClick(getAdapterPosition());        }    }}
2 0