当前位置: 移动技术网 > IT编程>移动开发>Android > Android编程实现自定义分享列表ACTION_SEND功能的方法

Android编程实现自定义分享列表ACTION_SEND功能的方法

2019年07月24日  | 移动技术网IT编程  | 我要评论

彩云,人民的名义网盘资源,电脑赚钱项目

本文实例讲述了android编程实现自定义分享列表action_send功能的方法。分享给大家供大家参考,具体如下:

看到最近都在做自定义的东西,因为比较灵活,还可以摆脱系统自身不怎么漂亮的ui,(大家都懂得)所以自己也做了下自定义的分享列表,用popupwindow的方式弹出。

先上效果图:

1、布局:

popup_share.xml

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" >
 <listview
    android:id="@+id/share_list"
    android:background="#2f4f4f"
    android:fadingedge="none"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:cachecolorhint="#00000000"
    android:divider="#e2dd75"
    android:dividerheight="1.0dip"
    android:headerdividersenabled="true"
    android:footerdividersenabled="false" />
</linearlayout>

popup_share_item.xml

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:gravity="center_vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="2.0dip" >
  <imageview
    android:id="@+id/share_item_icon"
    android:layout_width="32.0dip"
    android:layout_height="32.0dip"
    android:layout_marginleft="3.0dip"
    android:scaletype="fitxy" />
  <textview
    android:id="@+id/share_item_name"
    android:gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="分享"
    android:textcolor="@color/white"
    android:singleline="true"
    android:textsize="@dimen/s_size"
    android:layout_marginleft="3.0dip"
    android:layout_marginright="3.0dip" />
</linearlayout>

2、查询手机内所有支持分享的应用列表

public list<resolveinfo> getshareapps(context context) {
    list<resolveinfo> mapps = new arraylist<resolveinfo>();
    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;
}

注:applicationinfo是从一个特定的应用得到的信息。这些信息是从相对应的androdimanifest.xml的< application>标签中收集到的。

resolveinfo这个类是通过解析一个与intentfilter相对应的intent得到的信息。它部分地对应于从androidmanifest.xml的< intent>标签收集到的信息。

得到list列表,我自建的appinfo类,自己建一个就行

private list<appinfo> getshareapplist() {
    list<appinfo> shareappinfos = new arraylist<appinfo>();
    packagemanager packagemanager = getpackagemanager();
    list<resolveinfo> resolveinfos = getshareapps(mcontext);
    if (null == resolveinfos) {
      return null;
    } else {
      for (resolveinfo resolveinfo : resolveinfos) {
        appinfo appinfo = new appinfo();
        appinfo.setapppkgname(resolveinfo.activityinfo.packagename);
//       showlog_i(tag, "pkg>" + resolveinfo.activityinfo.packagename + ";name>" + resolveinfo.activityinfo.name);
        appinfo.setapplauncherclassname(resolveinfo.activityinfo.name);
        appinfo.setappname(resolveinfo.loadlabel(packagemanager).tostring());
        appinfo.setappicon(resolveinfo.loadicon(packagemanager));
        shareappinfos.add(appinfo);
      }
    }
    return shareappinfos;
}

3、弹出popupwindow的实现

private void initsharepopupwindow(view parent) {
    popupwindow sharepopupwindow = null;
    view view = null;
    listview sharelist = null;
    if(null == sharepopupwindow) {
      //加载布局文件
      view = layoutinflater.from(detailexchangeactivity.this).inflate(r.layout.popup_share, null);
      sharelist = (listview) view.findviewbyid(r.id.share_list);
      list<appinfo> shareappinfos = getshareapplist();
      final sharecustomadapter adapter = new sharecustomadapter(mcontext, shareappinfos);
      sharelist.setadapter(adapter);
      sharelist.setonitemclicklistener(new onitemclicklistener() {
        @override
        public void onitemclick(adapterview<?> parent, view view,
            int position, long id) {
          // todo auto-generated method stub
          intent shareintent = new intent(intent.action_send);
          appinfo appinfo = (appinfo) adapter.getitem(position);
          shareintent.setcomponent(new componentname(appinfo.getapppkgname(), appinfo.getapplauncherclassname()));
          shareintent.settype("text/plain");
//         shareintent.settype("*/*");
          //这里就是组织内容了,
          shareintent.putextra(intent.extra_text, "测试,这里发送推广地址");
          shareintent.setflags(intent.flag_activity_new_task);
          detailexchangeactivity.this.startactivity(shareintent);
        }
      });
      sharepopupwindow = new popupwindow(view,
          (int)(160 * density), linearlayout.layoutparams.wrap_content);
    }
    //使其聚焦
    sharepopupwindow.setfocusable(true);
    //设置允许在外点击消失
    sharepopupwindow.setoutsidetouchable(true);
    // 这个是为了点击“返回back”也能使其消失,并且并不会影响你的背景
    sharepopupwindow.setbackgrounddrawable(new bitmapdrawable());
    //xoff,yoff基于anchor的左下角进行偏移。正数表示下方右边,负数表示(上方左边)
    //showasdropdown(parent, xpos, ypos);
    sharepopupwindow.showasdropdown(parent, -5, 5);
}

注:sharecustomadapter自己建一个就行了。(有一个图标和一个分享的名)

更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网