Android Studio 快捷文档加载缓慢或无法加载问题解决

Android Studio 快捷文档加载缓慢或无法加载问题大家可能都会遇到过,其原因是您所安装版本的Android Studio的Android SDK文档路径被默认设置为:https://developer.android.com/reference/ 

要想提高加载速度,应该将其修改为本地Android SDK的文档路径。所以您只需到$HOME/.AndroidStudio$VERSION/config/options/jdk.table.map.xml文件内,将所有的jdk项内的javadocPath的url修改为:$ANDROID_HOME/docs/reference

注:

  • $HOME:用户根目录;
  • $VERSION:为当前Android Studio的版本,如果为非稳定版本则版本前添加:Preview;
  • $ANDROID_HOME:Android SDK根目录;

 

公共开发资源搜集

记录一些用到的公共服务资源

公共NTP服务器
类Unix操作系统
  • time1.aliyun.com ~time7.aliyun.com
  • ntp1.aliyun.com ~ ntp5.aliyun.com
Windows时间同步服务器

time.pool.aliyun.com

IP地址库
  • 淘宝IP地址库:http://ip.aliyun.com/
公共镜像站
  • 阿里云公共镜像站:http://mirrors.aliyun.com/ 镜像同步频率是每天凌晨2:00-4:00,覆盖了大多数开源软件及Linux发行版。
  • 网易公共镜像站:http://mirrors.163.com/ 所提供的镜像服务包括: Ubuntu, Fedora, Debian, Arch, Gentoo, Slackware, CentOS等等
公共DNS
  • 阿里云DNS:223.5.5.5/223.6.6.6

从Git中彻底移除版本控制中的文件

众所周知从git版本控制中删除一个文件仅需要使用 git rm 即可。然而,有时候我们不小心将敏感文件或者没有必要的大文件包含进版本控制时,这个时候仅仅简单删除时无法做到将其从版本控制中完全删掉的,因为删掉的文件还存在于版本控制的历史中。这个时候需要我们的主角命令登场:

该命令执行完毕后,文件已经从本地的版本控制库中完全删除了,你所需要做的就是通过强制push覆盖掉远程服务器的中心库即可。

然后熟悉git原理的朋友应该都知道,我们的文件提交都对应了objects,我们删掉的文件虽然已经从本地版本控制中彻底删除,但是文件的objects依然停留在硬盘上,它们占用存储。我们需要使用GC命令进行垃圾回收,彻底清除这些文件,回收其占用的磁盘空间。

 

AppOps应对Android应用流氓权限行为及肆无忌惮的后台服务

AppOps是Android 自4.3加入的应用权限授权管理框架,虽然到了后来6.0引入了另外一套方案Android Runtime Permission,但是 AppOps并没有被废弃掉,它依然存在于系统框架内,只不过没有图形管理入口而已,但是依然保留并增加了API,而且AppOps命令行管理工具依然可用。我们所用到的就是AppOps Command line utility。

所有的OP(Operations),即操作权限列表

appops 命令是Android系统的可执行程序,我们要运行,需要使用电脑USB连接手机并开启开发者调试,使用 adb shell [-e escape] [-n] [-Tt] [-x] [command] 运行远程shell命令(如果没有给定命令则开启交互的shell终端) 在Android系统内执行shell命令。

现在,我们就要拿微信来举个例子,微信中文版在Android 6.0下强制要求读取电话状态信息定位读取写入外置存储权限,否则应用强制无法正常使用。我不知道大家怎么看待,我个人认为这三个权限都是可选的权限,微信就是在耍流氓。而我们就可以使用AppOps将其某项强制要求权限忽略掉,注意这里说的是忽略掉而不是禁用,如果单纯禁用在Android Runtime Permission内即可做到,但是微信可以感知到自己的权限被禁用,就会流氓的提示你应用无法使用。而AppOps可以忽略应用的权限申请,但是这个应用本身是无法感知判断的。在这里我们尝试禁用微信的读取电话状态信息权限、位置定位权限和后台服务运行权限(这个导致无法后台收消息):

通过上面的操作,微信已经无法获取上述权限,而且再退出微信应用后,几分钟后微信后台服务(注意Foreground Service不会被关掉)都会被系统关掉,但是微信应用本身的主进程依然是作为空进程缓存在内存中,而不是被整个杀掉。

作为Android开发者,真心希望大家能够尽可能的克制规范自己的行为,少申请一些非必要权限,少运行一些后台活跃唤醒服务。

 

  1.  AppOpsManager.java

Glide框架高斯模糊图片处理

要素: Glide; TransformationRenderScriptScriptIntrinsicBlur;

对于不需要看废话的请直接Show me the code

对于模糊处理,一般的解决方案有四种:

  1. Java实现的算法处理;
  2. NDK实现的算法处理;
  3. RenderScript处理;
  4. openGL处理;

这四种方案的性能考虑的话,一般来讲应该是: 1 < 3 < 2  < 4 (2、3的性能非常接近),不过当属RenderScript方式最为简便(很显然嘛,平台无关性)。

RenderScript是Android自SDK17提供的一套平台无关计算密集脚本,它使用C99语法脚本,可以实现高性能的计算,而其包含大量内联函数,其中就包括了我们今天用到的:ScriptIntrinsicBlur,这是一个高斯模糊处理内联函数,一般系统用来进行阴影的计算处理。

上面有提到RenderScript是自SDK17引入的,但是Android 团队为我们提供了RenderScript support library,而起在Gradle-base的项目中的引入也极其简单,仅需要在module build.gradle设置以下11、12两行即可:

接下来简单说说 ScriptIntrinsicBlur,使用它虽然很方便,但是也是有弊端的,模糊radius不能超过25.0f,不过我们可以通过缩小原图抽样的方式变相的进行扩大半径。

Glide是一个优秀的图片加载缓存处理等一系列功能的框架,它优雅而且使用渐变,扩展也很容易,Glide就提供了自定义Transformation的方式进行扩展图片的处理

到了这里就是通过自定义Transformation的方式,详细的这里就不赘述了,感兴趣可以查看Glide官方文档:Transformation。需要特别提到的是,每个Transformation都有一个String getId()的回调,该ID用于在对处理后的图片进行缓存时的文件命名,这样当下次相同图片使用相同Transformation时,则无需任何实际处理,直接读取缓存文件,所以我们实现时的ID需要同时关联所有的调整参数,参数改变的ID也应该相应改变。下面就是我自定义的BlurTransformation

使用起来也是非常简单:

 

Gist: https://gist.github.com/ligboy/eee784aa57f40a615179

Android Studio Getter & Setter Template

众所周知Android Studio基于开源版的Intellij IDEA,因而具有极其便利的代码辅助功能,其中Getter & Setter生成就是其中之一,然而在Android开发时,因为Code Style for Android 规定私有的成员变量以“m”,静态私有成员变量以“s”开头的驼峰法命名:

Follow Field Naming Conventions

Non-public, non-static field names start with m.
Static field names start with s.
Other fields start with a lower case letter.
Public static final fields (constants) are ALL_CAPS_WITH_UNDERSCORES.

然而这在使用Android Studio默认的Getter & Setter 生成时会出现类似这样的情况:

插件AndroidAccessors可以处理Android代码规范生成Getter Setter这种情况,然而这个插件并不完美。而且Idea本身的getter setter生成规则是可以通过模板文件设置的,所以我们完全可以通过添加自定义规则的方式来实现Android编码规范的Getter Setter生成。

以下就是Android Studio默认的Getter及Setter模板:

Getter – Intellij Default

Setter – Intellij Default

Setter – Builder

可以看出这是某种模板引擎语言,请教了“撸大神”,被告知应该是Velocity模板引擎,原谅我的无知健忘,竟然一点印象都没有。

然后我们需要做的就很简单了,依葫芦画瓢,在原处理的基础上在进一步将$name做去除s及m前缀处理即可得到想要的结果,我定义了Getter:Android,Setter:Android、AndroidBuilder三个模板。以下附上自定义模板源码:

Getter:Android

Setter:Android

Setter:AndroidBuilder

附上Github Gist 地址: https://gist.github.com/ligboy/0eae9ecffc694595d40e

  1. 关于Velocity https://github.com/putaoshu/jdf/blob/master/doc/core_vm.md

Terminal 更新Android SDK

因为公司持续构建系统的Android SDK升级需要,不能在图形界面进行操作升级,所以搜集了以下资料,学习$ANDROID_HOME/tools/android 的命令行参数。

更新sdk的命令行帮助信息如下:

屏蔽掉images、source、sample等构建无用的模块

android -s update sdk -u -t "extra-android-support,extra-google-m2repository,extra-google-google_play_services,extra-android-m2repository,platform-tools,tool,platform"

 

其实升级的最大问题就是万恶GFW的阻挠问题,也就是设置代理问题。对于android sdk的更新的代理设置有多种方式.

一种是在 ~/.android/.androidtool.cfg 中指定,如果之前没有运行过sdk manager,该文件可能不存在,自己创建即可。文件的内容如下:

另外一种是实在更新命令中指定代理参数:

$ANDROID_HOME/tools/android update sdk --proxy-port proxy.example.com --proxy-port 8080 -s -u -t "1"

中国梦,宪政梦

本文是《南方周末》2013年新年献词未删减版,作者系南方周末资深评论员戴志勇先生。

  天地之间,时间绽放。
  这是我们在2013年的第一次相见,愿你被梦想点亮。
  2012年,你守护自己的生活,他们守护自己的工作。守护这份工作,就是在守护他们对生活的梦想。
  2012年,庙堂之上发出的宪政强音嗡然回响:“宪法的生命在于实施,宪法的权威也在于实施。”我们期待宪法长出牙齿,宪政早日落地。惟如此,才能成就这个沧桑古国的艰难转型;惟如此,国家与人民,才能重新站立于坚实的大地之上。
  今天,已是能够梦想的中国,今天,已是兑现梦想的时代。经历过宪政缺失的“文革”梦魇,我们花费三十多年的时间来逐渐回归常理与常情。从土地联产承包责任制到个体户、乡镇企业到“民企”,稍稍归还国人自主安排生活的权利,我们便创造了繁华城市,收获了满仓粮食。
  我们重新体认什么是真,什么是假,是其是,非其非;我们重燃对公义的热爱,对自由的向往。面对暴虐强力,我们双手相握,一起走过艰难时刻,迎接生活转机。
  今天,我们终于可以从厚厚的历史尘埃中挺起胸,从琐碎的日常生活中抬起头,重走先辈的宪政长征,重温先辈的伟大梦想。
  一百七十多年前,我们开始从天朝上国的迷梦中醒来。先败于英,后败于日。百姓愈加民不聊生,耻感深深刺痛中国士人。保国!保种!由洋务而君宪,由立宪而革命。从器物到制度再至文化,激愤者不惜彻底打倒“孔家店”,决绝地将自己的文明连根拔起。
  辛亥革命后,清帝退位,先辈们终于建立了亚洲第一个共和国。但是,一个自由、民主、富强的宪政中国并没有随之而来。
  国家内外,战争连连;人群内外,残酷不断。
  一度,人们远离仁,远离义,远离天道,远离对自由的坚守。
  一度,人们认错为对,指鹿为马,万千生灵生机断绝。
  美梦与山河,齐齐破碎。自由与宪政,双双消隐。
  度尽人世劫波,深味人性幽暗,我们依然是能做梦的人,有颗能做梦的心。
  今天,我们断断不只梦想物质丰盛,更希望性灵充盈;我们断断不只梦想国力能强盛,更希望国民有自尊。新民和新国,救亡与启蒙,谁也离不开谁,谁也不能压倒谁。而宪政便是这一切美梦的根基。
  兑现宪政,坚守权利,人人才能心如日月流光溢彩;鳏寡孤独才能感受冬日暖意而非瑟瑟发抖;“城管”与小贩才能谈笑风生;房屋才能成为自己与家人的城堡;
  兑现宪政,限权分权,公民们才能大声说出对公权力的批评;每个人才能依内心信仰自由生活;我们才能建成一个自由的强大国家。
  兑现宪政大梦,每个人才能做好个人的美梦。而这需要我们就从手边做起,就从守护此时此刻的生活做起,而不要将重任留给子孙。
  很多人一直深深懂得这一点,很多人早就努力践行这一点。
  不是杰出者才做梦,是善于做梦者才杰出。
  你的天赋权利就是可以梦想,并且兑现梦想!
  为你的梦想鼓掌,为这个国家的梦想加油,这就是很多新闻人的梦想,是他们不大不小的野心。他们忠于新闻,更忠于内心。愿你也有个玫瑰色的美梦;自由成就自己,完成天之所赋。
  总会梦想人人都可以做一个有尊严的人,不论身居高位,还是街头卖艺;
  总会梦想人人内心有爱,即使罪犯也未必穷凶极恶,总有恻隐之心自由闪动;
  总会梦想阶层只是引人自由流动的动力,而不再是相互猜忌和仇视的天堑;总会梦想这五千年文明生生不息,为改善人类的现代处境,捧出一掬甘冽清泉……
  兑现这一千一万个梦想,才能抚平这一百多年的刻骨痛楚。

  兜兜转转一百七十年,美梦成真何其难!一百七十年后,依然有人渴望良知萌新芽,重温天命之谓性;依然有人坚持要求权利一一落地,政治复归于正,公义自在流淌。

  依然有人相信,不管多难,梦想终会落实为宪政良制,风行为敦敦美俗。

  先辈们筚路蓝缕,践义成仁。如今,后人承继其志,燃灯前行。

  兑现梦想,自然要借鉴前贤智慧,与古人的信仰、习俗和情感和解。儒释道法墨,百家皆是源泉;周汉唐宋明,代代皆有可取。

  但这决不是要复古,古人不能给予今天所需的一切。只是不再轻易贬损先辈,平心静气地吸收转进,以让中华文明开新花,结新果。

  兑现梦想,自然要吸取世界经验。所以要认真审视希腊民主,罗马法治,借鉴英美宪政,追赶现代科技文明。

  但这也不是仅仅作一个西方文明的优等生,西人有西人演进的轨迹,同样未必能直接给予我们今天所需的一切。

  我们要站在自己的大地上,与各国人民一起,生活出一种古今相融的新生活,文明出一种中西合璧的新文明。在古今中西的激荡中,要遵循人类共通的价值,也要不惮于做自己的新梦。

  称美古人,赞扬邻居,不是因为他们足够完美,而是因为我们熟悉他们眼中洋溢的快乐,心底流淌的自由。

  中国人本应就是自由人。中国梦本应就是宪政梦。

  宪政之下,才能国家持续强盛,宪政之下,才有人民真正强大。兑现宪政梦想,才能更好地外争国权,维护国家的自由;才能更好地内争民权,维护人民的自由。而国家的自由最终必得落脚于人民的自由,必得落脚于人人可以我口说我心,人人可以用心做美梦。

  生而为人,谁能不热爱自由?这自由,不仅是权利针对权力而言,也是宽恕针对报复而言,是般若针对无明而言,是仁爱针对暴虐而言,是有道针对无道而言。

  大道之行,天下为公;万物自在,各正性命。这就是古人的梦想,先辈的梦想,也是今天很多人的梦想。

  中国梦,自由梦,宪政梦。

  万物速朽,但梦想永在。万物诞生,因梦想不灭。梦想就是生生之几,就是当你失败了一百次,那第一百零一次充实你内心的不死之希望。

  依然有人倾听你的梦想,期待你敢于做梦。你从苦难中爬起,他们为你加油;你尝尽人世冷暖,他们为你加油;你收获美好生活,他们为你加油……他们别无所资,惟有对梦想的执着;他们别无所长,惟有对真相的追求。

  一句真话能比整个世界还重,一个梦想能让生命迸射光芒!

中国解决钓鱼岛问题的关键不在动用武力而在于加快国内政治体制改革

此文是转自天涯的一篇文章,仔细读来,我发现作者对当前问题的分析很中要害,看来这位作者确实是一位还可以独立思考之人,能够站在一定的高度理性地分析问题,指出解决问题的关键。

在抗日热情高涨的今天,大家兴奋的头脑不一定能受得住这盆“冷水”的相对温度,但我还是希望朋友们能仔细把文章看完,之后安静地做一下自我反省,当然,如果当政者能考虑到文章所提及的内容,并能接受和理解,钓鱼岛的问题将会是一个容易解决的问题,至少在以后中国再也不会出现类似钓鱼岛这样的问题。下面是转发的文章全文:

昨日,我作文“中国绝不应抱有武力解决钓鱼岛争端的危险想法”,指出对日动武的危险性,但并未说明如何解决钓鱼岛争端。今天试为大家分析。

钓岛风波牵动全国人民的敏感神经,官方发言抗议,民间YX砸车,忙的不亦乐乎。但在一片喊打喊杀声中却难以掩饰中国人对于钓鱼岛的焦灼和无力感,不知在好整以暇、占据优势的日方面前,怎样才能合理解决这一老大难问题。其实细细梳理,解决钓鱼岛问题的关键不在军事上战胜攻取,封狼居胥,也不在外交上折冲樽俎,纵横捭阖,而在修明内政,加快国家政治体制改革,实现国内和解和宪政秩序。

中国要想解决钓鱼岛问题,存在着理想和现实间的五大矛盾:

一、宣传导向与历史事实的矛盾。

中国人对于钓鱼岛问题的观点基本上来自于政府宣传的塑造,而这一以“钓鱼岛是中国固有领土”为目的的塑造其实颇多盲点和扭曲,正是由于得不到完整、全面的历史事实,才造成中国人对于钓岛问题有很多不合理的理解和想象,反过来捆绑了政府的手脚。对比史实,中国最先发现钓鱼岛不假,但其依据都在遥远的古代。试举几例。细考中方资料,中文中文文献对钓鱼岛的记载,最晚到1871年的《重纂福建通志》;最后的巡视记录在1722年的《台海使槎录》,以后即无记载可言。而日方1885年“发现”钓鱼岛是个“无人岛”,这中间确实有个时间差。此其一。中方言之凿凿,称钓鱼岛是在甲午战后,《马关条约》中作为台湾附属岛屿被割让的。其实钓鱼岛被日占和甲午战争确有关系,因日方下定占岛决心,的确是考虑到中方大败之时无力提出反对。但钓鱼岛确实不是《马关条约》割让的,因《马关条约》所定交割范围并不包括钓鱼岛。如果当时清方稍稍用心,将钓鱼岛列入《马关条约》,或对日方超出《马关条约》占据钓鱼岛提出抗议,则没有后来的麻烦。可惜清方未有此举。现在中国将钓鱼岛和《马关条约》联在一起,不过是为了证明它应在二战后由中国收回,可惜这中间并非没有瑕疵。此其二。另一问题是,中方在宣传中从1945年二战结束马上跳到1951年的《旧金山和约》,对中间这6年的事情语焉不详。其实,既然台湾澎湖作为《马关条约》割让地在二战后马上收回,何以钓鱼岛没有收回?就是因为钓鱼岛实际上不在《马关条约》内,而国共两党忙于内战,也无从了解,更无暇顾及钓鱼岛问题,事实上把它当做冲绳的一部分看待。现在宣传中反复提及中国大陆“坚决反对《旧金山和约》”,给人的印象是中国大陆反对美国托管钓鱼岛。其实不然,大陆当时的抗议根本没有提及钓鱼岛的问题,反对“冲绳托管”,其目的反而是要美国将冲绳归还日本。这是当时反美的大背景下为了“联日抗美”而做的决定。两岸政府对钓鱼岛完全遗忘的状况一直持续到70年代,海外留学生发起保钓运动才让他们如梦初醒,倒逼两岸政府跟进“拿香跟着拜”。所有这些造成了今日中国在钓鱼岛问题上的被动状态。

当前的宣传对于与中国不利的事实采取完全屏蔽的态度,把中国描叙得完全无辜,美、日则是恶贯满盈,之所以如此就是因为如果客观描叙的话,就要牵扯到追究当时政府颟顸无能的责任的问题。而这一问题在政治体制改革前,由于牵动统治合法性是不可能的,又由于新闻不独立不自由,由此造成中国在宣传导向与历史事实上的矛盾。如果政府能加快政治体制改革,取消对于日本的“妖魔化”宣传,向民众真实客观的披露事实真相,引导国民理性看待钓岛争端,为可能的妥协或者国际司法裁定做好心理准备,则为政府解了套,这才是长久之计。

二、民族情绪与现实外交的矛盾。

90年代以来,中国民族主义情绪上升得到官方或明或暗的支持,使得对外抗议成为中国人唯一的情绪宣泄点。几次没有受到禁止的YX,分别发生在1999年、2008年和2012年,矛头都是向外的,这当然不是偶然。可是民族主义情绪过分高涨,而国家外交还要讲法律、讲道理、讲策略,形成了很大矛盾。这次钓岛风波,除了砸车之外,还有人打出“宁可大陆不长草,也要收复钓鱼岛”“哪怕华夏遍地坟,也要杀光日本人”“血洗东京”之类骇人听闻的大字横幅招摇过市,说这是法西斯的兆头也不为过。国内呼吁理性对待钓鱼岛争端的人士动辄被扣上亲日、汉奸的帽子,民意绑架外交的征兆日益明显。如果不改变利用民族主义支撑合法性的做法,民族情绪与现实外交的矛盾就会不断扩大,不排除玩火自焚的可能。

三、领土诉求与国际形象的矛盾。

中国的国际环境并不理想。如果说以前中国受“欺负”是因为落后就要挨打的话,那在今天中国“崛起”,GDP坐二望一的情况下,中国在国际上还是处处吃瘪,就不好解释了。有人从不反省自己的问题,把中国和国际社会的矛盾一概归为阴谋论。其实任何阴谋不可能忽悠几十亿人,更简单的解释是中国的威权体制和国际社会格格不入。不论中国人多么的无奈和不理解,事实就是,中国在国际上的形象远远低于二战战败国日本。日本作为一个民主、发达的国家,其成就、其产品、其文化在国际上有口皆碑;而中国,再有钱也只是个暴发户的形象,即使在第三世界也是如此。由于国际形象不佳,中国在国际领土争端中得不到什么支持,而与中国有矛盾的印度、东盟、日本等国则可同声相应同气相求。

当然就算以上几国,即使合起来也未必是中国的对手,但更重要的一点是,中国的威权制度把唯一超级大国美国逼到了日本那一边。美国在二战后本来希望帮助中国实现民主和繁荣,从而作为美国在亚洲抵制苏联扩张的帮手,同时压制日本的复兴。奈何天不从人愿,中国历史性的倒向共产主义,从此和美国割袍断义。由于《日美安保条约》的存在,更由于美国具有支持民主和自由的义务,美国必然不可能帮助中国得到钓鱼岛,任何中日之间的领土争端,客观上就会变成“民主”和“集权”的对决。美国作为世界民主的堡垒,只能站在日本一边。鉴于在今后几十年中美国都仍将是世界第一大国,这对中国按照自己的意志解决钓鱼岛问题造成了不可逾越的障碍。因此,中国只有接受普世价值,进行政治体制改革,实行民主宪政,和美国与其他民主国家在共同价值观的基础上联合起来,到那时美国就会像英国废除英日同盟那样废除《日美安保条约》,成为中国解决钓鱼岛问题的助力而不是阻力。毕竟中国比日本大得多,孰轻孰重美国是分得清的。

四、一致对外与分裂国家的矛盾。

中国解决钓鱼岛问题,还有个特殊的结构性矛盾就是国家不统一。试问如果两岸统一,中华儿女团结一心,解决钓鱼岛问题岂不是水到渠成?可惜,虽然大家都主张中国拥有钓鱼岛主权,但由于政治理念不同,互相防范,互相猜忌,使得事倍功半。不但大陆和台湾之间隔阂很深,就是大陆和香港这个保钓先锋,也是矛盾重重。从最近的“孔庆东骂狗事件”、“国民教育事件”可见一斑。其实大家同文同种,血浓于水,本不应有这样的隔阂。究其原因,就在于大陆政治体制改革滞后,距离港台业已接受普世价值、落实民主制度的民众距离越来越远。强扭的瓜不甜,使用强力压服台湾实现统一不但得不到钓鱼岛,连台湾都会失去。因此,大陆只有加快政治体制改革进程,以民主、自由、均富的成功实践拉近和台湾民众的距离,实现和平统一,才是解决钓鱼岛问题的正道。

五、国内维稳与国际冲突的矛盾。

当前的中国内部矛盾重重,民族主义愤青虽然气势汹汹,当局者对外采取强硬态度却不免投鼠忌器。因为以民族主义巩固统治是一把双刃剑,搞得不好会伤到自身。当年日俄战争俄国战败,首都就爆发革命;阿根廷马岛战败,加尔铁里黯然下台,都是前车之鉴。何况新、藏大后方不稳,分离主义分子、恐怖分子随时都会发难。如果真和日本撕破脸,日方会不会效仿明石元二郎的故技,在后方煽动动乱让我收尾难顾?这绝不是危言耸听。政府虽然希望通过爱国主义宣传巩固自身合法性,但不受控制的极端民族主义如何操控却是难以拿捏,因此在保钓问题上政府常常显得首鼠两端。最近苏州保钓人士被打一事就暴露出这一软肋。究其根源,还是在于政治体制改革停滞不前,国内经不得一点风吹草动,但以消极维稳为能事,虚弱得很。如通过政治体制改革纾缓民困,使国家治理走上民主、法制轨道,则国内矛盾就能缓解,大家可以专心对外。否则,“吾恐季孙之忧,不在颛臾,而在萧墙之内也!”

以上五点,是中国保钓的结构性障碍,只有通过政治体制改革内强素质,外树形象,以中国地大人多,怎么会斗不过蕞尔小国日本!但如果继续苟且粉饰,则甲午之祸不难重演。何去何从,愿诸君详查!

各种浏览器的Hack写法(chrome firefox ie等)[转载]

虽然和大家在一起学习各浏览器的Hack的写法,但我还是要说“Hack对于一位专业的前端攻程师来说并不是一样很好的东西,我力求处理浏览器兼容,尽量不使用Hack写法来处理,除非实在没有办法的情况下,再加以使用。”下面我们先来简单的了解一下什么是CSS Hack。

Hack是针对不同的浏览器去写不同的CSS样式,从而让各浏览器能达到一致的渲染效果,那么针对不同的浏览器写不同的CSS CODE的过程,就叫CSS HACK,同时也叫写CSS Hack。然后将Hack放在浏览器特定的CSS文件中,让其符合条件的浏览器解析这些代码,就如前面所说的条件样式,我们将CSS Hack代码放入条件样式文件中,符合条件的浏览器就解析,不符合的将不解析,从面达到您所需要的页面渲染效果。总的一句话来说使用CSS Hack将会使用你的CSS代码部分失去作用,然后借助条件样式,使用其原CSS代码在一些浏览器解析,而CSS Hack代码在符合条件要求的浏览器中替代原CSS那部分代码。常见的就是在IE6下使用,不具体说,我想大家都有碰到过了。下面我们就一起来看看所有浏览器都具有什么Hack,换句话说,各种浏览器都能识别哪些CSS的写法。

下面是我收集有关于各浏览器下Hack的写法

1、Firefox

上面是仅仅被Firefox浏览器识别的写法,具体如:

支持Firefox的还有几种写法:

2、Webkit枘核浏览器(chrome and safari)

上面写法主要是针对Webkit内核的浏览器,如Google Chrome 和 Safari浏览器:

3、Opera浏览器

上面则是Opera浏览器的Hack写法:

4、IE9浏览器

上面是IE9的写法,具体应用如下:

5、IE9以及IE9以下版本

这种写法只有IE9以及IE9以下版本能识别,这里需要注意此处“9”只能是“9”不能是别的,比如说“8”,不然会失去效果的,如:

6、IE8浏览器

上面写法只有IE能识别,如:

7、IE8以及IE8以上的版本

这种写法只有IE8以及IE8以上版本支持,如

8、IE7浏览器

上面两种是IE7浏览器下才能识别,如:

9、IE7及IE7以下版本浏览器

上面的写法在IE7以及其以下版本都可以识别,如:

10、IE6浏览器

具体应用如下:

上面具体介绍了各种版本浏览器下如何识别各种的Hack写法,包括了IE6-9以及现代版本的浏览器写法。综合上面的所述,我们针对不同浏览器的Hack写法主要分为两种从CSS选择器和CSS属性上来区别不同的Hack写法。下面我们分别来看这两种的不同写法:

CSS选择器的Hack写法

下面我们主要来看CSS选择器和CSS属性选择器在不同浏览器的支持情况。下面先来看CSS选择器支持情况。

CSS选择器的Hack写法

1、IE6以及IE6以下版本浏览器

2、仅仅IE7浏览器

3、除IE6之外的所有浏览器(IE7-9, Firefox,Safari,Opera)

4、IE8-9,Firefox,Safari,Opear

5、IE9+

6、Firefox浏览器

6、Webkit内核浏览器(Safari和Google Chrome)

7、Opera浏览器

8、iPhone / mobile webkit

CSS属性Hack写法

1、IE6浏览器

2、IE6-7浏览器识别

3、所有浏览器除IE6浏览外

4、IE6-9浏览器

5、IE7-8浏览器

上面罗列的都是各种浏览器下的有关于CSS的Hack的写法,基中有针对于现代浏览器Safari,Google Chrome和Firefox的写法,而且也有针对于我们前端人员最讨厌的IE6-9的各版本浏览器的Hack的写法,而且这些Hack我们又分为CSS选择器的Hack写法和CSS属性的Hack写法。然而具体何种适用,大家可以要据自己的需求来定,下面列出我个人的两种写法:

一、经济实惠型定法:

这种写法注重单独的CSS的Hack写法。不同的浏览器使用不同的Hack写法,其实也只是以IE的Hack写法比较多(因为我们写Hack也主要是针对IE的浏览器)特别是IE6下的浏览器。单独为各种浏览器写Hack的好处是:针对各种浏览顺的Hack写法省力易记。因为其他的浏览器主要是针对现代浏览器,相对来说是比较少的。针对于这种Hack的使用,我推荐使用下面的方法:

二、完美主义写法

这种方法是追求完美主义的写法,主要是配合我们上一节所说的IE条件注释,全部采用选择器Hack的写法。这种写法分两步:

1、创建条件样式表,并在HTML中body里添加相应的class类名:

2、接着创建对应的样式

上面就是目前各种浏览器下,相关CSS的Hack的写法,下面我们具体来看一个实例:

HTML Markup

CSS Code

请看最终效果图:

请面罗列了各浏览器下的Hack的写法,大家写浏览的CSS Hack时也可以参考下面的图表

注:上图要是看不清楚,可以点击鼠标右键,将图片保存到本地后浏览,效果会更佳。上图也可以前往centricle.com在线查看。

那么到此就介绍完了有关于各浏览器的CSS Hack的写法,大家在平时需要使用Hack时可以根据CSS的选择器Hack和CSS的属性Hack对号入坐,不过我还是强调在Web页面制作中尽量不要使用CSS Hack来处理兼容问题。因为任何浏览器下出现渲染不一致都极有可能是我们自己的结构或样式不符合W3C的某些要求,或者说违背了浏览器的某些规则而先造成的,所以我们应该尽量通过结构或CSS的修改来达到各浏览器渲染一致效果,除非到了万不得已情况下,才考虑CSS的Hack。

 

文章出处:W3CPLUS