android dialog菜单,android BottomSheetDialog优雅实现分享菜单

BottomSheetDialog是23.2中加的一个新的控件,继承AppCompatDialog类

官方描述Base class for Dialogs styled as a bottom sheet.

使用起来 很简单,

BottomSheetDialog dialog = new BottomSheetDialog(this);

dialog.setContentView(view);

dialog.show();

创建一个BottomSheetDialog 然后setContentView,剩下的就是对view进行操作

我们就是实现一个分享菜单先上效果图

864c1b0155e3

Gif_20170706143933.gif

实现

BottomSheetDialog dialog = new BottomSheetDialog(MainActivity.this);

View view = View.inflate(MainActivity.this, R.layout.bottom_dialog, null);

dialog.setContentView(view);

recyclerView = (RecyclerView) dialog.findViewById(R.id.recycler);

recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this, 3));

recyclerView.setHasFixedSize(true);

recyclerView.setAdapter(new Adapter());

dialog.show();

adapter

public class Adapter extends RecyclerView.Adapter {

Adapter() {

list = getShareAppList();

if (list == null) {

return;

}

}

@Override

public ViewHolde onCreateViewHolder(ViewGroup parent, int viewType) {

return new ViewHolde(getLayoutInflater().inflate(R.layout.recycler_item, null));

}

@Override

public void onBindViewHolder(ViewHolde holder, final int position) {

holder.appTextView.setText(list.get(position).appName);

holder.iconImageView.setImageDrawable(list.get(position).icon);

holder.itemView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent shareIntent = new Intent(Intent.ACTION_SEND);

AppBean appBean = list.get(position);

shareIntent.setComponent(new ComponentName(appBean.pkgName, appBean.appLauncherClassName));

shareIntent.setType("text/plain");

shareIntent.putExtra(Intent.EXTRA_TEXT, "分享内容");

shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(shareIntent);

}

});

}

@Override

public int getItemCount() {

return list == null ? 0 : list.size();

}

}

获取应用分享代码

public List getShareApps(Context context) {

List mApps = new ArrayList();

Intent intent = new Intent(Intent.ACTION_SEND, null);

intent.addCategory(Intent.CATEGORY_DEFAULT);

intent.setType("text/plain");

// intent.setType("*/*");

PackageManager pManager = context.getPackageManager();

mApps = pManager.queryIntentActivities(intent,

PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);

return mApps;

}

private List getShareAppList() {

List shareAppInfos = new ArrayList();

PackageManager packageManager = getPackageManager();

List resolveInfos = getShareApps(MainActivity.this);

if (null == resolveInfos) {

return null;

} else {

for (ResolveInfo resolveInfo : resolveInfos) {

AppBean appBean = new AppBean();

appBean.pkgName = (resolveInfo.activityInfo.packageName);

// showLog_I(TAG, "pkg>" + resolveInfo.activityInfo.packageName + ";name>" + resolveInfo.activityInfo.name);

appBean.appLauncherClassName = (resolveInfo.activityInfo.name);

appBean.appName = (resolveInfo.loadLabel(packageManager).toString());

appBean.icon = (resolveInfo.loadIcon(packageManager));

shareAppInfos.add(appBean);

}

}

return shareAppInfos;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值