浅谈第三方分享自定义页面和参数的一些坑

起言

关于第三方分享,若只是简单的集成,只需参考http://wiki.mob.com/android-sharesdk%e5%ae%8c%e6%95%b4%e7%9a%84%e9%9b%86%e6%88%90%e6%96%87%e6%a1%a3/页面的文档说明,即可实现效果,可若是要对分享的页面,以及显示参数进行一些操作的话,那就需要一些其他的办法实现了,话不多说,开始今天的正题。

页面的修改

若是针对自家的app,对分享页面有特殊的要求,可以采取自定义的方法,重写页面,然后,在点击分享按钮时,调取第三方的分享方法即可(可惜我不会,~~~(>_<)~~~,有会的大佬可以给个链接让鄙人学习一下)。
还好我们公司的app对分享页面要求没那么高,我就直接在引进的第三方包里面做修改。
主要修改的下面两个类,如下图:

图片.png

注:我是采取的快速生成项目的方法,即直接下载sharesdk,然后点击如下图的按钮,去生成:
图片.png

然后,把生成的项目,丢到自己项目,对应的包里面即可。
接下来说几点页面的简单修改:
图片.png

1.修改PlatformPageAdapter这一行,可以消除背景色里的间隔线;
图片.png

2.修改这一段,可以改变背景的颜色;
图片.png

3.这段代码可以修改第三方分享图标的图案;
图片.png

4.在PlatformPage中,这段代码,是分享图标和名称的部分,可在上下修改增加布局。
以我司项目代码为例:

        View view = View.inflate(activity, R.layout.share_item,null);
        view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
        llPanel.addView(view);
        LinearLayout ll_sharing_makes = view.findViewById(R.id.ll_sharing_makes);
        TextView tv_price = view.findViewById(R.id.tv_price);
        TextView tv_price1 = view.findViewById(R.id.tv_price1);
        TextView tv_invite_detail  = view.findViewById(R.id.tv_invite_detail);
        if (isPrice > 0) {
            ll_sharing_makes.setVisibility(View.VISIBLE);
        } else {
            ll_sharing_makes.setVisibility(View.GONE);
        }
        tv_invite_detail.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
        tv_invite_detail.getPaint().setAntiAlias(true);    //抗锯齿
        tv_price.setText("¥ " + isPrice);
        tv_price1.setText("每当有一个好友通过你分享的链接购买成功,你将获得" + isPrice + "个法商值(即¥ " + isPrice + ")哦~");
        tv_invite_detail.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                SimpleBackActivity.launch(activity, SimpleBackPage.INVITE_DETAIL, null);
                finish();
            }
        });


    
        
        

            

            

            
        

        

        
    

    
        

        

        
    


    View view_bottom = View.inflate(activity, R.layout.share_cancel,null);
        view_bottom.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, DisplayUtils.dp2px(activity,50)));
        llPanel.addView(view_bottom);
        TextView tv_cancel = view_bottom.findViewById(R.id.tv_cancel);
        tv_cancel.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });



    

    


添加上述代码后,分享页面布局变成了如下图所示:


图片.png

补充说明:
1.若是要更改第三方分享的排列顺序,可以修改assets下的shareSDK.xml文件内,各个第三方分享的Id值,数值较小的排在前面。
2.若是需要更改,第三方的分享图标,可以修改如下图所示:

图片.png

用UI设计师给的图,同名替换即可。
3.如下图所示,修改PlatformPageAdapterPort的LINE_SIZE_P,可以更改一行分享图标的数量,因我在这里修改成了两个,所以一行只有两个,且分左右排列。


图片.png

5.增加分享的参数


图片.png

先在PlatformPage修改这个构造方法,增加需要增加的参数;
图片.png

图片.png

再在PlatformPageLand与PlatformPagePort这两个类构造里,增加分享的参数;

然后在OnekeyShare类,增加set方法:

    /**
     * 显示额外的提示奖励的数额,小于或等于0,不显示额外布局
     * @param isPrice
     */
    public void setShowExtraPrice(int isPrice){
        params.put("showExtraPriceLayout",isPrice);
    }

然后,在OnekeyShareThemeImpl中,加上如红框所示的代码


图片.png

以及


图片.png

接下来,是ClassicTheme增加的代码:
图片.png

这样一来,便可在第三方分享中,增加新的参数,各位可以根据各自的项目需要去修改,只是这样写,代码的可扩展性不高,不知道有没有更加高明的写法……
6.分享退出时的动画
第三方的分享,看似是个弹窗,是个dialog或者popupwindow,实际上却是activity,因为:


图片.png

图片.png

而FakeActivity实际上也并不是个activity,因为:
图片.png

若是查fake这个单词的本意,就是欺骗,假的。
图片.png

让退出动画,有了一部分activity的特性,如果要让分享弹窗退出时,效果和dialog或pupupwindow退出时类似,则需要修改其进出场动画,代码如下:
public boolean onFinish() {
        if (finished) {
            finished = false;
            return false;
        }

        animHide.setAnimationListener(new Animation.AnimationListener() {
            public void onAnimationStart(Animation animation) {

            }

            public void onAnimationRepeat(Animation animation) {

            }

            public void onAnimationEnd(Animation animation) {
                if (beforeFinish == null) {
                    // 取消分享菜单的统计
                    ShareSDK.logDemoEvent(2, null);
                } else {
                    beforeFinish.run();
                    beforeFinish = null;
                }

                finished = true;
                finish();
                activity.overridePendingTransition(R.anim.fade_in,R.anim.fade_out_share_activity);
            }
        });
        llPanel.clearAnimation();
        llPanel.setAnimation(animHide);
        llPanel.setVisibility(View.GONE);
        return true;
    }

修改的是PlatformPage的onFinish()方法,关键代码就一行:

activity.overridePendingTransition(R.anim.fade_in,R.anim.fade_out_share_activity);

另外附上fade_in和fade_out_share_activity的代码:



    



    

便可以实现分享退出动画,是渐隐退出的。

后记

这次有关于第三方分享的自定义页面和参数设置,可能有讲得不透彻与不对的地方,却还是有一定的可取之处,欢迎大家学习、吐槽、分享,一起共同的进步。

你可能感兴趣的:(浅谈第三方分享自定义页面和参数的一些坑)