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

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • Android中使用ListView绘制自定义表格技巧分享

    先上一下可以实现的效果图  要实现的效果有几方面 1.列不固定:可以根据数据源的不同生成不同的列数 2.表格内容可以根据数据源的定义合并列 3.要填写的单元格可以选择自定义键盘还是系统键盘 奔着这三点,做了个简单的实现,把源码贴一下(因为该点是主界面中的一部分,不便于放整个Demo) 自定义适配器,CallBackInterface是自定义的回调接口,这里定义回调是因为数据输入时需要及时保存 复制代码 代码如下: public class SiteDetailViewAdapter extend

  • Android自定义控件之开关按钮学习笔记分享

    今天来讲讲自定义单个控件,就拿开关按钮来讲讲,相信大家见了非常多这样的了,先看看效果: 我们可以看到一个很常见的开关按钮,那就来分析分析. 首先: 这是由两张图片构成: ①一张为有开和关的背景图片 ②一张为控制开和关的滑动按钮 第一步: 写个类继承View,并重写几个方法: 第一个为构造函数,重写一个参数的函数和两个参数的函数就够了,因为两个参数的函数能够使用自定义属性 第二个为控制控件的大小–>protected void onMeasure(int widthMeasureSpec, int

  • Android自定义PopupWindow仿点击弹出分享功能

    本文实例自定义PopupWindow,点击弹出PopupWindow,背景变暗,仿点击弹出分享功能,供大家参考,具体内容如下 注:参照大神代码写的 自定义代码 package com.duanlian.popupwindowdemo; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.Lay

  • android自定义窗口标题示例分享

    1.建好项目之后在它的layout文件夹下创建一个title.xml文件,作为自定义窗口标题的文件. 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent&

  • Android中制作自定义dialog对话框的实例分享

    自定义dialog基础版 很多时候,我们在使用android sdk提供的alerdialog的时候,会因为你的系统的不同而产生不同的效果,就好比如你刷的是MIUI的系统,弹出框都会在顶部显示!这里简单的介绍自定义弹出框的应用. 首先创建布局文件dialog: 代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.and

  • Android自定义控件之组合控件学习笔记分享

    我们来讲一下自定义组合控件,相信大家也接触过自定义组合控件吧,话不多说,直接干(哈~哈~): 大家看到这个觉得这不是很简单的吗,这不就是写个布局文件就搞定嘛,没错,确实直接上布局就行,不过,我只是用这个简单的例子来讲一下自定义组合控件的用法. 首先看看,这一行行的条目看起来都长得差不多,只是图片和文字不一样,没错,就是看中这一点,我们可以把一个条目做成一个组合控件,做为一个整体,这样不管你有几个条目,就写几个组合控件就行了. 步骤: 1.先建立组合控件的布局 myView.xml <Relati

  • 分享Android中Toast的自定义使用

    1.Toast源码分析 老规矩,我们先去看Toast的源码. Toast有两种显示布局方式,一种最常见调用Toast.makeText()  ,看源码是这样写的 public static Toast makeText(Context context, CharSequence text, @Duration int duration) { Toast result = new Toast(context); LayoutInflater inflate = (LayoutInflater) c

  • Android ImageButton自定义按钮的按下效果的代码实现方法分享

    使用Button时为了让用户有"按下"的效果,有两种实现方式:1.在代码里面. 复制代码 代码如下: imageButton.setOnTouchListener(new OnTouchListener(){ @Override                          public boolean onTouch(View v, MotionEvent event) {                                  if(event.getAction()

  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享

    如果想在自定义的View上面显示Button 等View组件需要完成如下任务 1.在自定义View的类中覆盖父类的构造(注意是2个参数的) 复制代码 代码如下: public class MyView2 extends View{ public MyView2(Context context,AttributeSet att) {super(context,att); } public void onDraw(Canvas c) { // 这里绘制你要的内容 } } 2.定义布局文件 复制代码

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

    本文实例讲述了Android编程实现自定义分享列表ACTION_SEND功能的方法.分享给大家供大家参考,具体如下: 看到最近都在做自定义的东西,因为比较灵活,还可以摆脱系统自身不怎么漂亮的UI,(大家都懂得)所以自己也做了下自定义的分享列表,用PopupWindow的方式弹出. 先上效果图: 1.布局: popup_share.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml

  • Android编程ProgressBar自定义样式之动画模式实现方法

    本文实例讲述了Android编程ProgressBar自定义样式之动画模式实现方法.分享给大家供大家参考,具体如下: 忘记在哪里看到的那位仁兄写的,就是通过用动画效果来实现的,现在顺便也把他写出来,希望那位仁兄不要见怪. 效果: 和之前的一样,在布局文件中: <ProgressBar android:id="@+id/progressBar3" android:layout_width="wrap_content" android:layout_height=

  • Android编程使用自定义shape实现shadow阴影效果的方法

    本文实例讲述了Android编程使用自定义shape实现shadow阴影效果的方法.分享给大家供大家参考,具体如下: 直接上xml文件, 并且附上相应的解析: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_p

  • Android编程实现添加低电流提醒功能的方法

    本文实例讲述了Android编程实现添加低电流提醒功能的方法.分享给大家供大家参考,具体如下: 特殊需求,检测电流是否正常. 监听如下广播: Intent.ACTION_BATTERY_CHANGED plugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); if(mLowElectricityRemind == null){ mLowElectricityRemind = new LowElectricityRemind(B

  • Android编程基于自定义View实现绚丽的圆形进度条功能示例

    本文实例讲述了Android编程基于自定义View实现绚丽的圆形进度条功能.分享给大家供大家参考,具体如下: 本文包含两个组件,首先上效果图: 1.ProgressBarView1(支持拖动): 2.ProgressBarView2(不同进度值显示不同颜色,不支持拖拽):   代码不多,注释也比较详细,全部贴上了: (一)ProgressBarView1: /** * 自定义绚丽的ProgressBar. */ public class ProgressBarView1 extends View

  • Android编程实现自定义title功能示例

    本文实例讲述了Android编程实现自定义title功能.分享给大家供大家参考,具体如下: 这里我在前面加了个logo,而且改变了title的背景和高度. 首先编写title的布局文件,title.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  • Android编程实现自定义输入法功能示例【输入密码时防止第三方窃取】

    本文实例讲述了Android编程实现自定义输入法功能.分享给大家供大家参考,具体如下: 对于Android用户而言,一般都会使用第三方的输入法.可是,在输入密码时(尤其是支付相关的密码),使用第三方输入法有极大的安全隐患.目前很多网银类的APP和支付宝等软件在用户输入密码时,都会弹出自定义的输入法而不是直接使用系统输入法. 这里介绍的就是如何实现一个简单的自定义输入法.当然,也可以自己写一个Dialog加上几十个按钮让用户输入,只不过这样显得不够专业. (一)首先上效果图: 1.前面两个输入框使

  • Android编程实现自定义ImageView圆图功能的方法

    本文实例讲述了Android编程实现自定义ImageView圆图功能的方法.分享给大家供大家参考,具体如下: 首先很感谢开源项目Universal Image Loader图片加载框架.之前也看过一段时间框架源码,但是却没有时间进行知识点的总结. 今天项目遇到了需要实现圆头像的编辑显示,Universal就已经提供了这个显示RoundedBitmapDisplayer这个类实现了圆图功能.看它的代码可以发现是实现的Drawable public static class RoundedDrawa

  • Android编程实现自定义Tab选项卡功能示例

    本文实例讲述了Android编程实现自定义Tab选项卡功能.分享给大家供大家参考,具体如下: import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.widget.*; import android.widget.TabHost.OnTabChangeListener; import android.os.Build; import androi

  • Android编程实现输入框动态自动提示功能

    本文实例讲述了Android编程实现输入框动态自动提示功能.分享给大家供大家参考,具体如下: 关于AutoCompleteTextView的使用,我想大家并不陌生,对其设定上Adapter后系统便能自己识别与匹配了.近期 一个项目中,需要做到匹配通迅录中的电话号码和联系人,由于通迅录中数据量大,所以把所有的数据在自己提示之前就查询出来并加入到 AutoCompleteTextView中是不现实的,所以我们可以使用cursor来动态加载AutoCompleteTextView的数据,从而 实现时时

随机推荐