官方社群在线客服官方频道防骗查询货币工具

全球主流社交媒体算法解析:Facebook、YouTube、Twitter如何利用算法推荐内容?

2025-01-13 01:22:07
news.like.tgnews.like.tgnews.like.tgnews.like.tg

LIKE.TG 成立于2020年,总部位于马来西亚,是首家汇集全球互联网产品,提供一站式软件产品解决方案的综合性品牌。唯一官方网站:www.like.tg

作者

Ste Davies (转载自“腾讯媒体研究院”)

在如今的世界中,算法已经成为了我们日常生活的核心。当你进行网络搜索,滚动浏览社交媒体上的信息,或者从Spotify上接收到歌曲推荐时,实际上你正在被算法指导,甚至算法比你本人更了解你的消费习惯。

每天,你的决策和选择都会受到算法的影响。这些数学上的计算会影响你在亚马逊上的购买决定、你的购物历程,甚至是否在购物车中保留你喜欢的麦片。

算法就像魔术一样,当他们正在运行时,你完全无法识别他们。他们在你和你的任务之间悄无声息地运作着。虽然听起来很危险,但总的来说,算法可以为你提供帮助。

社交媒体算法正在成为你所做的所有事情的核心。虽然算法经常错误地理解人类,出现不准确的情况,但是他们一直在学习。

你,以及整个社会的新闻和信息消费方式可以直接归因于算法。

无论是在Google上搜索还是在Facebook和Twitter上滚动浏览,呈现的新闻和信息的方式均来自一个数学方程式,基于以下两个因素:

1.算法质量——内容的质量标准。

2.历史记录——过去你对特定内容所做的动作和反应。

这意味着无论是被设计的还是个人选择,社交媒体算法都使我们能够创建过滤器以查看所需内容,并删除所有我们不需要的内容。

此外,业内还出现了一种“算法可能会引起信息极化和偏差”的说法。因此,了解算法并了解算法何时发挥作用,这一点很重要。

算法的重要性还体现在哈佛商学院的一项研究中,研究发现人们更有可能遵循来自算法的建议,而不是人的建议。这正是本文诞生的原因之一。

本文提供了一种指导方法——当算法控制了你的阅读时,你该如何思考。

首先,本文并不打算列出算法内部的确切的计算原理,而是将重点放在囊括当前主流社交媒体算法的主要特点。其次,文中所展示的图表并不是算法的可视化,它们更多地是展示某些决定性问题,而不是算法方程式。

本文作者为Ste Davies,由腾讯媒体研究院编译。你可以遵循这篇文章来迭代自身内容,以确保能在各大平台获得最大的影响。

本文内容纲要:

  • Facebook算法发展及解析
  • Twitter算法发展及解析
  • Instagram算法发展及解析
  • YouTube算法发展及解析

日新月异的社交媒体算法

早期社交媒体的目的是为那些在现实生活中无法联系的人们提供一个线上联系的渠道。

比如Facebook上的家人和朋友;Linkedln上的同事和工作熟人;以及Twitter上的任何人。

随着各平台不断地成长,以及不断地探索变现的方法,这些平台开始丰富他们的产品。新闻分发是其中的关键组成部分。

社交媒体尤其是Facebook,开始把自己定位为新闻发布的渠道。随着越来越多的人开始通过他们接收新闻,Facebook改变了自己的算法以适应这种变化,

新闻出版机构致力于在这些平台上扩大受众,并越来越多地制作简短有趣又可共享的内容。

2015年,Facebook超越Google,成为新闻网站的第一大流量来源,巩固了其作为社交网络巨头的地位。

然而,事故随之而来。

标题党文章、虚假新闻、机器人、网络喷子开始占领社交媒体平台。Facebook算法(也许是世界上最著名的算法)处于漩涡中心。

报告显示,人们在访问Facebook和Twitter之后感到更高程度的焦虑和不满。社交媒体平台变成了黄色新闻的传播者,他们没有建立人与人之间的交流,反而促使了群体的分裂。

自2018年以来,社交媒体算法的潮流再次改变。

Facebook宣布,他们打算优先传播“有意义的对话”而不是新闻报道。

Twitter正在终止平台上的自动化,这意味着所有由机器人创造的虚假数据如点赞,关注或者转发将会被消除。

LinkedIn的状态更新优先级将给予那些敢于展示更多个性化和个人生活的专业用户。

所有的平台都将优先展示自己平台上的原创内容,而不是第三方链接。

在2018年,“搜索”超过了“社交”,自2015年来首次成为社交网站上新闻网站的更大引荐来源。

这是社交媒体新时代的开始。如今这个时代更注重人际关系,而不是信息消费。

这也是为什么如今网红营销蒸蒸日上的原因之一。品牌希望与社交媒体网红合作,因为他们已经与受众建立了深厚的联系。

算法规则再次被改变。对于许多发布者而言,这意味着流量的终结,甚至在某些情况下,这意味着他们整个业务模型的终结。

对于那些希望在社交媒体中分一杯羹的品牌来说,它们则需要转变观念。

现在的算法不仅仅是为一个受众,而是关于建立社区;不再是吸引注意力,而是使内容更具对话性;它的最终目的是用更坦白的方法参与用户的社交活动。

为什么我们需要了解社交媒体算法

如果不理解社交媒体算法是如何工作的,就如同在黑夜中开车不开灯。

虽然在这种情况下你也有可能达成目标,但我们没有必要冒这个风险。

简而言之,出于以下原因,你需要了解它们:

  • 影响:确保您的内容产生最大的影响
  • 投资回报率:确保你为内容制作和发布所花费的时间和精力能获得最大的回报。
  • 声誉:长期成为算法系统中的可靠信息源。
  • 扩大社会影响力:我们必须能够“以其人之道还治其人之身”,以防止虚假信息在网上传播
  • 各大社交平台正在不断地改变、完善和测试他们的算法。最重要的是,我们要跟上他们的步伐。

准备好了吗?让我们开始研究社交媒体算法吧。

Facebook算法

Facebook可能拥有世界上最著名(或臭名昭著)的社交媒体算法。

在过去的几年中,它一直处于争议的中心,不仅在美国和欧洲,而且在世界各地都引起争议。

由于Facebook希望为用户提供更多价值,为广告吸引更多的注意力,因此它不断地进化算法。也许这就是为什么,它会与Google搜索算法一起成为传统和互联网媒体持续裁员的主要原因。

Facebook算法以前被称作EdgeRank,在过去几年中它由于种种过失而备受关注。

因为该算法导致了一种病态的情况:自然接触率几乎消失,新闻信息流已近消亡,标题党和假新闻濒于垮台。

1 / 用户自由访问率大幅下滑

2014年,Facebook的专页用户注意到他们的用户访问率开始下降。尽管数字有所变化,但平均用户访问率却从16%下降至6.5%。一个拥有10,000个粉丝的专页只会吸引其中的650个点击浏览。

拥有超过500,000名粉丝的专页用户,他们的用户访问率陡降至2%左右。

Facebook表示,这样做仅仅是因为平台上的内容变多了,所以人们应该只看到与他们最相关的内容。

从那以后,Facebook继续调整该算法,进一步降低了专页的用户访问率。

大约在同一时间,Facebook专页在Facebook平台上的广告收入几乎达到了顶峰,然而不久后,它就依靠Instagram来实现大部分收入增长。

如今,Facebook专页更适合用于开展广告活动,而不是其他任何活动。

2 / 互联网不断渗透,过新闻信息流正在退出主场,与用户相关的生活内容才是王道

生活内容改变了社交媒体的格局,而新闻信息流遭受重击。

消费者最想要看到的内容是他们朋友、家人和KOL们在Instagram,Snapchat和Facebook上发布的短内容。

而新闻信息流成为了旧时代的遗物。尽管它不会很快消失,但它将不再具有曾经对社会的影响。

Facebook将生活内容视为未来,并声称每天有十亿条内容在其平台上共享,但到目前为止,它们还无法像其他广告资源那样从中获利。

不过,生活内容是前进的方向,永远不要低估Facebook的获利能力。

3 / Facebook将不再宽容地对待虚假新闻和标题党

曾经,在Facebook上“病毒式传播”是一件很容易的事。制作一段人们会共享的内容,并采用不错的发行方式,就可以保证将其传播到整个Facebook平台。

这就是BuzzFeed与其他发行商(例如紧随其后的Unilad)建立他们业务模式的基础。内容被设计为“可点击”和“可共享的”,因为它们利用了社交心理触发因素,这些触发因素会唤起人们对爱情,幽默,恐惧或愤怒的情绪。

这一策略常常被运用,人们用各种不道德的方法制作虚假的内容。

这个旧的Facebook算法,其病毒性元素在2016年美国大选和英国脱欧中都产生了巨大的影响。有关这两个事件的内容都主要在Facebook上播放,很轻易地传播各种假新闻,并且用标题党来篡改知名新闻来源的内容

尽管Facebook仍有推动假新闻传播的倾向,但该公司最近删除了1400万条恐怖内容,建立“选举战情室”以维护各地选举,要求浏览网站和政治广列的用户验证其身份。通过这种方式来提高控制和根除虚假新闻的能力。

在分享新闻方面,Facebook的用户习惯也发生了变化。一项研究显示,出于对隐私的关注,他们更喜欢使用消息应用程序WhatsApp和Messenger(均为Facebook Inc.拥有)与密友和熟人共享和讨论新闻。

4 / 新的Facebook算法

负面媒体报道的累积,以及研究发现人们访问Facebook后会感到不开心,这两项原因促使该公司迅速采取行动,删除了有关使人发疯,难过或悲伤的内容的共享。

排名因素。资料来源:Facebook,作者Matt Matt Navarra

马克·扎克伯格(Mark Zuckerberg)在2018年1月发布的公告中说,新的算法将优先考虑“有意义的社交互动”。

在扎克伯格的帖子中,他概述了以算法为中心的Facebook的新发展方向。

“我们营造的Facebook的方法正在发生重大改变。我改变了产品团队的目标,从专注于帮用户找到相关内容,转变为帮助用户得到更多有意义的社交互动。”

这意味着,Facebook算法现在将优先考虑推荐一些可以引起朋友和家人讨论的内容,而不是标题党内容和第三方链接。

Facebook提供的有意义的互动包括:

  • 个人评论、对他人的状态更新或照片的点赞
  • 个人对朋友分享的内容所做出的回复
  • 视频或文章评论中的多人互动
  • 通过Messenger共享链接与一群朋友开启对话

此举引发了一些依赖Facebook作为交流平台的企业和组织的担忧。

媒体行业的员工以及像LittleThings和Unilad之类的出版商受到了极大的影响。由于新算法的引荐流量突然下降,他们被迫关闭或者被收购。

但是,由于自然接触率一直处于历史最低水平,以及优先考虑亲朋好友之间的交流的举措,许多组织开始质疑,在Facebook上投入精力是否值得。

鉴于其庞大的规模和流量优势地位,Facebook仍值得创作者们付出努力,但是需要用一种新的方式来改变算法。

5 / 我们对Facebook算法了解多少?

  • 和原来所想的不一样,Facebook声称他们并没有在最初与26个人分享你的内容
  • 可以用一个面向小部分用户的帖子来测试初始参与度
  • Facebook算法将优先推荐促进朋友和家人之间对话的内容
  • Facebook将优先推荐Messenger共享的链接
  • 用户的积分(页面的完整性,共享历史等)是排名因素
  • 被用户分享并引起进一步讨论的品牌或发布者内容将获得优先推荐
  • Facebook算法将优先推荐实况视频,因为它会收到更多互动
  • 比起第三方链接帖子,本地视频帖子会获得更多的参与度
  • 参与度的计算将基于积分系统
  • 带有长评的帖子将获得更高的权重
  • 本地内容优先于第三方链接内容
  • 根据Buffer的研究,每天发布五条内容或许是最佳方案
  • 标题党,以及要求人们“点赞,评论或分享”的内容会被降低权重
  • 耸人听闻的内容会被该算法标记
  • Facebook算法将降低出现标题错误的文章的排名

6 / Facebook算法排名因素——

7 / 如何适应Facebook算法?

  • 有意地制作可以推动Facebook用户讨论的内容 这是Facebook的新常态,任何使用该算法的人,如果他们希望在该平台上获得好的反馈的话,在制作内容时都应该考虑到这一点。
  • 采取80/20作为原创内容和他人内容的比例 Facebook希望用户为该平台创造内容,但是如果你的目标是为自己的网站引流,那你需要采取合适的举措。算法在以下情况中可以帮助你:成为可靠的内容生产者,制作原创内容,只在极少的时候链接到你自己的网站。
  • 尽可能使用直播视频来提高参与度 Facebook明确表示,他们将优先推荐直播视频,因为他们知道直播视频的参与度是任何其他内容的六倍。任何能够推动有意义的参与的事情,都是值得做的。
  • 制定一个总体的视频战略 在可预见的未来,优质的本地视频仍将在Facebook中占据领先地位。
  • 定一个目标:要成为算法眼中的优质内容(有选择地分享你的内容) 不要在Facebook上分享你的所有内容。如果该内容没有产生参与度,那么你的积分就会降低。仅分享你认为适合平台和受众的内容。
  • 绝对不能有标题党,骗赞和过度营销的内容 Facebook算法将标记标题党、耸人听闻的文章、要求用户点赞,评论和分享的内容以及过度营销的内容。如果要成为算法眼中的可靠账户,请不要执行任何这些操作。

Twitter算法

退一步说,Twitter自成立以来的经历波澜起伏。实际上,Twiter多年来一直无利可图,直到2018年它才实现了首次年度盈利。

尽管具有盈利能力,但Twitter正在失去用户,这与它清理平台,删除垃圾邮件和机器人帐户有关。

Twitter可能仍将是一个利基社交网络,但它吸引的用户类型是世界上最具影响力的一些用户。这个平台受到了媒体和政治精英的青睐,在推动新闻议程方面发挥着关键作用。

Twitter的实时性,极易上手,不需要任何写博客或者创建博客等技术知识,这些可能是Twitter在这些人中受欢迎的原因。

1 / Algorithmic Timelines引言

2016年Twitter推出了它的算法,被称之为“Algorithmic Timelines”。

在此之前,当你登录Twitter时,你的信息流是按逆序排列的,你关注的人的最新推文被排在首页顶部。

但是现在登录Twitter的话,情况有所不同。它不再按时间顺序排列,你的时间轴顶端的内容可能是30分钟前发布的消息,而最近的推文可能会在后面显示。

这是目前正在使用的算法,旨在根据用户先前对平台的使用情况,为用户提供最相关的内容。

算法认为你会觉得这些内容最重要,所以把这些推文推送给你。当你在制定Twitter策略的时候,必须考虑到这一点。

不过,Twitter为用户提供了在算法时间轴和正常时间轴之间切换的选择,尽管默认情况下是使用算法时间轴。

2 / 网络喷子,机器人账号和选举

和Facebook一样,Twitter近年来一直是争议的焦点。

它被指控为匿名的网络喷子和极端主义团体提供了一个平台,可以大肆宣扬恶毒言论和仇恨,并容许俄罗斯帐户和机器人账户介入2016年美国总统大选。

去年1月,Twitter声称,他们已删除了50,000个与俄罗斯有关的帐户,这些账号使用该平台发表了与2016年选举有关的、机器生产的恶意内容。

这也促使了去年2月Twitter算法进行了新一轮改进。

从现在开始,将不允许在Twitter平台上发表自动化内容(或使用机器人账号)。

Twitter通过以下声明向服,明确警告了那些使用机器人账号的服务商:

“不允许使用任何形式的自动化(包括计划使用)来发布相同或基本相似的内容,也不允许一人操控多个账号进行点赞或转发等操作(无论你是否创建或直接控制这些帐户)。”

3 / 在280个字的限制下运用算法时间轴

Twitter算法的目的是增强时间轴的相关性,以便用户可以捕获重要的推文,否则他们会错失与他们互动最多的人之间的交流机会。

与此同时,Twitter仍将自己视为实时新闻网站以及社交平台。当你登陆账户时,首页会询问“正在发生什么?”,Twitter通过这一举措来增强以上两种属性。

它不会向你展示几天前的推文,因为按照Twitter的标准,它们太旧了。Twitter的目的是帮助人们发现“现在正在发生的事情”,与之相比,Facebook或LinkedIn则更多地关注“本周发生的事情”。

因此,虽然该算法会把较旧的推文展示在首页顶端,但时间仍然是重要的因素。而且,如果你希望自己的推文获得尽可能多的覆盖率和参与度,你必须适应该算法。

2017年9月,Twitter做出了迄今为止最大胆的改变之一,将字符数限制从140个增加到280个。

这引起了用户的愤怒,他们认为此举将导致该平台的灭亡。

但是事后看来,Twitter制定了一项不错的计划,因为通过对语言的参与度数据进行分析后发现,推文中可以容纳更多的内容。他们发现日语推文(这种文字允许更多的内容)比英语推文获得了更多的参与度。

话虽如此,据报道,截止2018年10月,平均推文长度仍然只有35个字符。

4 / 我们对Twitter算法了解多少?

  • 时间在Twitter算法中占重要地位
  • 信誉度高的账户受到算法的青睐
  • 字数控制在280个字以内可提高参与率
  • 尽管可以分享链接,但平台内的内容权重将高于第三方链接内容
  • 与您互动最多的人的推文将排在顶部
  • 可以用一个面向小部分用户的帖子来测试初始参与度
  • 点赞,回复和转发能得到较高分数
  • 即使你与某些内容没有互动,阅读改文章或访问某个人的个人资料所花费的时间仍将影响你的首页内容。
  • 你与他人的互动越多,算法就会更多地为你推荐他所关注的内容(如果他们关注你的话)

5 / Twitter算法排名因素——

6 / 如何适应Twitter的算法?

  • 发布时间:在粉丝在线的时候发送推文 使用第三方服务(例如Tweroid或ManagerFlitter)来了解,你的粉丝通常在一天中的什么时间在线。这个时间段是最好的发布时间,能够确保你的推文在粉丝中获得尽可能多的曝光度。推文拥有的曝光度越高,互动的几率就越大。
  • 通过围绕特定主题或领域来建立粉丝基础,以此提高相关性和参与度 有些人为了使自己看起来很有影响力而买粉,或者他们用机器人来关注或取关大量账号,以此快速增加自己的粉丝数。 这样做的问题是,他们发推时很少收到互动。因为他们的大多数粉丝要么是垃圾账号,要么是不相关的账号。 谢天谢地,现在Twitter禁止了这种数据操作。对我们所有人来说,我们从中学到的是: 要制作参与度高的推文,你必须拥有相关且响应迅速的受众。不需要关注大量不相关账号,以希望他们回关你。相反,你需要重点对待你关注的账号,因为时间长了之后,这些类型的帐户有可能会关注您。
  • 根据粉丝的喜好来制作推文 Twitter Analytics(分析)不仅提供了大量关于你的推文的数据,而且提供了大量关于粉丝的数据。它将告诉你粉丝的主题兴趣,并按百分比细分。 一旦了解了粉丝的兴趣,就可以根据他们的喜好制作推文。内容与粉丝越相关,他们参与的可能性就越大。
  • 使用280个字来提供更多信息和上下文 Twitter声称,字数更多的推文能吸引更多的用户。这是因为你可以添加更多信息和更多上下文。字数多也可以提供更多的创造力。Twitter算法奖励这样的行为,所以请写更多的字数。
  • 确保你的个人资料是可信的 确保您的个人资料是最新的,并且填写了所有的相关信息(名称,简历,位置,链接,照片等)。 该算法更喜欢看起来可信度高的账号,因此不要发垃圾内容,发失效的链接或使用自动化软件。
  • 每天都发内容 如果你每天都发推文,为粉丝带来价值,那么算法就会为你带来回报。如果在过去一周中粉丝与你的推文进行了互动,那么算法将会增加你的优先级。
  • 与你的粉丝互动 当你转发,@回复其他人,他人回复你的时候,算法会在他们的时间轴中推荐你的内容(前提是他们关注你)。 与其他Twitter帐户互动可以确保算法将你视为社区的内容创作者。不要只是发推文并期望人们与你互动——你需要主动与他人互动。

Instagram算法

尽管Instagram不如Facebook算法出名,但Instagram无疑是最酷的社交媒体算法,也是未来最重要的算法,因为Instagram逐渐成为改变消费者文化的中坚力量。

毫无疑问,Instagram是最热门的社交媒体平台,而且热度可能还会持续一段时间。它改变了整个行业,例如时装业中,著名时尚杂志(如Vogue)不再硬性规定其中应该出现的内容和不应该出现的内容。

现在,它已经成为人们变身KOL的主要平台,因为Instagram的创作过程比任何其他社交平台都容易得多。

数据显示出持续上升的趋势,这意味着Instagram的网红营销正在蓬勃发展。

Instagram是时尚,健身,旅行,游戏,宠物甚至CGI KOL等各行各业KOL们的家园。

只要你使用Instagram工具和软件,有足够的才干并投入工作,任何人都可以成为“ins明星”。

不过,像其兄弟网站一样,Instagram最近也出现了负面新闻,不过和Facebook相比还差得远。

1 / KOL骗局

对于新手来说,有很多人尝试欺骗Instagram算法,使自己看起来比实际上更有影响力。

人们使用机器人和代理服务来自动关注或取消关注他人帐户,用机器人来点赞或对他人内容进行评论,这种情况在Instagram上比比皆是。

这并不是真正的粉丝关系和互动参与,而是一种对系统的操纵。Instagram似乎对此无能为力。

更糟糕的是,购买假粉和假互动来夸大其粉丝数量,这种情况在Instagram上也很盛行。从第三方网站上购买几千个粉丝只需很少的费用(5-10美元),用相似的价格,还可以让“人们”点赞并评论你的内容。

在这种情况被整顿之前,许多假KOL会以此来欺骗品牌和代理商与他们合作,为他么花钱。从长远来看,这些假KOL们肯定会被发现,因为品牌的投资回报率并不符合KOL们所展现出的影响力。

2 / 从时间轴到Instagram算法的转变

Instagram于2016年中宣布了自己的社交媒体算法,旨在为用户提供他们最希望参与的内容类型。

在上线nstagram算法之前,信息流按时间顺序发布,这意味着你可以在页面顶部看到最新的帖子。当时,新帖的生命周期为72分钟;但现在,它在发布几天之后仍可以获得互动。

现在,在重新登陆instagram后,你可以在时间轴中看到上次登录时你互动最多的人发布的内容。

参与度是Instagram算法的关键排名因素。内容所收到的点赞,评论,评论点赞,内容收藏,DM回复和通过DM发送的次数越多,算法对其赋予的权重就越大。

3 / 我们对Instagram算法了解多少?

首次发布时,内容会被推荐给一个特定的粉丝群,以评估参与度

其中的三个重要因素是:1.兴趣(Instagram算法认为你喜欢该内容的可能性越高,你看到它的可能性就越大);2.时间轴(优先推荐最近发布的帖子);3.关系(如果你为某些帖子点很多赞,并发表很多评论,算法会把你认定为这些账号的朋友和家人)

  • 定期发布将有助于你在用户的时间轴中得到更高的权重,并且算法不会降低发布次数过多的人的权重
  • 算法并不偏好使用Stories,直播或其他特殊功能的用户
  • 通过DM分享的帖子会被算法排名
  • 评论的权重比仅点赞的权重更高
  • 使用不多于30个话题标签来优化内容,这样更容易被用户发现。不过每个内容不应该用相同的话题。
  • 你互动越多的内容将获得更高的曝光率
  • 主题标签仍在算法中起作用,但主要只在“浏览”页面中发挥作用
  • 一个拥有好的建设且参与度高的社区可以提高每份内容的积分
  • 积极地与他人的内容进行互动(通过点赞和评论)有助于引流自己的内容,并进一步提高自己账号的参与度
  • 用户在内容上花费的时间越长,该内容的算法积分就越高

4 / Instagram算法排名因素——

5 / 如何适应Instagram算法?

  • 定期发布 如果你发帖不规律,算法会将你视为流量玩家,不会在粉丝中优先推荐你的内容。而那些定期发布并贡献最大的人将获得算法的青睐。
  • 与特定内容进行互动 与那些和你的Instagram账户相关的用户和内容进行互动,可以帮助你引流自己的账户。你与他们互动的越多,你的内容在他们时间轴中的算法权重就越高。
  • 在最佳时间发布内容 Instagram算法的三个关键因素之一是及时性。首先了解何时是你的最佳发布时间,然后发布内容。
  • 使用话题标签,这样用户就可以通过“搜索”页面找到你 通过使用话题标签,如果你能获得搜索页面的头部位置的话,它可以为你带来数百甚至数千的点赞和粉丝。

YouTube算法

由于平台太过流行,导致YouTube算法可能是当今最难破解的社交媒体算法之一。

YouTube拥有15亿全球用户,从数据上说,它是世界第二大搜索引擎,是一个需要认真应对的平台。

开发YouTube算法的目的是服务对网站做出重大贡献的用户。这反映在它的一些排名因素上,这些排名因素基于坚持发布和用户拥有的粉丝数量来制定的。

除非您是知名人士,拥有某种特别出众的才华,或者在制作视频方面拥有与众不同的角度,否则,想从零开始在YouTube上吸引大量粉丝,需要投入大量的工作。

为什么?因为Youtube上的内容质量非常高,并且这些内容涵盖了每个可以想到的主题。最重要的是,它需要每周发布约2/3次才能获得算法的青睐。

这就是为什么YouTube SEO是一个蓬勃发展的行业的原因,许多像Brian Dean这样的 “传统” SEO专家也开始注重并磨练他们在YouTube平台上的技能。

1 / 推荐算法与儿童安全

在过去的几年中,YouTube的推荐算法遭到了抨击,因为有关儿童的视频中出现了问题评论,算法还自动填充恋童癖相关的内容。。

这导致许多主要品牌暂停在YouTube上投放广告,除非问题得到解决。在撰写本文时,由于类似问题的再次发生,YouTube算法正处于风暴中心。

像Google / Alphabet和Facebook这样数十亿美元的公司并没有完全控制自己的社交媒体算法的使用。你是否会感到担心呢?

2 / KOL强烈反对YouTube算法测试

2018年5月,许多YouTube上的KOL对平台进行的算法测试感到愤怒,该平台向用户推荐了他们尚未订阅的频道的视频,而不是已经订阅的频道视频。

YouTube表示,它只对一小部分用户进行了测试,但一些YouTube明星对此感到恼火,并公开表示反对这种行为。

这是一个值得牢记的教训。用户——即使是最有影响力的用户——在任何社交媒体网站上都无法完全控制自己的频道或内容,他们也永远得不到这个权利。他们拥有的是一块租来的土地。

3 / 我们对YouTube算法了解多少?

  • 总观看时间和观众留存是重要的排名因素
  • 上载频率是一个重要因素,持续上传的人会得到算法的青睐
  • 可以用一个面向小部分用户的帖子来测试初始参与度
  • 粉丝越多,YouTube算法对你的视频的优先级就越高
  • 视频的观看次数越多,YouTube算法的优先级越高
  • 频道的观看次数越多,YouTube算法的优先级越高
  • 视频的点赞/踩和评论是重要的排名因素
  • 标题,描述和关键词标签是重要的排名因素
  • 视频的最佳长度是7-16分钟
  • YouTube算法是人工智能,它正在不断地学习,理解人类并拓展

4 / YouTube算法排名因素——

5 / 如何适应YouTube算法?

  • 持续性是关键 如果断断续续的更新频道中的内容,那么算法会降低 该频道的权重。所以你最好持续发布内容,最好在每周的同一时间发布,也可以每天发布。 这不仅能从算法角度为你提供帮助,而且知晓更新时间会让你的粉丝更乐于观看你的视频。
  • 建立粉丝基础 频道中的粉丝数越多,你在算法中的积分就越高。但这对于从零开始以及希望发展Youtube账号的新手来说是一个左右为难的规则。
  • 让你的目标受众喜欢你的视频 你应该这样做,而且你获得的点赞越多,算法给予你的权重越高。制作一些讨你的目标受众欢心的视频,并注意不要出现争议性内容,这样会导致负面评价。
  • 在视频的前几分钟内勾住观众 YouTube算法认为,人们观看视频的时间越长,你的内容就越有趣。所以你的目的是勾住观众,许多YouTube博主会使用特定的策略来勾住观众。
  • 视频时长应在7-16分钟之内 马特·吉伦(Matt Gielen)发现,时长7 – 16分钟的视频具有最佳的用户留存率,最高的参与度和最佳的观看者订阅率。
  • 解码社交媒体算法需要集体努力 社交媒体正在不断进行A / B测试并更改其算法,以适应新功能,增加收入并为用户提供更多价值。

结语

尽管我们永远不能完全了解每种社交媒体算法的内部工作原理,但我们可以从公司的公开资料中获取线索,并相应地调整我们的方法。

我们可以通过自己的经验,和他人相互分享经验,逐一地解码社交媒体算法。

使用信息碎片,基本假设,一些常识,不断测试和数据共享,可以破解这些神秘的数学方程式。

就像SEO行业诞生于破解搜索引擎算法的集体愿望,我们也可以共同努力,以了解这些正在塑造社会文化的强大社交媒体。

这意味着我们要不断地测试内容来发现有效的方法,无效的方法以及出现这两种情况的原因。

此外,在社交媒体传播方面,我们不仅需要速度和敏捷性,还需要知识和经验的集体共享,需要KOL们集体对社交媒体公司施压,迫使他们提供更多有关这些神秘算法的内部工作原理的信息。因为算法对我们所有人的生活将产生更大的影响。

现在关注【LIKE.TG出海指南频道】【LIKE.TG生态链-全球资源互联社区】,即可免费领取【WhatsApp、LINE、Telegram、Twitter、ZALO云控】等获客工具试用、【住宅IP、号段筛选】等免费资源,机会难得,快来解锁更多资源,助力您的业务飞速成长!点击【联系客服】

本文由LIKE.TG编辑部转载自互联网并编辑,如有侵权影响,请联系官方客服,将为您妥善处理。

This article is republished from public internet and edited by the LIKE.TG editorial department. If there is any infringement, please contact our official customer service for proper handling.


科技论坛互联网论坛虚拟币论坛技术论坛科技峰会互联网峰会虚拟币峰会技术峰会社交媒体论坛世界互联网Server deployment数据论坛数据峰会网络论坛网络峰会战略论坛开放论坛全球论坛全球峰会发展论坛人工智能论坛程序员论坛
加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈
全球峰会
#自媒体#新媒体课堂——自媒体平台知多少?自媒体平台有哪些?
#自媒体#新媒体课堂——自媒体平台知多少?自媒体平台有哪些?
自媒体带起了一波创业者的高潮,做自媒体的主要就是两类人,要么是为了流量,获得用户关注;要么是为了阅读量,广告变现。说白了就是为了名利!有很多人都想做自媒体,但是该怎么做才好呢?做自媒体,写文章虽然重要,但是发文章比写重要10倍以上,只有让更多的人看到你的文章,你的文章才能给你带来更大的价值,一篇文章写出来,你发的平台不对,也不行。今天知道君整理了一些可以免费注册与发布的自媒体平台,如果你把文章发布到这些自媒体平台,你的每篇文章最少都有几万人看到,效果怎么样, 就不用多说了。现在直接分享给大家:微信公众平台微信公众平台,给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。… 给企业和组织提供更强大的业务服务与用户管理能力,帮助企业快速实现全新的公众号服务平台是否免费:免费操作难度:简单应用类型:全部应用网址:http://mp.weixin.qq.com今日头条今日头条是一款基于数据挖掘的推荐引擎产品,它为用户推荐有价值的、个性化的信息,提供连接人与信息的新型服务,是国内移动互联网领域成长最快的产品服务之一是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.toutiao.com/百度百家百家是百度新闻的原创内容类平台。每日发布的优质内容将会在百度新闻的网页版、移动端呈现,并被百度搜索和百度其他产品线收录。是否免费:免费操作难度:简单应用类型:全部应用网址:http://baijia.baidu.com/搜狐媒体平台搜狐媒体平台是在搜狐门户改革背景下全新打造的内容发布和分类分发全平台。各个行业的优质内容供给者(媒体、自媒体)均可免费申请入驻,为搜狐提供内容;利用搜狐强大的媒体影响力,入驻媒体和自媒体可获取自己的用户,提升个人的品牌影响力是否免费:免费操作难度:简单应用类型:全部应用网址:http://mp.sohu.com/一点资讯一点资讯是一款高度智能的新闻资讯应用,通过它你可以搜索并订阅任意关键词,它会自动帮你聚合整理并实时更新相关资讯,同时会智能分析你的兴趣爱好,为你推荐感兴趣的内容。看新闻资讯,一点就够了!是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.yidianzixun.com/网易媒体平台网易订阅,聚合旅游、时尚、财经、科技资讯、时事新闻、RSS等众多内容,提供个性化的阅读服务是否免费:免费操作难度:简单应用类型:全部应用网址:http://dy.163.com/wemedia/login.html企鹅媒体平台企鹅媒体平台是2016年3月1日,企鹅媒体平台正式推出,腾讯将提供四个方面的能力。是否免费:免费操作难度:简单应用类型:全部应用网址:https://om.qq.com/userAuth/index北京时间号北京时间互联网门户全新领导者,依托强大的推荐引擎与专业的媒体人团队为用户实时呈现最具价值的新鲜资讯。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.btime.com/QQ公众号QQ公众平台聚合着无限可能。凭借16年来积累的8亿用户资源,依托强势平台技术、数据沉淀和社交关系,QQ公众平台将有效聚集品牌和消费者,以开放合作的姿态与你一起打造未来。是否免费:免费操作难度:简单应用类型:全部应用网址:http://mp.qq.com/凤凰自媒体“凤凰自媒体”正式更名为“凤凰号”。据了解,凤凰自媒体平台更名后,希望能加快品牌特色化进程,深耕高质量内容领域,由此形成行业差异化竞争格局,实现优质文章在凤凰新闻客户端、凤凰网、手机凤凰网、凤凰视频客户端等渠道的有效分发。是否免费:免费操作难度:简单应用类型:全部应用网址:http://fhh.ifeng.com/login大鱼号大鱼号是阿里文娱体系为内容创作者提供的统一账号。大鱼号实现了阿里文娱体系一点接入,多点分发。内容创作者一点接入大鱼号,上传图文/视频可被分发到UC、优酷、土豆、淘系客户端,未来还会扩展到豌豆荚、神马搜索、PP助手等。是否免费:免费操作难度:简单应用类型:全部应用网址:http://mp.uc.cn/index.html知乎一个真实的网络问答社区,帮助你寻找答案,分享知识。..是否免费:免费操作难度:简单应用类型:全部应用网址:https://www.zhihu.com/钛媒体【钛媒体官方网站】钛媒体是国内首家TMT公司人社群媒体,最有钛度的一人一媒体平台,集信息交流融合、IT技术信息、新媒体于一身的媒体平台。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.tmtpost.com/LIKE.TG+社区LIKE.TG最新又推出了一款扶持计划-『自媒体分享计划』满足条件的自媒体,入驻LIKE.TG+社区,可分享总价值百万资源包是否免费:免费操作难度:困难应用类型:全部应用网址:https://cloud.tencent.com/developer/support-plan?invite_code=oc38tj48tn8qhttp://www.tmtpost.com/虎嗅网聚合优质的创新信息与人群,捕获精选|深度|犀利的商业科技资讯。在虎嗅,不错过互联网的每个重要时刻。是否免费:免费操作难度:简单应用类型:全部应用网址:https://www.huxiu.com/砍柴网砍柴网创立于2013年,是一家拥有全球视野的前沿科技媒体,我们始终秉承观点独到、全面深入、有料有趣的宗旨,在科技与人文之间寻找商业新价值,坚持以人文的视角解读科技,用专业的精神剖析时代,孜孜不倦探索科技与商业的未来。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.ikanchai.com/i黑马i黑马是面向创业者的创新型综合服务平台,掌握创业创新领域强有力话语权的媒体矩阵,致力于帮助创业者获得投资、人才、宣传和经验。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.iheima.com/雷锋网雷锋网是国内最早关注人工智能和智能硬件领域的互联网科技媒体,内容涵盖人工智能、智能硬件、机器人、智能驾驶、ARVR、网络安全、物联网、未来医疗、金融科技等9大领域。雷锋网致力于连接和服务学术界、工业界与投资界,为用户提供更专业的互联网科技资讯和培训服务,让用户读懂智能与未来。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.leiphone.com/猎云网猎云网坚守用心服务创业者的理念,专注创业创新,互联网创业项目推荐,关注新产品、新公司、新模式,以原创独家报道、分析以及美国硅谷的一手报道闻名业界。为创业者、投资人及相关业内人士提供交流学习、资源对接的桥梁。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.lieyunwang.com/锌媒体锌媒体是一个关注前沿科技资讯、移动互联网,发现以及商业创新价值的泛科技自媒体平台。精选最新科技新闻,分享即时的移动互联网行业动态和以及提供最具商业价值的互联网创业案例,投资案例。提供绝对给力的干货、,在科技与人文之间挖掘商业新价值。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.xinmeti.com/派代网派代网定位为中国电子商务的入口,目前是中国最活跃、最具影响力的电子商务行业交流平台,聚集了大量的电子商务领军企业创始人群。提供电商学习、人才招聘、企业贷款等电子商务综合服务。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.paidai.com/简书致力于开发维护一套集合文字的书写、编集、发布功能于一体的在线写作编辑工具是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.jianshu.com/亿欧网亿欧是一家专注于新科技、新理念与各产业结合,以助力产业创新升级为使命的服务平台。亿欧旗下有4款产品,分别是亿欧网、视也、天窗、企服盒子。自2014年2月9日开始运营后,迅速成为互联网创业者和产业创新者的首选学习平台,是上百家知名企业的首选商业合作伙伴;先后获得盈动资本、高榕资本、盛景网联领投的三轮融资是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.iyiou.com/思达派思达派是专注创业服务市场的新媒体平台,定位“创业干货分享”,一站集成创业经验、教训等干货,帮助创业者少走弯路。同时还将举办各种线下创业分享和交流活动,分享创业心得,对接人脉、资本、以及公关推广等资源。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.startup-partner.com/界面界面是最受中国中产阶级欢迎的新闻及商业社交平台,旗下拥有精品新闻业务界面新闻、专业投资资讯平台摩尔金融及中国最大独立设计师电商网站尤物。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.jiemian.com/爱范儿聚焦新创和消费主题的科技媒体,成立于 2008 年 10 月,关注产品及体验,致力于“独立,前瞻,深入”的原创报道和分析评论,是国内唯一一家在产业和产品领域同时具有强势影响力的科技媒体。旗下现有 ifanr.com、SocialBase.cn、AppSolution、玩物志、创业及产品社区 MindStore 等多个细分领域的知名产品。是否免费:免费操作难度:简单应用类型:全部应用网址:http://www.ifanr.com/36氪36氪为您提供创业资讯、科技新闻、投融资对接、股权投资、极速融资等创业服务,致力成为创业者可以依赖的创业服务平台,为创业者提供最好的产品和服务。是否免费:免费操作难度:简单应用类型:全部应用网址:http://36kr.com如果一篇文章在一个平台一天有100个阅读量,在50个平台上就是5000阅读,那么10天呢,一年356天呢,可能前期会辛苦一点,但是你需要坚持,越到后面,你在互联网上发布的文章越多,加你的人也会越多,而且这些文章将会在多年以后都能够继续为你带来流量,有的人两年前写的文章,现在还有人看了还会加v信。外加两个,趣头条,惠头条。有的人可能会问,这么多平台,发文章比写文章还累!额。。。。。。你需要学会找工具,早就有人开发出来了一键发布功能,一篇文章可以同时发布到多个自媒体平台上!什么工具呢?百度一下,你就知道!以上,是今天给大家提供的一些思路,希望对大家有帮助!这些仅仅是各大门户网站的自媒体开放平台,没有精确到各种类型的全部平台,如小视频类app、综合视频类网站都没有开始说,由于篇幅的原因,留到以后再进行补充吧。
1-4月美国电商支出3316亿美元,消费者转向低价商品
1-4月美国电商支出3316亿美元,消费者转向低价商品
AMZ123 获悉,日前,据外媒报道,Adobe Analytics 的数据显示,2024 年前四个月美国电商增长强劲,同比增长 7%,达到 3316 亿美元。据了解,Adobe Analytics 对美国在线交易数据进行了分析,涵盖美国零售网站的一万亿次访问、1 亿个 SKU 和 18 个产品类别。2024 年 1 月 1 日至 4 月 30 日,美国在线支出达 3316 亿美元,同比增长 7%,得益于电子产品、服装等非必需品的稳定支出以及在线杂货购物的持续激增。Adobe 预计,2024 年上半年在线支出将超过 5000 亿美元,同比增长 6.8%。今年前四个月,美国消费者在线上消费电子产品 618 亿美元(同比增长 3.1%),服装 525 亿美元(同比增长 2.6%)。尽管增幅较小,但这两个类别占电商总支出的 34.5%,帮助保持了营收增长。同时,杂货进一步推动了增长,在线支出达 388 亿美元,同比增长 15.7%。Adobe 预计,未来三年内,该类别将成为电商市场的主导力量,其收入份额与电子产品和服装相当。另一个在线支出费增长较快的类别是化妆品,该类别在 2023 年带来了 350 亿美元的在线消费,同比增长 15.6%。而这一上升趋势仍在继续,截至 4 月 30 日,2024 年美国消费者在化妆品上的在线支出为 132 亿美元,同比增长 8%。此外,数月持续的通货膨胀导致消费者在多个主要类别中购买更便宜的商品。Adobe 发现,个人护理(增长 96%)、电子产品(增长 64%)、服装(增长 47%)、家居/花园(增长 42%)、家具/床上用品(增长 42%)和杂货(增长 33%)等类别的低价商品份额均大幅增加。具体而言,在食品杂货等类别中,低通胀商品的收入增长 13.4%,而高通胀商品的收入下降 15.6%。在化妆品等类别中,影响相对较弱,低通胀商品的收入增长 3.06%,高通胀商品的收入仅下降 0.34%,主要由于消费者对自己喜欢的品牌表现出了更强的忠诚度。而体育用品(增长 28%)、家电(增长 26%)、工具/家装(增长 26%)和玩具(增长 25%)等类别的低价商品份额增幅均较小,这些类别的增幅也主要受品牌忠诚度影响,同时消费者更倾向于购买最高品质的此类产品。此外,“先买后付”(BNPL)支付方式在此期间也出现了持续增长。2024 年 1 月至 4 月,BNPL 推动了 259 亿美元的电商支出,较去年同期大幅增长 11.8%。Adobe 预计,BNPL 将在 2024 年全年推动 810 亿至 848 亿美元的支出,同比增长 8% 至 13%。
12月波兰社媒平台流量盘点,TikTok追赶Instagram
12月波兰社媒平台流量盘点,TikTok追赶Instagram
AMZ123 获悉,近日,市场分析机构 Mediapanel 公布了 2023 年 12 月波兰主流社交平台的最新用户统计数据。受 TikTok 的打击,Pinterest、Facebook 和 Instagram 的用户数量出现下降。根据 Mediapanel 的数据,截至 2023 年 12 月,TikTok 是波兰第三大社交媒体平台,拥有超过 1378 万用户,相当于波兰 46.45% 的互联网用户。排在 TikTok 之前的是 Facebook 和 Instagram,其中 Facebook 拥有超过 2435 万用户,相当于波兰 82.06% 的互联网用户;Instagram 则拥有超过 1409 万用户,相当于波兰 47.47% 的互联网用户。在用户使用时长方面,TikTok 排名第一。2023 年 12 月,TikTok 用户的平均使用时长为 17 小时 18 分钟 42 秒。Facebook 用户的平均使用时长为 15 小时 36 分钟 38 秒,位居第二。其次是 Instagram,平均使用时长为 5 小时 2 分钟 39 秒。与 11 月相比,12 月 Facebook 减少了 58.84 万用户(下降 2.4%),但其用户平均使用时间增加了 32 分钟 50 秒(增长 3.6%)。Instagram 流失了 25.9 万用户(下降 1.8%),但其用户平均使用时间增加了 15 分钟(增长 5.2%)。虽然 TikTok 的用户数量略有增长(增长 8.85 万,即 0.6%),但其用户平均使用时间减少了 47 分钟(减少 4.3%)。12 月份,波兰其他主流社交媒体平台的用户数据(与 11 月相比):X 增加了 39.64 万用户(增长 4.8%),用户平均使用时间增加了 6 分钟 19 秒(增长 9.3%);Pinterest 增加了 23.02 万用户(增长 3.5%),用户平均使用时间增加了 7 分钟 9 秒(增长 16.1%);Snapchat 则增加了 9.04 万用户(增长 1.8%),用户平均使用时间增加了 23 秒(增长 0.2%);LinkedIn 流失了 27.69 万用户(下降 6.2%),用户平均使用时间减少了 1 分钟 36 秒(下降 11.7%);Reddit 流失了 18.6 万用户(下降 7.1%),用户平均使用时间减少了 1 分钟 27 秒(下降 11.6%)。
科技论坛
公司(视频 社交)项目分享
公司(视频 社交)项目分享
http://blog.csdn.net/u011733020/article/details/46786471 最近公司工作比较轻松,就把以前的项目 拿来整理下。以前公司做视频社交这一块,类似于YY直播。 展示 先来个动态图 再简单看一下主要界面 首页第一个界面,这里可以看美女,看直播 这是任务列界面,可以领取每日任务,任务分成长 和推荐 好友列表 用户的个人中心页 直播间 用户的个人中心页 充值方式页 银联支付页 项目组成 这个项目主要的重点就两个地方,看视频,和 与主播互动。 整个视频流是用RTMP协议的,文字聊天走的是openfire+asmack . PS:整个项目,我们产品设计的很不错的,只是我水平有限,有些功能 实现不了! 再介绍下,整个项目都用到了什么? 程序框架:SlidingMenu+Viewpager+fragment 请求服务器: asynchttpclient 解析数据:Gson 消息推送: Jpush 页面数据分析: Umeng 充值方式: alipay +银联+yeepay+短信充值 图片缓存: afinal 自定义view: Pulltoresfresh+拼音排序联系人+horizontallistview+verticalviewpager… 另,我把公司的项目写出来,是因为公司的服务器停掉了,所以,一些数据,是我自己抓出其他应用里面的(抓取数据的方法,在上面一篇文章里)…. 首先就是整个项目最下面是mainactivity,这个大家是都有共识的,在mainactivity 上面 我们就要 引入slidingmenu, 关于slidingmenu的下载,就不介绍了,这里直接拿来用 包结构比较清晰 , 整个项目首先,由splashactivity 欢迎界面 ,进行检查,然后跳转到mainactivity,mainactivity 中包含slidingmenu,slidingmenu的中间界面 添加了viewpager,viewpager 里面添加了四个fragment。 由于默认v4包里的viewpager 会默认混存数据,即使你设置了setOffscreenPageLimit(0),所以这里替换掉原生的v4包,并且通过fragment 的 setuservisibilityhint 方法来,控制 fragment 界面的动态刷新。 主界面的第一个fragment ,也就是约美女的界面,通过fragmenttabhost,来实现约美女,和看直播的切换。 在约美女中,就是一个简单地pulltorefreshlistview,适配了一个item.点击item 进入用户的个人中心, 个人中心 顶部 是个人的宣传适配,下面,是用户自己上传的 公开专辑,或者私密专辑。可以点赞,关注他。 做任务界面是有两种任务,一种是 每日任务,就是 登陆,签到,另一种是下载app 得积分任务。 下载app 可以控制 下载 暂停。 在我的关注界面。是你关注的好友,这个跟微信的联系人控件是一样的。首字母排序,用到了比较器。 首先 把汉字,对应首字母提取出来,然后与A-Z 排序。以及特殊字符~。 基本代码 整个项目 基本框架 简单描述下 在MainActiviy中初始化 slidingmenu。MainActivity 布局文件 <?xml version="1.0" encoding="utf-8"?> <com.os.slidingmenu.SlidingMenu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:sliding="http://schemas.android.com/apk/res-auto" android:id="@+id/slidingmenu" android:layout_width="fill_parent" android:layout_height="fill_parent" sliding:behindOffset="60dp" sliding:fadeEnabled="true" sliding:mode="left" sliding:secondaryShadowDrawable="@drawable/sliding_shadow_right" sliding:shadowDrawable="@drawable/sliding_shadow_left" sliding:shadowWidth="10dp" sliding:touchModeAbove="fullscreen" sliding:touchModeBehind="margin" /> MainActivity这个类进行初始化。代码语言:javascript复制<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">package</span> com.os.activity; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.lang.ref.WeakReference; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.activity.base.BaseFragmentActivity; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.activity.base.BaseSlidingFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.activity.sliding.LeftFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.activity.sliding.RightFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.slidingmenu.R; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.slidingmenu.SlidingMenu; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.ui.MainHallFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.os.Bundle; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.os.Handler; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.os.Message; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.support.v4.app.Fragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.support.v4.app.FragmentManager; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.support.v4.app.FragmentTransaction; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">MainActivity</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">BaseFragmentActivity</span> {</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Fragment mCurFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> SlidingMenu mSlidingMenu; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Handler handler = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> MyHandler(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">MyHandler</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Handler</span> {</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> WeakReference<MainActivity> mActivity; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">MyHandler</span>(MainActivity activity) { mActivity = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> WeakReference<MainActivity>(activity); } <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">handleMessage</span>(Message msg) { MainActivity activity = mActivity.get(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (activity == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>; } activity.handleMsg(msg); } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">handleMsg</span>(Message msg) { } <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">protected</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onCreate</span>(Bundle savedInstanceState) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span>.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (savedInstanceState != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { mCurFragment = getSupportFragmentManager().getFragment(savedInstanceState, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mCurContent"</span>); } } <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">protected</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onSaveInstanceState</span>(Bundle outState) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span>.onSaveInstanceState(outState); getSupportFragmentManager().putFragment(outState, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mCurContent"</span>, mCurFragment); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">initViews</span>() {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 通过id 找到slidingmenu </span> mSlidingMenu = (SlidingMenu) findViewById(R.id.slidingmenu); mSlidingMenu.setMenu(R.layout.sliding_left_frame);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//给slidingmenu 添加左边的布局</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (getFragmentByTag(LeftFragment.class) == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加左边fragment</span> getSupportFragmentManager().beginTransaction().add(R.id.left_frame, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> LeftFragment(), LeftFragment.class.getName()).commit(); } mSlidingMenu.setContent(R.layout.sliding_center_frame);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加一个空布局,后面承载 中间的fragment</span> mSlidingMenu.setSecondaryMenu(R.layout.sliding_right_frame);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加右面的布局,添加右边的fragment</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (getFragmentByTag(RightFragment.class) == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { getSupportFragmentManager().beginTransaction().add(R.id.right_frame, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> RightFragment(), RightFragment.class.getName()).commit(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mCurFragment != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { postSwitchFragment(); } mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置滑动模式,边缘 还是整个界面</span> } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * slidingMenu中的内容Fragment切换(左侧菜单触发) * *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> clazz */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">switchCenterFragment</span>(Class<? extends Fragment> clazz) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mSlidingMenu == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { removeAllFragments(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> isInit = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment userFragment = fm.findFragmentByTag(clazz.getName()); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (userFragment == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { isInit = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { userFragment = clazz.newInstance(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (InstantiationException e) { e.printStackTrace(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (IllegalAccessException e) { e.printStackTrace(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (Exception e) { e.printStackTrace(); } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mCurFragment != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> mCurFragment != userFragment) { ft.hide(mCurFragment); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!userFragment.isAdded() isInit) { ft.add(R.id.center_frame, userFragment, clazz.getName()); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { ft.show(userFragment); } ft.commitAllowingStateLoss(); mCurFragment = userFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (MainHallFragment.class.getName().equals(clazz.getName())) { mSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!isInit) { ((MainHallFragment) userFragment).postScrollTop(); } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { mSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT); } postShowContent(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (Exception e) { e.printStackTrace(); } } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * lidingMenu中的内容Fragment内容过滤(右侧菜单触发) * *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> clazz *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> type */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">filterCenterFragment</span>(Class<? extends BaseSlidingFragment> clazz, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> type) { BaseSlidingFragment userFragment = (BaseSlidingFragment) getFragmentByTag(clazz); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (userFragment != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { userFragment.filter(type); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mSlidingMenu != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) mSlidingMenu.showContent(); } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 延迟切换Fragment */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">postSwitchFragment</span>() { handler.postDelayed(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Runnable() { <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">run</span>() { switchCenterFragment(mCurFragment.getClass()); } }, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">50</span>); } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 清除FragmentManager中所有Fragment */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">removeAllFragments</span>() { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i < LeftFragment.FRAGMENTS_CLASSES.length; i++) { Fragment fragment = getFragmentByTag(LeftFragment.FRAGMENTS_CLASSES[i].getName()); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (fragment != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { ft.remove(fragment); } } ft.commitAllowingStateLoss(); } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 延时mSlidingMenu.showContent() * *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> delayMillis 延时时间 单位毫秒 */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">postShowContent</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> delayMillis) { handler.postDelayed(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Runnable() { <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">run</span>() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mSlidingMenu!=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> !MainActivity.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.isFinishing()) { mSlidingMenu.showContent(); } } }, delayMillis); } } /* * 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 * </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li><li style="box-sizing: border-box; padding: 0px 5px;">145</li><li style="box-sizing: border-box; padding: 0px 5px;">146</li><li style="box-sizing: border-box; padding: 0px 5px;">147</li><li style="box-sizing: border-box; padding: 0px 5px;">148</li><li style="box-sizing: border-box; padding: 0px 5px;">149</li><li style="box-sizing: border-box; padding: 0px 5px;">150</li><li style="box-sizing: border-box; padding: 0px 5px;">151</li><li style="box-sizing: border-box; padding: 0px 5px;">152</li><li style="box-sizing: border-box; padding: 0px 5px;">153</li><li style="box-sizing: border-box; padding: 0px 5px;">154</li><li style="box-sizing: border-box; padding: 0px 5px;">155</li><li style="box-sizing: border-box; padding: 0px 5px;">156</li><li style="box-sizing: border-box; padding: 0px 5px;">157</li><li style="box-sizing: border-box; padding: 0px 5px;">158</li><li style="box-sizing: border-box; padding: 0px 5px;">159</li><li style="box-sizing: border-box; padding: 0px 5px;">160</li><li style="box-sizing: border-box; padding: 0px 5px;">161</li><li style="box-sizing: border-box; padding: 0px 5px;">162</li><li style="box-sizing: border-box; padding: 0px 5px;">163</li><li style="box-sizing: border-box; padding: 0px 5px;">164</li><li style="box-sizing: border-box; padding: 0px 5px;">165</li><li style="box-sizing: border-box; padding: 0px 5px;">166</li><li style="box-sizing: border-box; padding: 0px 5px;">167</li><li style="box-sizing: border-box; padding: 0px 5px;">168</li><li style="box-sizing: border-box; padding: 0px 5px;">169</li><li style="box-sizing: border-box; padding: 0px 5px;">170</li><li style="box-sizing: border-box; padding: 0px 5px;">171</li><li style="box-sizing: border-box; padding: 0px 5px;">172</li><li style="box-sizing: border-box; padding: 0px 5px;">173</li><li style="box-sizing: border-box; padding: 0px 5px;">174</li><li style="box-sizing: border-box; padding: 0px 5px;">175</li><li style="box-sizing: border-box; padding: 0px 5px;">176</li><li style="box-sizing: border-box; padding: 0px 5px;">177</li><li style="box-sizing: border-box; padding: 0px 5px;">178</li><li style="box-sizing: border-box; padding: 0px 5px;">179</li><li style="box-sizing: border-box; padding: 0px 5px;">180</li><li style="box-sizing: border-box; padding: 0px 5px;">181</li><li style="box-sizing: border-box; padding: 0px 5px;">182</li><li style="box-sizing: border-box; padding: 0px 5px;">183</li><li style="box-sizing: border-box; padding: 0px 5px;">184</li><li style="box-sizing: border-box; padding: 0px 5px;">185</li><li style="box-sizing: border-box; padding: 0px 5px;">186</li><li style="box-sizing: border-box; padding: 0px 5px;">187</li><li style="box-sizing: border-box; padding: 0px 5px;">188</li><li style="box-sizing: border-box; padding: 0px 5px;">189</li><li style="box-sizing: border-box; padding: 0px 5px;">190</li><li style="box-sizing: border-box; padding: 0px 5px;">191</li><li style="box-sizing: border-box; padding: 0px 5px;">192</li><li style="box-sizing: border-box; padding: 0px 5px;">193</li><li style="box-sizing: border-box; padding: 0px 5px;">194</li><li style="box-sizing: border-box; padding: 0px 5px;">195</li><li style="box-sizing: border-box; padding: 0px 5px;">196</li><li style="box-sizing: border-box; padding: 0px 5px;">197</li><li style="box-sizing: border-box; padding: 0px 5px;">198</li><li style="box-sizing: border-box; padding: 0px 5px;">199</li><li style="box-sizing: border-box; padding: 0px 5px;">200</li><li style="box-sizing: border-box; padding: 0px 5px;">201</li></ul> */ 左边的fragment代码语言:javascript复制<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">package</span> com.os.activity.sliding; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.util.Arrays; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.activity.MainActivity; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.activity.base.BaseSlidingFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.slidingmenu.R; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.ui.FollowFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.ui.MainHallFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.os.ui.RankFragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.app.ProgressDialog; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.Bitmap; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.BitmapFactory; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.Color; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.os.Bundle; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.support.v4.app.Fragment; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.text.Spannable; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.text.SpannableStringBuilder; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.text.style.ForegroundColorSpan; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.view.Gravity; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.view.View; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.view.View.OnClickListener; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.view.ViewGroup.LayoutParams; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.widget.Button; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.widget.ImageView; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.widget.LinearLayout; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.widget.PopupWindow; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.widget.TextView; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.widget.Toast; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">LeftFragment</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">BaseSlidingFragment</span> {</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> MENU_NORMAL_ICONS[] = { R.drawable.sliding_livehall_icon_normal, R.drawable.sliding_follow_icon_normal, R.drawable.sliding_rank_icon_normal}; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> MENU_CHECKED_ICONS[] = { R.drawable.sliding_livehall_icon_checked, R.drawable.sliding_follow_icon_checked, R.drawable.sliding_rank_icon_checked }; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Class[] FRAGMENTS_CLASSES = { MainHallFragment.class, FollowFragment.class, RankFragment.class};<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//左侧切换显示中间的三个界面</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> View[] mMenuLayouts; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> ImageView[] mMenuIcons; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> TextView[] mMenuTexts; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Bitmap mLoadingBitmap; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> mCurrentIndex = -<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onCreate</span>(Bundle savedInstanceState) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span>.onCreate(savedInstanceState); setContentView(R.layout.sliding_left); setData(); changeMenuByClass(MainHallFragment.class);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//默认中间的界面显示的是这个MainHallFragment</span> } <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">initViews</span>() { mMenuLayouts = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> View[] { findViewById(R.id.menu_livehall_layout), findViewById(R.id.menu_follow_layout), findViewById(R.id.menu_rank_layout) }; mMenuIcons = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ImageView[] { (ImageView) findViewById(R.id.menu_livehall_icon), (ImageView) findViewById(R.id.menu_follow_icon), (ImageView) findViewById(R.id.menu_rank_icon) }; mMenuTexts = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> TextView[] { (TextView) findViewById(R.id.menu_livehall_text), (TextView) findViewById(R.id.menu_follow_text), (TextView) findViewById(R.id.menu_rank_text),}; } <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">addListener</span>() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i < mMenuLayouts.length; i++) { mMenuLayouts[i].setTag(i); mMenuLayouts[i].setOnClickListener(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> OnClickListener() { <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onClick</span>(View v) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> index = (Integer) v.getTag(); changeMenuByIndex(index); } }); } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">setData</span>() { } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 通过索引改变Menu * *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> index */</span> <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@SuppressWarnings</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"unchecked"</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">changeMenuByIndex</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> index) { Class<? extends Fragment> clazz = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mCurrentIndex != index) { clearMenu(); setMenuChecked(index); } clazz = FRAGMENTS_CLASSES[index]; getFragmentActivity(MainActivity.class).switchCenterFragment(clazz); mCurrentIndex = index; } <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 通过Fragment类改变menu * *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> clazz */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">changeMenuByClass</span>(Class<? extends Fragment> clazz) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> index = Arrays.asList(FRAGMENTS_CLASSES).indexOf(clazz); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (index != -<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) { changeMenuByIndex(index); } } <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@SuppressWarnings</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"deprecation"</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">clearMenu</span>() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; i <= mMenuLayouts.length; i++) { mMenuLayouts[i-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>].setBackgroundDrawable(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>); mMenuIcons[i - <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>].setImageResource(MENU_NORMAL_ICONS[i - <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>]); mMenuTexts[i - <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>].setTextColor(getResources().getColor(R.color.gray7)); } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">setMenuChecked</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> index) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// if (index == 0) {</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// return;</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// }</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (index != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> index != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>) { mMenuLayouts[index].setBackgroundResource(R.drawable.sliding_menu_checked_bg); } mMenuIcons[index ].setImageResource(MENU_CHECKED_ICONS[index ]); mMenuTexts[index ].setTextColor(getResources().getColor(R.color.white)); } <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onDestroy</span>() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mLoadingBitmap != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> !mLoadingBitmap.isRecycled()) { mLoadingBitmap.recycle(); mLoadingBitmap = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span>.onDestroy(); } } /* * 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 * </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li><li style="box-sizing: border-box; padding: 0px 5px;">145</li><li style="box-sizing: border-box; padding: 0px 5px;">146</li><li style="box-sizing: border-box; padding: 0px 5px;">147</li><li style="box-sizing: border-box; padding: 0px 5px;">148</li><li style="box-sizing: border-box; padding: 0px 5px;">149</li><li style="box-sizing: border-box; padding: 0px 5px;">150</li><li style="box-sizing: border-box; padding: 0px 5px;">151</li><li style="box-sizing: border-box; padding: 0px 5px;">152</li><li style="box-sizing: border-box; padding: 0px 5px;">153</li><li style="box-sizing: border-box; padding: 0px 5px;">154</li><li style="box-sizing: border-box; padding: 0px 5px;">155</li><li style="box-sizing: border-box; padding: 0px 5px;">156</li><li style="box-sizing: border-box; padding: 0px 5px;">157</li><li style="box-sizing: border-box; padding: 0px 5px;">158</li><li style="box-sizing: border-box; padding: 0px 5px;">159</li><li style="box-sizing: border-box; padding: 0px 5px;">160</li><li style="box-sizing: border-box; padding: 0px 5px;">161</li><li style="box-sizing: border-box; padding: 0px 5px;">162</li><li style="box-sizing: border-box; padding: 0px 5px;">163</li><li style="box-sizing: border-box; padding: 0px 5px;">164</li><li style="box-sizing: border-box; padding: 0px 5px;">165</li><li style="box-sizing: border-box; padding: 0px 5px;">166</li><li style="box-sizing: border-box; padding: 0px 5px;">167</li><li style="box-sizing: border-box; padding: 0px 5px;">168</li><li style="box-sizing: border-box; padding: 0px 5px;">169</li><li style="box-sizing: border-box; padding: 0px 5px;">170</li><li style="box-sizing: border-box; padding: 0px 5px;">171</li><li style="box-sizing: border-box; padding: 0px 5px;">172</li></ul> */ 主要就是 oncreate 中 初始化 刚启动应用后中间显示的fragment 是 MainHallFragment. 视频时RTMP 协议,解码用的ffmpeg. 代码就不贴了,在工程的jni 目录下,都有注释。 聊天的代码 聊天室界面是 ChatroomActivity. 这是 一初始化MultiUserChat 聊天室对象的代码,具体代码 ,在这个类里面。代码语言:javascript复制<code class="hljs axapta has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Thread() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> run() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { Thread.sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> * <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1000</span>); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (InterruptedException e) { e.printStackTrace(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">count</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> isRandom = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">count</span> <= <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span> !create_flag) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">count</span>++; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mHostInfo != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { mUserNickName = getNickName(isRandom); muc = ConnectionUtils.getMultiUserChat(mHostInfo.room_id, mHostInfo.room_service, mUserNickName, mPassword, ChatroomActivity.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (muc != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { create_flag = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 创建聊天室成功,监听聊天室返回的消息</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 监听消息</span> muc.addMessageListener(packetListener); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// muc.addParticipantListener(participantListener);</span> muc.addParticipantStatusListener(statusListener); muc.addUserStatusListener(userStatusListener); mHandler.sendEmptyMessageDelayed(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">500</span>); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { create_flag = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { create_flag = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; } <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// } else {</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// }</span> } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (NotFoundException e) { e.printStackTrace(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (SameException e) {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 昵称重复</span> isRandom = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (BannedException e) {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 禁止加入房间</span> sendBandHandle(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (XMPPException e) { e.printStackTrace(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (Exception e) { e.printStackTrace(); } }</code>
Flarum搭建论坛详细教程
Flarum搭建论坛详细教程
1、关于Flarum程序完美支持军哥lnmp环境/宝塔等,下载程序上传到网站根目录并需要伪静态+fileinfo扩展。程序本地下载:FlarumChina-beta7.zipGithub下载地址:https://github.com/skywalker512/FlarumChinafileinfo拓展 需要支持php扩展fileinfo。 1、对于lnmp1.3默认没有支持。修改include/upgrade_php.sh这个文件,把其中的:--disable-fileinfo,全部替换:--enable-fileinfo,再执行./upgrade.sh升级php就行了。 2、对于宝塔,安装后,找到你的PHP程序,里面有扩展可以选择安装。2、centos安装LNMP支持flarun2 | 1 数据库安装代码语言:javascript复制sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server systemctl start mysqld.service2 | 2 mysql5.7获取密码的方式代码语言:javascript复制sudo grep 'temporary password' /var/log/mysqld.log代码语言:javascript复制vi /etc/my.cnf代码语言:javascript复制#添加validate_password_policy配置 validate_password_policy=0 #关闭密码策略 validate_password = off修改root密码代码语言:javascript复制mysql -uroot -p密码代码语言:javascript复制set global validate_password_policy=0; set global validate_password_length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; grant all privileges on *.* to root@"%" identified by "new password"; flush privileges;代码语言:javascript复制systemctl restart mysql2 | 3 安装php7.2代码语言:javascript复制sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php72w-fpm php72w-cli php72w-curl php72w-dom php72w-gd php72w-json php72w-mbstring php72w-openssl php72w-pdo_mysql php72w-tokenizer php72w-zip -y代码语言:javascript复制vim /etc/php-fpm.d/www.conf代码语言:javascript复制#找到以下两处共四行代码并修改如下: user = nginx group = nginx listen.owner = nginx listen.group = nginx3、安装Flarum方法一:下载=即使用整合包https://github.com/skywalker512/FlarumChina/releases/tag/v0.1.0-beta.12方法二:composer拉取 (比较建议后面装插件都是用的composer)3 | 1 安装composer下载composer.phar, 如果是网络原因失败,多试几次代码语言:javascript复制curl -sS https://getcomposer.org/installer | php把composer.phar移动到环境下让其变成可执行:代码语言:javascript复制mv composer.phar /usr/local/bin/composer测试代码语言:javascript复制composer -v修改镜像地址代码语言:javascript复制composer config repo.packagist composer https://mirrors.aliyun.com/composer/3 | 2 安装ningx代码语言:javascript复制yum -y install nginx unzip进入wwwroot目录中使用composer命令来安装flarum:代码语言:javascript复制mkdir /var/www/flarum/ cd /var/www/flarum/代码语言:javascript复制composer create-project flarum/flarum . --stability=beta #不用使用管理员权限命令sudo。完毕后修改nginx中的默认配置文件:代码语言:javascript复制sudo vim /etc/nginx/nginx.conf代码语言:javascript复制#将server代码段下的所有代码都用#注释掉 #server { # listen 80 default_server; # listen [::]:80 default_server; # server_name _; # root /usr/share/nginx/html; # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # location / { # } # error_page 404 /404.html; # location = /40x.html { # } # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } #} #然后修改 server { listen 80; server_name your.website.url; root /var/www/flarum/public; index index.php index.html; #include /home/flarum/wwwroot/.nginx.conf; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ /index.php?$query_string; } # The following directives are based on best practices from H5BP Nginx Server Configs # https://github.com/h5bp/server-configs-nginx # Expire rules for static content location ~* \.(?:manifest|appcache|html?|xml|json)$ { add_header Cache-Control "max-age=0"; } location ~* \.(?:rss|atom)$ { add_header Cache-Control "max-age=3600"; } location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ { add_header Cache-Control "max-age=2592000"; access_log off; } location ~* \.(?:css|js)$ { add_header Cache-Control "max-age=31536000"; access_log off; } location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ { add_header Cache-Control "max-age=2592000"; access_log off; } # Gzip compression gzip on; gzip_comp_level 5; gzip_min_length 256; gzip_proxied any; gzip_vary on; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; }注意:因为Flarum遵守了最新的安全规范,其程序的运行目录其实是在public文件夹内。4、插件安装https://bbs.csur.fun/d/84-flarum5、虚拟机搭建买个虚拟机做网页,诸多限制,虚拟机服务商的提供的服务确实就两字“操蛋”。 为什么没有买云服务器?就两字 “没钱”!哈哈。 虚拟机的购买途径自寻,但是很多服务商真的很坑爹。 虚拟机要求php支持7.2以上mysql支持5.7以上能够支持更改网站跟目录6、更改网站根目录层级将 public 目录(包括 .htaccess)中的所有文件移动到 Flarum 根目录。然后编辑 .htaccess 取消第 9-14 行的注释,以保护敏感资源。 然后编辑 index.php 文件,更改以下行:代码语言:javascript复制$site = require './site.php';最后,在 site.php 更新路径,以反映新的目录结构:代码语言:javascript复制'base' => __DIR__, 'public' => __DIR__, 'storage' => __DIR__.'/storage',config.php 更新 url 路径代码语言:javascript复制'url' => 'https://xxx.com/community',不更改网站层级目录请根据你的虚拟主机面板的不同,将网站运行目录指向public文件夹。 如果您使用的是虚拟主机无法更改目录,请按照一下的方法进行设置 在根目录下新建一个名为 .htaccess的文件代码语言:javascript复制RewriteEngine on RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ /public/$1 [L]7、其他底部加统计代码语言:javascript复制vendor/flarum/core/views/app.blade.php去掉网络字体代码语言:javascript复制vendor/flarum/core/src/Http/WebApp/WebAppView.php伪静态设置Nginx的话在站点配置文件处添加下面一段话。代码语言:javascript复制location / { try_files $uri $uri/ /index.php?$query_string; } location /api { try_files $uri $uri/ /api.php?$query_string; } location /admin { try_files $uri $uri/ /admin.php?$query_string; } location /flarum { deny all; return 404; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }
一些关于网站推广问题合集。
一些关于网站推广问题合集。
网站怎么快速上权重?要让一个网站快速提高权重,需要实施以下一些有效的策略:提供高质量的内容:提供高质量、原创、有用的内容是最重要的。这可以吸引更多的用户访问,并增加用户留存时间,提高用户体验。同时,高质量的内容也会被其他网站引用和分享,这将有助于增加外部链接,提高网站的权重。内部链接优化:内部链接是指在网站内部不同页面之间的链接。通过优化内部链接结构,可以增加搜索引擎对网站的理解,提高网站权重。在内部链接时,要使用相关的关键字作为链接文本,而不是使用"点击这里"这样无意义的链接文本。外部链接建设:获取来自其他网站的高质量链接对于提高网站权重非常重要。可以通过主动进行友情链接、媒体报道、论坛发帖等方式增加外部链接。但是请注意,建立外部链接是需要花费时间和精力的,必须确保链接是高质量的、自然的,否则可能会适得其反。社交媒体推广:在社交媒体平台上建立专业的社交媒体账号,提供网站相关的信息、文章、图像、视频等,让更多的用户了解网站,增加网站的曝光度,进而增加网站权重。网站结构优化:优化网站结构可以帮助搜索引擎更好地抓取和理解网站内容,提高网站权重。可以通过优化网站的HTML代码结构、网站的目录结构、网站的图片和视频的优化等方式实现。需要注意的是,这些策略需要长期坚持和不断完善,才能够取得长期、稳定的效果。怎么养站?要养好一个网站,需要考虑以下几个方面:网站内容:一个网站需要有高质量、有价值的内容来吸引用户。内容可以是文字、图片、视频等形式,需要有足够的量和质量,同时需要及时更新。网站设计:网站的设计需要符合用户的视觉需求,界面简洁、易于操作、美观大方,同时需要考虑不同设备(如手机、平板、电脑)的适配。网站优化:通过搜索引擎优化(SEO)、网站性能优化(如减少页面加载时间)、提高用户体验(如减少广告干扰),来提高网站的流量和用户满意度。社交媒体:通过社交媒体来吸引用户,增加网站的曝光率和影响力,比如可以在微信公众号、微博、知乎等平台上发布内容,吸引用户关注。安全保护:确保网站的安全性,包括用户信息保护、反垃圾邮件、反病毒等安全措施。数据分析:通过数据分析工具,了解用户访问情况,优化网站的运营,提高用户满意度和转化率。综合考虑上述因素,不断更新和改进,就可以养好一个网站。网站怎么发外链有用?要使外链对你的网站有用,你需要遵循以下几个步骤:确定目标受众和内容:确定你要向哪些人推广内容,以及他们可能对哪些内容感兴趣。通过创建高质量的内容,吸引用户来阅读你的文章并点击你的链接。找到相关的网站:寻找与你的内容相关的网站,并联系网站所有者以获得一个外链。你可以通过搜索引擎、社交媒体、行业博客等方式来找到这些网站。站长百科网创建有价值的内容:创建有价值的内容可以吸引其他网站链接到你的网站。确保你的内容是高质量的,包含有用的信息,且易于阅读和分享。联系其他网站:直接联系其他网站的所有者,请求他们在他们的网站上添加你的链接。你可以通过电子邮件、社交媒体或其他渠道来联系他们。使用社交媒体:在社交媒体上分享你的内容,并鼓励其他用户分享你的文章。这样可以提高你的内容的曝光率,并吸引更多的用户来访问你的网站。需要注意的是,对于外链的数量和质量,搜索引擎有一定的要求,如果采用不当的方式获取外链,可能会对你的网站产生负面影响。因此,你需要遵守搜索引擎的规则,采用合法的方式获取外链,从而为你的网站带来更多的流量和排名提升。2023年建什么类型的网站有前景?2023年,移动端和云端应用程序将继续受到极大的关注,尤其是基于AI的应用程序。有预测认为,2023年将会出现大量的智能家居、自动驾驶、语音助手等应用,这些网站将具有更大的前景。收藏 | 0点赞 | 0打赏
互联网论坛
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼欧洲100佳创业企业评选活动上周在阿姆斯特丹结束,这次活动评出了欧洲100家最具潜力的创业企业。此次论坛讨论了2016年及未来几年欧洲创业者面临的前景。众多顶级投资人参与了讨论,指导创业企业如何吸引合适的投资机构。演讲嘉宾和听众都认为在欧洲融资仍然是主要挑战,这对于创业者来说尤其重要。论坛讨论结束,企业开始登台宣讲,评选标准和去年一样严格。参与评选的企业来自整个欧洲,从俄罗斯到法国到英国到德国。这100家最佳企业都是经过严格的层层筛选评出的,荣誉来之不易,也是众望所归。这些企业来自不同的领域,他们在欧洲以及全球市场的发展将备受瞩目,也会受到密切跟踪。 2016年欧洲100佳创业企业榜单公司行业国家12Return软件荷兰3megawatt GmbH清洁技术德国4th Office云技术英国6Tribes社交媒体英国Acast AB娱乐媒体瑞典Accellta Ltd生命科学/生物技术以色列Agiboo BV云技术荷兰agile42其他德国Anders Innovations网络/互联网芬兰Appentra Solutions软件西班牙arivis AG软件德国Beyond Sports虚拟技术荷兰Billage云技术西班牙Biovotion AG医疗设备瑞士BISEES INFORMATION SYSTEMS软件爱尔兰CARENITY社交媒体法国CloudEndure云技术以色列Compliance Risks专业服务爱尔兰Create Intelligence Ltd软件/分析英国Cree GmbH清洁技术奥地利CropX云技术以色列DCA (Data-Centric Alliance)大数据/存储俄罗斯Diviac AG互联网/网络瑞士EasyPark Group其他瑞典Educated Change Ltd娱乐媒体英国Enso Detego GmbH软件奥地利eSMART Technologies清洁技术瑞士EVRYTHNG云技术英国Fairsail云技术英国Featurespace其他英国FINALCAD软件法国GetIntent广告技术美国Grapeshot软件英国GuardSquare网络安全比利时HeadSense Medical医疗设备以色列HELLO STAGE娱乐媒体美国Herta Security网络安全西班牙High-Tech Bridge网络安全瑞士homePad Solutions互联网/网络瑞士ICS2大数据/存储以色列ID Finance银行/并购西班牙indoo.rs GmbH软件奥地利Kameleoon广告技术法国Keypasco网络安全瑞典KTH Event Agency清洁技术土耳其Lemon Way互联网/网络法国Leverate软件以色列LibraEsva Srl网络安全意大利MediSapiens Ltd生命科学/生物技术芬兰MeetApp AB移动技术瑞典Metafused Ltd广告技术英国moblin大数据/软件/广告技术以色列Mols Media BV软件荷兰MYMobile Security网络安全英国nestpick其他德国Nexthink软件瑞士OneSoon Limited软件英国Openhost, SL云技术西班牙Optimal Plus大数据/存储以色列OurCrowd风险资本/投资以色列Overleaf云技术英国P.I.Works电讯土耳其Padawan Ltd网络英国Parx Plastics BV清洁技术荷兰PleaseTech Ltd软件英国Polar OLED Ltd硬件英国Privatequity.biz互联网/网络以色列Productsup GmbH软件德国Pyreos Limited硬件英国Qosmos软件法国QUASARDB软件法国Radisens Diagnostics医疗设备爱尔兰rational motion清洁技术德国RedCloud Technologies软件英国Relay42云技术荷兰Roima Intelligence其他芬兰Securosys SA网络安全瑞士Sentiance软件比利时Shadow Technologies网络/互联网以色列Smoltek AB纳米技术瑞典Spideo软件法国Sportswik AB娱乐媒体dia瑞典Stratoscale虚拟技术以色列Takeaway.com B.V.网络/互联网荷兰Teamnet Group软件罗马尼亚The Nostrum Group Ltd软件英国TimeLog A/S软件丹麦Tinitell电讯瑞典TitanHQ网络安全爱尔兰Umbilical Design其他瑞典VATBOX云技术英国Venture Spirit云技术比利时VerseOne软件英国Visma Solutions Oy云技术芬兰Wax Digital Ltd云技术英国网络lib大数据/存储法国WeekCal BV移动技术荷兰Zapgocharger Ltd消费电子英国Zebra Medical Vision生命科学/生物技术以色列ZeroLight软件英国
《中国网络媒体的未来2014》71页PPT
《中国网络媒体的未来2014》71页PPT
点击标题下「大数据文摘」可快捷关注[摘要]腾讯科技企鹅智酷栏目与中国人民大学新闻学院新媒体研究所共同发布了移动媒体趋势报告《中国网络媒体的未来2014》11月12日下午,“2014腾讯网媒体高峰论坛”在北京举行。腾讯科技企鹅智酷栏目与中国人民大学新闻学院新媒体研究所共同发布了移动媒体趋势报告《中国网络媒体的未来2014》。中国人民大学新闻学院教授彭兰做了演讲。以下是彭兰的演讲要点。报告指出,移动互联网正是我们要面对的未来,这在中国尤为明显。2014年6月,中国手机上网比例首次超过PC机上网比例,手机网民的规模超过了八成。在移动时代,媒体的疆域也在拓展。移动媒体就等于新闻客户端?当然不是。移动媒体=内容媒体+关系媒体+服务媒体。中国移动媒体升级综合新闻客户端仍然是用户首选。每天多次打开新闻客户端的用户占比达到了77.5%。新闻客户端形式的革新:新闻客户端对内容品质要求越来越高,比肩甚至超越传统媒体。短板:在移动端如何平衡轻量化阅读和深度内容,仍是需要持续优化之处。综合新闻客户端机会有限,但在垂直领域可谓空间广阔。时政、财经、科技等领域拥有天然的关注度和广泛的信息数据,可称为垂直移动应用的新窗口。移动自媒体:公众号成催化剂在微信平台上,平均每天人均阅读文章5.86篇。日均阅读文章数超过3篇的用户占比达到51%。自媒体面临可持续化的挑战。1.受政策、平台因素影响大;2.需要高度的自我规范与自我约束;3.专业能力决定生存能力。中国用户如何使用移动媒体?近半数用户使用移动终端每天超过3小时。近七成用户更多使用移动终端阅读新闻资讯,而依赖电脑看新闻的用户不到一成。近八成用户会在社交平台分享新闻。中国移动媒体未来五个趋向新闻客户端的社交深化;UGC和内容众包模式升级;入口向平台转化加速;可穿戴设备带来数据资源扩张;移动服务客户端的“媒体化”可能。PPT全文如下:摘自:腾讯科技
加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈