关闭

android-shareSDK解析&自定义分享UI&分享到指定平台。

99人阅读 评论(0) 收藏 举报

shareSDK能够集成快速分享。帮开发者把分享面板和示例代码都封装了。但是我们用不到分享面板。能用到的就是OneKeyShare作为快速集成的接口。

别忘了,我们可以自己定义分享面板。

官方给的快速生成代码示例有bug,分享面板滑到最后一页再回到第一页会出现问题,图标显示不全的问题。


其实在无界面方法里,我们也可以调用onekeyShare接口。并且是非常的方便。官方demo里也给出了说明:如果你指定了平台,就不会调用系统的界面。

/**
     * 演示调用ShareSDK执行分享
     *
     * @param context
     * @param platformToShare 指定直接分享平台名称(一旦设置了平台名称,则九宫格将不会显示)
假设把platformToShare
     * @param showContentEdit 是否显示编辑页
     */
    public static void showShare(Context context, String platformToShare, boolean showContentEdit) {
        OnekeyShare oks = new OnekeyShare();
        oks.setSilent(!showContentEdit);
        if (platformToShare != null) {
            // Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);platform字段就是SinaWeibo.NAME
            //指定了分享平台,直接分享到指定平台就可以了呀,就没有必要再让用户选择了。
            oks.setPlatform(platformToShare);
        }
        //ShareSDK快捷分享提供两个界面第一个是九宫格 CLASSIC  第二个是SKYBLUE
        oks.setTheme(OnekeyShareTheme.CLASSIC);
        // 令编辑页面显示为Dialog模式
        oks.setDialogMode();
        // 在自动授权时可以禁用SSO方式
        oks.disableSSOWhenAuthorize();
        //oks.setAddress("12345678901"); //分享短信的号码和邮件的地址
        oks.setTitle("ShareSDK--Title");
        oks.setTitleUrl("http://mob.com");
        oks.setText("ShareSDK--文本");
        //oks.setImagePath("/sdcard/test-pic.jpg");  //分享sdcard目录下的图片
        oks.setImageUrl("http://f1.webshare.mob.com/dimgs/1c950a7b02087bf41bc56f07f7d3572c11dfcf36.jpg");
        oks.setUrl("http://www.mob.com"); //微信不绕过审核分享链接
        //oks.setFilePath("/sdcard/test-pic.jpg");  //filePath是待分享应用程序的本地路劲,仅在微信(易信)好友和Dropbox中使用,否则可以不提供
        oks.setComment("分享"); //我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供
        oks.setSite("ShareSDK");  //QZone分享完之后返回应用时提示框上显示的名称
        oks.setSiteUrl("http://mob.com");//QZone分享参数
        oks.setVenueName("ShareSDK");
        oks.setVenueDescription("This is a beautiful place!");
        // 将快捷分享的操作结果将通过OneKeyShareCallback回调
        //oks.setCallback(new OneKeyShareCallback());
        // 去自定义不同平台的字段内容
        //oks.setShareContentCustomizeCallback(new ShareContentCustomizeDemo());
        // 在九宫格设置自定义的图标
        Bitmap logo = BitmapFactory.decodeResource(context.getResources(), R.drawable.addbyme);
        String label = "ShareSDK";
        OnClickListener listener = new OnClickListener() {
            public void onClick(View v) {

            }
        };
        oks.setCustomerLogo(logo, label, listener);

        // 为EditPage设置一个背景的View
        //oks.setEditPageBackground(getPage());
        // 隐藏九宫格中的新浪微博
        // oks.addHiddenPlatform(SinaWeibo.NAME);

        // String[] AVATARS = {
        // 		"http://99touxiang.com/public/upload/nvsheng/125/27-011820_433.jpg",
        // 		"http://img1.2345.com/duoteimg/qqTxImg/2012/04/09/13339485237265.jpg",
        // 		"http://diy.qqjay.com/u/files/2012/0523/f466c38e1c6c99ee2d6cd7746207a97a.jpg",
        // 		"http://diy.qqjay.com/u2/2013/0422/fadc08459b1ef5fc1ea6b5b8d22e44b4.jpg",
        // 		"http://img1.2345.com/duoteimg/qqTxImg/2012/04/09/13339510584349.jpg",
        // 		"http://diy.qqjay.com/u2/2013/0401/4355c29b30d295b26da6f242a65bcaad.jpg" };
        // oks.setImageArray(AVATARS);              //腾讯微博和twitter用此方法分享多张图片,其他平台不可以

        // 启动分享
        oks.show(context);
    }



选择dialog作为弹出框,popupWindow作为弹出框?

dialog效果:有一层蒙版的效果。这里我们选择dialog作为弹出框。

AlertDialog alertDialog = new AlertDialog.Builder(this)
                        .setTitle("观察效果")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                //snackbar在design包里
                                Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();
                            }
                        })
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        })
                        .create();
                alertDialog.show();


自定义dialog,并伴随进入退出动画。

public class CustomDialog extends AppCompatDialog {

    public CustomDialog(Context context) {
        super(context, R.style.share_dialog);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//去标题栏
        setContentView(R.layout.layout_share_dialog);
        int widthPixels = getContext().getResources().getDisplayMetrics().widthPixels;
        WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
        layoutParams.width = widthPixels;
        layoutParams.height = getContext().getResources().getDisplayMetrics().heightPixels/3;
        layoutParams.gravity = Gravity.BOTTOM;
        getWindow().setAttributes(layoutParams);
    }
}

style

<!--shareDialog的样式-->
    <style name="share_dialog" parent="Theme.AppCompat.Dialog">
        <item name="android:windowAnimationStyle">@style/dialog_animation</item>
        <item name="android:windowBackground">@color/white</item>
    </style>


    <style name="dialog_animation" parent="android:Animation">
        <item name="@android:windowEnterAnimation">@anim/push_bottom_in</item>
        <item name="@android:windowExitAnimation">@anim/push_bottom_out</item>
    </style>


    <color name="white">#fff</color>

anim

anim/push_bottom_in.xml

<?xml version="1.0" encoding="utf-8"?><!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="200"
        android:fromYDelta="50%p"
        android:toYDelta="0" />

</set>

anim/push_bottom_out.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    
    <translate
        android:duration="200"
        android:fromYDelta="0"
        android:toYDelta="50%p" />

</set>

在dialog里布局需要分享到的平台的图标


然后就是调用shareSDK的onekeyShare接口把内容分享到指定平台。







0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15076次
    • 积分:1173
    • 等级:
    • 排名:千里之外
    • 原创:108篇
    • 转载:19篇
    • 译文:0篇
    • 评论:2条
    最新评论