2

我正在尝试SYSTEM_UI_FLAG_LOW_PROFILE在视图上使用此标志。我的问题比这更深。我真正的问题是我真的不擅长浏览文档以了解如何实际实现这一点。我发现自己经常处于这种困境中。谁能告诉我如何学习如何设置标志,但是通过使用文档而不是寻找某人发布一些示例代码让我“窃取”?假设我只有 eclipse 和所有下载的 android 文档,我不知道如何设置它,我该如何学习?这更像是“学习编程”类型的问题,但仍然是一个真正的问题,我希望有人能帮助我。

从阅读文档中我能想到的最好的:

setContentView(R.layout.start);
setSystemUiVisibility(SYSTEM_UI_FLAG_LOW_PROFILE):
4

2 回答 2

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 -或-
  • file:///C:/Program%20Files%20(x86)/Android/android-sdk/docs/reference/packages.html
  • 标题搜索框:右上角的搜索框非常适合搜索文档。
  • 在线时,搜索“标志”将导致整个文档中的所有引用。
  • 离线时,搜索框只会提供包形式和类名的提示/链接;输入“intent”将提供“android.content.Intent”,但您会发现“flags”毫无帮助。

包索引页面

在左侧,您会找到包含指向每个包的链接的 Android 包列表,而页面的主体列出了包含简短介绍和每个包的链接的包。

包页

单击一个包(例如“android.content”)将打开一个页面,该页面总结了包及其内容,并使用包的构成接口、异常和类填充包内容列表(在 Android 包列表下方)比如“意图”。

课程页面

示例:意图类

  • http://developer.android.com/reference/android/content/Intent.html
  • android-sdk/docs/reference/android/content/Intent.html

点击一个接口、异常或类(例如“Intent”)会弹出一个非常长的页面信息。在每个类页面的顶部,您会找到类定义(又名签名),然后是类概述部分,该部分解释了对象的用途和实现。还有指向页面其他部分的跳转链接列表:

嵌套类 | 常数 | 继承常量 | 领域 | 托斯 | 方法 | 继承的方法

寻找有用的参考资料

如果您不知道自己在寻找什么,我想您几乎可以在任何地方开始阅读;但考虑到特定需求,例如实现标志,OOP 的基本知识将帮助您入门。由于您想了解如何将标志(操作是方法)添加到视图(对象),因此查看视图的方法是开始搜索的好地方,视图的类概述部分也是如此。

既然您说您想学习如何学习,我将把 View 留给您稍后阅读 :)

浏览器搜索:不要忘记使用浏览器的内置搜索功能,在 Windows 上通常是 [CTRL]+[F]。搜索诸如“flag”之类的术语可以让我们快速浏览页面上所有出现的它(217 of flag!),但您可以快速尝试一些相关的术语和短语(越精确越好)以获得一个更精细/简化的匹配集,然后迭代一些。通过快速尝试更多的术语,我能够找到我想要的:“flags”(67)、“add flag”(0)和“addflag”(6 个匹配项 - 获胜者!)

导航课程页面

继续以 android.content.Intent 类页面为例,点击 Methods 的跳转链接会很快显示addFlags(),稍微滚动一下会显示setFlags()。两种方法都以一个int作为参数;然而,文本使用复数名称“flags”来引用这个单个int是有充分理由的:您可以将很多标志压缩到单个 int 中,因为每个标志都存储为一个特定位!(我将在下面对此进行更多解释。)

每个方法的底部都有一个“另见”小节,通常包含有用的相关链接。我们发现的标志方法 addFlags() 和 setFlags() 在其“另见”部分中相互引用,并且 setFlags() 还包含指向所有相关标志常量的链接。这些标志常量,按照惯例,每个都有一个以“FLAG_”开头的名称。以下是几个常用意图标志的“常量”条目:

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

  • int FLAG_ACTIVITY_CLEAR_TOP 如果设置,并且正在启动的 Activity 已经在当前任务中运行,那么不会启动该 Activity 的新实例,而是关闭它之上的所有其他 Activity,并且此 Intent 将被传递到 (现在在顶部)作为新意图的旧活动。

单击常量的名称将使我们跳转到页面的下方,其中将更详细地解释每个常量,包括以 base-10(十进制)和 base-16(十六进制)列出它们的实际值。

请记住,Java 使用 C 风格的前缀 '0x' 来区分十六进制数字,并且这个前缀不会影响值,除了标识它的数字基数。

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

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

  • 000100000000000000000000000000000 和
  • 001000000000000000000000000000000。

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

要将两者都应用于一个意图,您可以使用 setFlags(丢弃预先存在的标志)或 addFlags(保留所有标志),如下所示:

  • someExampleIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP);
  • 请特别注意我们的标志之间的竖线“|”;在 Java 中,它是“按位或”运算符。

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

所以我们的位掩码的按位或比较将产生:

  • 000100000000000000000000000000000 |
  • 00100000000000000000000000000000 =
  • 001100000000000000000000000000000

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

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

..除非您添加的掩码有任何共同的设置位,例如将 FLAG_ACTIVITY_SINGLE_TOP 添加到已经包含它的位掩码中 - 然后我们会得到哭泣的小猫或一些诸如此类的废话的图片

  • 001100000000000000000000000000000 +
  • 00100000000000000000000000000000 =
  • 010100000000000000000000000000000 /!\ 哎呀。

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

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

这是一个简单的按位或Java 示例以及在它们上使用加法的陷阱。

刚刚也找到了对位掩码的出色解释。

于 2012-10-17T08:28:09.530 回答
0

Android 开发者网站上的文档实际上非常适合“学习如何通过 Android 编程”的人群。

我会先看一下与 sdk 捆绑在一起的示例项目,或者会按照我的方式完成在线教程,从这里开始:http: //developer.android.com/training/basics/firstapp/creating-project。 html

就个人而言,我通过一些现有的项目并开始做一些小的调整来学习东西是如何工作的,从而学得最好。

我猜想您要设置的“标志”实际上是在一个活动上,但是通过教程/示例代码工作也将帮助您学习该术语。

希望能帮助你入门,祝你好运!

于 2012-10-17T03:13:17.730 回答