前言
这是小编开启博客生涯的第一编技术文章,如果文章中存在问题,请各路大神多多指点哈!
今天小编将给大家实现一个从手机屏幕下方弹起的分享面板,效果如下:
实现思路
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());
}
}
}