学习如何在Android中的视图上设置标记

EGH*_*HDK 2 java flags android

我正试图SYSTEM_UI_FLAG_LOW_PROFILE在视图上使用此标志.我的问题比这更深刻.我真正的问题是我在浏览文档时很难找到如何实际实现它.我发现自己陷入了这种困境.任何人都可以告诉我如何设置标志,但通过使用文档而不是找人发布一些示例代码让我"偷"?让我说我所拥有的只是eclipse和所有下载的android文档,我不知道如何设置它,我怎么能学习?这更像是一个"学习编程"类型的问题,但仍然是一个真正的问题,我希望有人可以帮助我.

我可以通过阅读文档得到最好的结论:

setContentView(R.layout.start);
setSystemUiVisibility(SYSTEM_UI_FLAG_LOW_PROFILE):
Run Code Online (Sandbox Code Playgroud)

Cod*_*ane 6

我必须经常离线工作(旅行时),并且仅使用参考文档就可以解决问题; 所以有可能!我将首先快速概述Android SDK参考,并轻松获取有关标志的一些信息,同时保留您自己解决特定问题的机会(希望是工具).

大多数API参考文档,特别是那些使用Javadoc类型工具生成的文档,遵循类似的约定; 因此,一旦您对Android的参考文档感到满意,您也应该能够翻译其他文档.

我建议您为参考文档的包索引页(如果您还没有)添加书签:

  • http:// developer.android.com/reference/packages.html - 或 -
  • {您当地的"android-sdk"文件夹} /docs/reference/packages.html.

在Windows上,完整的默认路径应类似于:

  • file:/// C:/Program%20Files/Android/android-sdk/docs/reference/packages.html - 或 -
  • 文件:/// C:/程序%20Files%20(86)/Android/android-sdk/docs/reference/packages.html
  • 标题搜索框:右上角的搜索框非常适合搜索文档.
  • 在网上,为"标志"的搜索将导致整个文档的所有引用.
  • 离线,搜索框将只提供提示/对的包和类名形式的联系; 输入"intent"将提供"android.content.Intent",但你会发现"标志"显然无益.

包索引页面

在左侧,您将找到包含每个包的链接的Android包列表,而页面正文列出了包含简短介绍并链接到每个包的包.

包页面

点击一个包(如"android.content")将弹出一个页面总结了包及其内容,以及与填充包的组成部分接口,异常和类包装内容清单(Android的软件包列表下方)比如"意图".

班级页面

示例:Intent类

  • http:// developer.android.com/reference/android/content/Intent.html
  • Android的SDK /文档/参考/机器人/内容/ Intent.html

单击界面,异常或类(例如"Intent")将显示有关它的极长页面信息.在每个类页面的顶部,您将找到类定义(又名签名),后面是类概述部分,它解释了对象的用途和实现.还有一个到页面其他部分的跳转链接列表:

嵌套类| 常数| 继承的常量| 字段| Ctors | 方法| 继承的方法

寻找有用的参考资料

如果你不知道你在寻找什么,我想你几乎可以在任何地方开始阅读; 但考虑到特定需求,例如实施标志,OOP的基本知识将帮助您入门.由于您想要学习如何向视图(对象)添加标志(操作是方法),因此查看视图的方法是开始搜索的绝佳场所,View的类概述部分也是如此.

我会留下View供你稍后阅读,因为你说你想学习如何学习:)

浏览器搜索:不要忘记使用浏览器的内置搜索功能,通常在Windows上使用[CTRL] + [F].搜索术语如"旗帜"将使我们能够快速通过页面上的所有事件(标志217!)浏览,但你可以快速尝试一些相关术语和短语(越精确越好),以获得更精细/减少的匹配集,然后迭代一些.通过快速尝试更多的术语,我能够找到我想要的东西:"flags"(67),"add flag"(0)和"addflag"(6场比赛 - 获胜者!)

浏览课程页面

继续使用android.content.Intent类页面作为示例,单击方法的跳转链接将快速显示addFlags(),并且一些滚动将显示setFlags().两种方法都以一个int作为参数; 但是,文本引用这个单个int使用复数名称"flags"是有充分理由的:你可以将相当多的标志压缩到一个int中,因为每个标志都存储为一个特定的位!(我将在下面解释一下.)

在每个方法的底部是一个"see also"小节,它通常包含有用的相关链接.我们发现的标志方法addFlags()和setFlags()在它们的"see also"部分中相互引用,而setFlags()也包含指向所有相关标志常量的链接.这些标志常量,每个都有一个按照惯例以"FLAG_"开头的名称.以下是几个常用意图标志的"常量"条目:

  • int FLAG_ACTIVITY_NEW_TASK如果设置,此活动将成为此历史堆栈上新任务的开始.

  • INT FLAG_ACTIVITY_CLEAR_TOP如果设置,以及正在启动的活动在目前的任务已经运行,然后,而不是推出该活动的一个新的实例,都在它上面的其他活动的将被关闭,该意图将交付给(现在在上面)旧活动作为一个新的意图.

单击常量的名称将使我们进一步向下跳到页面,更详细地解释每个常量的位置,包括在基数-10(十进制)和基数16(十六进制)中列出它们的实际值.

请记住,Java使用C样式前缀"0x"来区分十六进制数字,并且除了标识数字基数之外,此前缀不会影响该值.

  • FLAG_ACTIVITY_NEW_TASK显示常量值268435456(0x10000000).
  • FLAG_ACTIVITY_SINGLE_TOP的常量值为536870912(0x20000000).

这些数字可能看起来是随机的和任意的,但它们不是 - 每个实际上是一个零字节中的单个接通位,使得我们在base-2(二进制)中的标志看起来更合乎逻辑:

  • 00010000000000000000000000000000和
  • 00100000000000000000000000000000.

如何在位掩码中添加和设置标志

要同时应用于intent,您可以使用setFlags(丢弃预先存在的标志)或addFlags(保留所有标志),如下所示:

  • someExampleIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP);
  • 特别注意我们旗帜之间的竖条"|"; 在Java中,它是"按位或"运算符.

基本上,如果任何比较位为真,则按位或逐位比较输入int,返回true(1),否则返回false(0).按位 - 或者,是的!

因此,我们的位掩码的按位或比较将产生:

  • 00010000000000000000000000000000 |
  • 00100000000000000000000000000000 =
  • 00110000000000000000000000000000

小心不要在位掩码中使用加号(+)!它非常适合创建间歇性错误; 它将产生与按位相同的结果 - 或者合并两个数字时...(保持异常 - 字面意思):

  • 00010000000000000000000000000000 +
  • 00100000000000000000000000000000 =
  • 00110000000000000000000000000000(与按位或相同的结果)

.. 除非你加口罩具有任何公共设置位,比如添加FLAG_ACTIVITY_SINGLE_TOP已经包含那么它-我们得哭小猫或一些,这样的废话的图片位掩码:

  • 00110000000000000000000000000000 +
  • 00100000000000000000000000000000 =
  • 01010000000000000000000000000000 /!\哎呀.

意外删除了FLAG_ACTIVITY_SINGLE_TOP并意外添加了FLAG_ACTIVITY_NO_HISTORY; 一次击键价格的两个错误!

请做正确的事(tm)并使用'|' (不是'+')用于合并位掩码.

这是一个简单的Java实例,它是按位或者在它们上使用加法的缺陷.

刚刚找到了一个很好的位掩码解释.