We can see that we have recently made custom things. Because of its flexibility, we can also get rid of the system's own pretty UI (everyone knows) so I also made a custom share list, which is displayed in the popupwindow mode.
First:
1. Layout:Popup_pai.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_assist_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/pai_item_icon" Android: layout_width = "32.0dip" Android: layout_height = "32.0dip" Android: layout_marginleft = "3.0dip" Android: scaletype = "fitxy"/> <textview Android: Id = "@ + ID/pai_item_name" Android: gravity = "center" Android: layout_width = "wrap_content" Android: layout_height = "wrap_content" Android: text = "sharing" Android: textcolor = "@ color/White" Android: singleline = "true" Android: textsize = "@ dimen/s_size" Android: layout_marginleft = "3.0dip" Android: layout_marginright = "3.0dip"/> </linearlayout>
2. query the list of all apps that support sharing on the mobile phone.
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;}
Note: applicationinfo is the information obtained from a specific application. This information is collected from the <Application> tag of androdimanifest. xml. The resolveinfo class is obtained by parsing the intent corresponding to the intentfilter. It partially corresponds to the information collected from the <intent> tag of androidmanifest. xml. Obtain the list. Create one of my self-built appinfo classes.
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. Pop-up popupwindow implementation
Private void init1_popupwindow (view parent) {popupwindow export popupwindow = NULL; view = NULL; listview sharelist = NULL; If (null = export popupwindow) {// load layout file view = layoutinflater. from (detailexchangeactivity. this ). inflate (R. layout. popup_share, null); sharelist = (listview) view. findviewbyid (R. id. pai_list); List <appinfo> export appinfos = get1_applist (); Final sharecustomadapter adapter = new Sharecustomadapter (mcontext, shareappinfos); sharelist. setadapter (adapter); sharelist. setonitemclicklistener (New onitemclicklistener () {@ overridepublic void onitemclick (adapterview <?> Parent, view, int position, long ID) {// todo auto-generated method stubintent specify intent = new intent (intent. action_send); appinfo = (appinfo) adapter. getitem (position); specified intent. setcomponent (New componentname (appinfo. getapppkgname (), appinfo. getapplauncherclassname (); Specify intent. settype ("text/plain"); // specify intent. settype ("*/*"); // here is the organization content, which contains intent. putextra (intent. extra_text, "Test, send the promotion address here"); your intent. setflags (intent. flag_activity_new_task); detailexchangeactivity. this. startactivity (intent) ;}}); intent popupwindow = new popupwindow (view, (INT) (160 * density), linearlayout. layoutparams. wrap_content);} // enables it to focus on sharepopupwindow. setfocusable (true); // you can specify whether or not to click sharepopupwindow. setoutsidetouchable (true); // you can click "back" to make it disappear without affecting your background. setbackgrounddrawab Le (New bitmapdrawable (); // xoff, yoff offset based on the lower left corner of anchor. Positive number indicates the right of the lower part, negative number indicates (left above) // showasdropdown (parent, xpos, ypos); then popupwindow. showasdropdown (parent,-5, 5 );}
Note: You can create one sharecustomadapter on your own. (There is an icon and a name for sharing)
Reference address:
Packageinfo, resolveinfo