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

起言

关于第三方分享,若只是简单的集成,只需参考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();
            }
        });
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white">
    <LinearLayout
        android:id="@+id/ll_sharing_makes"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv_invite_detail"
            android:layout_marginTop="11dp"
            android:layout_marginRight="30dp"
            android:layout_gravity="right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的邀请明细"
            android:textSize="13sp"
            android:textColor="@color/share_green"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="17dp"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@drawable/share_point_out_icon"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:text="分享赚"
                android:gravity="center"
                android:textColor="@color/colorAccent"
                android:textSize="16sp"/>

            <TextView
                android:id="@+id/tv_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="4dp"
                android:text=""
                android:textStyle="bold"
                android:textColor="@color/colorAccent"
                android:textSize="19sp"/>
        </LinearLayout>

        <TextView
            android:id="@+id/tv_price1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:text=""
            android:lineSpacingExtra="4sp"
            android:textColor="@color/colorAccent"
            android:textSize="13sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:text="积分可在“我的”-“我的法商值”里查看"
            android:lineSpacingExtra="4sp"
            android:textColor="@color/gray"
            android:textSize="12sp"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:layout_marginTop="35dp"
        android:layout_marginBottom="7dp">
        <ImageView
            android:layout_width="120dp"
            android:layout_height="1px"
            android:layout_marginTop="10dp"
            android:background="@drawable/gradient_line"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="14sp"
            android:textColor="@color/gray"
            android:layout_marginLeft="10dp"
            android:text="分享至"/>

        <ImageView
            android:layout_width="120dp"
            android:layout_height="1px"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="10dp"
            android:background="@drawable/gradient_line_right"/>
    </LinearLayout>

</LinearLayout>
    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();
            }
        });
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white">

    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="@color/layout_divider"/>

    <TextView
        android:id="@+id/tv_cancel"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="取消分享"
        android:textColor="#333333"
        android:textSize="17sp"/>

</LinearLayout>

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


图片.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的代码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="1500"
        android:fromAlpha="0.0"
        android:toAlpha="1.0"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="500"
        android:fromAlpha="1.0"
        android:toAlpha="0.0"/>
</set>

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

后记

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容