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

前言
这是小编开启博客生涯的第一编技术文章,如果文章中存在问题,请各路大神多多指点哈!
今天小编将给大家实现一个从手机屏幕下方弹起的分享面板,效果如下:
运行效果
实现思路
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值