自定义view__封装Dialog-分享功能UI的实现
来源:互联网 发布:windows无法格式化cf 编辑:程序博客网 时间:2024/05/18 02:51
直接上图看效果
GitHub下载
实现的思路
- recyclerView–可以方便的添加多个分享,方便增加修改
- svg–svg可减少使得绘制更快,更流畅
- materialDialog–简洁大方
因为分享功能可能需要增加或修改,所以使用recyclerView来显示
看源码
item_share.xml
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatImageView android:id="@+id/img_share" android:layout_width="wrap_content" android:layout_height="wrap_content" android:minHeight="42dp" android:minWidth="42dp" app:srcCompat="@drawable/ic_moments" android:layout_marginLeft="8dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="8dp" android:layout_marginRight="8dp" app:layout_constraintRight_toRightOf="parent" /> <TextView android:id="@+id/tvShare" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginTop="8dp" android:text="盆友圈" android:gravity="center_horizontal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/img_share" app:layout_constraintVertical_bias="0.0" /></android.support.constraint.ConstraintLayout>
tip:这里使用的是ConstraintLayout布局,试过你无法使用的的话可改回Linnerlayout或添加下面的代码到app的build.gradle中
dependencies { compile 'com.android.support.constraint:constraint-layout:1.0.2'}
item的显示效果
dialog_share.xml 只有一个recyclerView
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <View style="@style/lineStyle" /><android.support.v7.widget.RecyclerView android:id="@+id/recyclerViewShare" android:layout_width="match_parent" android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView></LinearLayout>
activity_main.xml 这个没任何用处
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.jian.share.MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginRight="8dp" app:layout_constraintRight_toRightOf="parent" android:layout_marginLeft="8dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="8dp" /></android.support.constraint.ConstraintLayout>
ShareInfo.java 保存图标和文字
/** * Created by jian on 2017/6/10. */public class ShareInfo { private int imgId; private String name; public ShareInfo(int imgId, String name) { this.imgId = imgId; this.name = name; } public int getImgId() { return imgId; } public void setImgId(int imgId) { this.imgId = imgId; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
ShareAdapter.java 适配器
/** * Created by jian on 2017/6/10. */public class ShareAdapter extends RecyclerView.Adapter<ShareAdapter.MyViewHolder> { List<ShareInfo> shareInfos; public ShareAdapter(List<ShareInfo> shareInfos) { this.shareInfos = shareInfos; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_share, parent, false); return new MyViewHolder(v); } @Override public void onBindViewHolder(MyViewHolder holder, final int position) { ShareInfo shareInfo = shareInfos.get(position); holder.imageView.setImageResource(shareInfo.getImgId()); holder.textView.setText(shareInfo.getName()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(onShareClickListener!=null){ onShareClickListener.onClick(position); } } }); } public void setOnShareClickListener(OnShareClickListener onShareClickListener) { this.onShareClickListener = onShareClickListener; } @Override public int getItemCount() { return shareInfos.size(); } private OnShareClickListener onShareClickListener; public interface OnShareClickListener { void onClick(int position); } class MyViewHolder extends RecyclerView.ViewHolder { private AppCompatImageView imageView; private TextView textView; public MyViewHolder(View itemView) { super(itemView); imageView = (AppCompatImageView) itemView.findViewById(R.id.img_share); textView = (TextView) itemView.findViewById(R.id.tvShare); } }}
ShareDialog.java 这个是主要的代码
/** * Created by jian on 2017/6/10. */public abstract class ShareDialog { private Context mContext; public ShareDialog(Context mContext) { this.mContext = mContext; initShareInfo(); } private void initShareInfo() { ShareInfo shareInfo = new ShareInfo(R.drawable.ic_wechat, "微信"); shareInfos.add(shareInfo); shareInfo = new ShareInfo(R.drawable.ic_moments, "朋友圈"); shareInfos.add(shareInfo); shareInfo = new ShareInfo(R.drawable.ic_qq, "QQ"); shareInfos.add(shareInfo); shareInfo = new ShareInfo(R.drawable.ic_qqkongjian, "空间"); shareInfos.add(shareInfo); } private List<ShareInfo> shareInfos = new ArrayList<>(); private View dialogView; private RecyclerView recyclerView; AlertDialog.Builder builder; AlertDialog dialog; public void showDialog() { if (dialogView == null) { //只初始化一次 dialogView = LayoutInflater.from(mContext).inflate(R.layout.dialog_share, null, false); recyclerView = (RecyclerView) dialogView.findViewById(R.id.recyclerViewShare); ShareAdapter shareAdapter = new ShareAdapter(shareInfos); shareAdapter.setOnShareClickListener(new ShareAdapter.OnShareClickListener() { @Override public void onClick(int position) { onShareItemClick(position); dialog.hide(); } }); recyclerView.setLayoutManager(new GridLayoutManager(mContext, 3)); recyclerView.setAdapter(shareAdapter); builder = new AlertDialog.Builder(mContext); TextView title = new TextView(mContext); title.setText("分享方式"); title.setPadding(10, 16, 10, 16);//设置title的边距 left top ,right,bottom title.setGravity(Gravity.CENTER);//标题居中// title.setTextColor(getResources().getColor(R.color.greenBG)); title.setTextSize(23); builder.setCustomTitle(title); builder.setView(dialogView); dialog = builder.create(); dialog.show(); } else{ dialog.show(); } } abstract void onShareItemClick(int position);}
MainActivity 只在这里调用显示
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ShareDialog shareDialog = new ShareDialog(this) { @Override void onShareItemClick(int position) { //点击的位置 Log.i("onClick", position + ""); } }; shareDialog.showDialog();//显示dialog }}
好了。基本就这样,dialog被封装好后,只需要new一个然后调用showDialog()方法就可显示分享页面,同时监听点击动作
GitHub下载
欢迎留言交流
阅读全文
1 0
- 自定义view__封装Dialog-分享功能UI的实现
- 自定义Dialog实现类似Toast的功能
- Android自定义系统分享UI,不使用系统的Dialog和Actionbar,完全自定义
- Android开发之自定义dialog的实现(源代码分享)
- Android开发之自定义dialog的实现(源代码分享)
- Android开发之自定义dialog的实现(源代码分享)
- Android 自定义Dialog实现步骤及封装
- 自定义dialog的实现
- 各种dialog的封装实现
- 各种dialog的封装实现
- Android实现自定义分享功能
- Android 自定义dialog(封装好的)
- 封装自定义的Dialog和Toast
- Android 自定义通用Dialog的封装
- 【自定义Dialog】封装IOS样式的圆角Dialog
- android Dialog 自定义 封装
- 自定义dialog简单封装
- 基于thinkPHP实现的微信自定义分享功能示例
- try catch总结
- angular---angular4学习笔记:angular中的模块化@NgModule装饰器
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全外连接
- 蘑*街面试感想和总结
- redis入门学习
- 自定义view__封装Dialog-分享功能UI的实现
- zynq学习笔记——EMIO方式模拟I2C时序对ADV7511进行读写
- 策略模式用于封装系列的算法,这些算法通常被封装在一个被称为 Context 类中,客户端程序可以自由选择其中一种算法
- 疯狂的bLue
- 动态规划求解矩阵连乘
- POJ 1973 Software Company 笔记
- Android 进阶16:IntentService 使用及源码解析
- 【Leetcode】58. Length of Last Word
- 流程python学习笔记:第三章(2)