droid_wrap/android/
view.rs

1/*
2 * Copyright (c) 2024. The RigelA open source project team and
3 * its contributors reserve all rights.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 * See the License for the specific language governing permissions and limitations under the License.
12 */
13
14//noinspection SpellCheckingInspection
15/**
16视图和输入法(如软键盘)之间交互的框架类。
17*/
18#[cfg(feature = "android_view_inputmethod")]
19pub mod inputmethod;
20
21use crate::{
22    android::{
23        content::{Context, ContextWrapper},
24        graphics::{Canvas, Rect},
25        os::Bundle,
26    },
27    java::lang::{CharSequence, Integer, Runnable},
28    JObjNew, JObjRef, JProxy, JType,
29};
30use droid_wrap_derive::{
31    java_class, java_constructor, java_field, java_implement, java_interface, java_method,
32};
33use std::sync::Arc;
34
35/**
36此类代表用户界面组件的基本构建块。View 占据屏幕上的矩形区域,负责绘制和事件处理。View 是小部件的基类,用于创建交互式 UI 组件(按钮、文本字段等)。ViewGroup 子类是布局的基类,布局是不可见的容器,用于容纳其他 View(或其他 ViewGroup)并定义其布局属性。
37开发人员指南
38有关使用此类开发应用程序用户界面的信息,请阅读用户界面开发人员指南。
39使用视图窗口中的所有视图都排列在一棵树中。您可以从代码中添加视图,也可以通过在一个或多个 XML 布局文件中指定视图树来添加视图。有许多专门的视图子类,它们充当控件或能够显示文本、图像或其他内容。创建视图树后,通常您可能希望执行以下几种常见操作:
40- 设置属性:例如,设置 android.widget.TextView 的文本。不同视图子类的可用属性和设置方法会有所不同。请注意,在构建时已知的属性可以在 XML 布局文件中设置。
41- 设置焦点:框架将处理移动焦点以响应用户输入。要强制将焦点移到特定视图,请调用 requestFocus。
42- 设置侦听器:视图允许客户端设置侦听器,当视图发生有趣的事情时,这些侦听器将收到通知。例如,所有视图都允许您设置一个侦听器,以便在视图获得或失去焦点时收到通知。您可以使用 setOnFocusChangeListener(View.OnFocusChangeListener) 注册此类侦听器。其他视图子类提供更专业的侦听器。例如,按钮会公开一个侦听器,以便在单击按钮时通知客户端。
43- 设置可见性:您可以使用 setVisibility(int) 隐藏或显示视图。注意:Android 框架负责测量、布局和绘制视图。除非您实际实施了 ViewGroup,否则您不应自己调用对视图执行这些操作的方法。
44有关更多信息,请查阅官方文档。
45*/
46#[java_class(name = "android/view/View")]
47pub struct View;
48
49impl View {
50    /// 用于标记没有ID的View。
51    pub const NO_ID: i32 = -1;
52
53    /// 赋予不属于活动的视图的最后一个 ID。
54    pub const LAST_APP_AUTOFILL_ID: i32 = i32::MAX / 2;
55
56    /// 此视图可见。与 setVisibility 和 ` ` 一起使用。
57    pub const VISIBLE: i32 = 0x00000000;
58
59    /// 此视图不可见,但出于布局目的它仍占用空间。与 setVisibility 和 ` ` 一起使用。
60    pub const INVISIBLE: i32 = 0x00000004;
61
62    /// 此视图是看不见的,并且没有任何空间用于布局目的。与setVisibility一起使用。
63    pub const GONE: i32 = 0x00000008;
64
65    /**
66    从代码创建视图时使用的简单构造函数。
67    `context` 视图在其中运行的上下文,通过它可以访问当前主题、资源等。
68    */
69    #[java_constructor]
70    pub fn new(context: &Context) -> Self {}
71
72    /**
73    发送 AccessibilityEvent 的便捷方法。TYPE_ANNOUNCEMENT AccessibilityEvent 建议无障碍服务向其用户宣布指定的文本。
74    注意:使用此 API 生成的事件不具有语义含义,仅适用于特殊情况。应用通常可以通过准确提供其 UI 的语义来实现正确的无障碍行为。它们不需要指定向用户宣布的具体内容。一般来说,只宣布转换,不要为按钮按下等简单操作生成确认消息。相反,请简明扼要地标记控件,对于重大的 UI 更改(如窗口更改),请使用 android.app.Activity.setTitle(CharSequence) 和 setAccessibilityPaneTitle(CharSequence)。使用 setAccessibilityLiveRegion(int) 通知用户用户界面内关键视图的更改。这些仍应谨慎使用,因为它们可能会在每次更新视图时生成通知。
75    `text` 通知文本。
76    */
77    #[java_method]
78    pub fn announce_for_accessibility<CS: CharSequence>(&self, text: &CS) {}
79
80    /**
81    返回视图的宽度。
82    返回:视图的宽度(以像素为单位)。
83    */
84    #[java_method]
85    pub fn get_width(&self) -> i32 {}
86
87    /**
88    返回视图的高度。
89    返回:视图的高度(以像素为单位)。
90    */
91    #[java_method]
92    pub fn get_height(&self) -> i32 {}
93
94    //noinspection SpellCheckingInspection
95    /**
96    调用此操作可以尝试将焦点集中到特定视图或其子视图之一。如果视图不可聚焦(isFocusable返回false),或者由于其他条件而无法聚焦(当设备处于触摸模式、不可见、未启用或没有大小时,在触摸模式下无法聚焦(isForusableInTouchMode)),则视图实际上不会聚焦。另请参阅focusSearch(int),这是用来表示有焦点,并希望视图的父母寻找下一个焦点的方法。这相当于用参数FOCUS_DOWN和null调用requestFocus(int, Rect)。
97    返回:这个视图或它的一个后代是否真的成为焦点。
98    */
99    #[java_method]
100    pub fn request_focus(&self) -> bool {}
101
102    /**
103    当此视图想要放弃焦点时调用。如果焦点被清除,则调用 onFocusChanged(boolean, int, Rect)。
104    注意:当不处于触摸模式时,框架将在焦点清除后尝试将焦点放在从顶部开始的第一个可聚焦视图上。因此,如果此视图是从顶部开始的第一个可获得焦点的视图,则将调用与清除焦点相关的所有回调,之后框架将焦点放在此视图上。
105    */
106    #[java_method]
107    pub fn clear_focus(&self) {}
108
109    /**
110    在以此视图为根的层次结构中查找当前具有焦点的视图。
111    返回:当前具有焦点的视图,如果找不到焦点视图,则返回 null。
112    */
113    #[java_method]
114    pub fn find_focus(&self) -> Option<Self> {}
115
116    /**
117    指示此视图的激活状态。
118    返回:如果视图已激活,则返回 true,否则返回 false
119    */
120    #[java_method]
121    pub fn is_activated(&self) -> bool {}
122
123    /**
124    更改此视图的激活状态。视图可以激活也可以不激活。请注意,激活与选择不同。选择是一种瞬时属性,表示用户当前正在与之交互的视图(层次结构)。激活是一种长期状态,用户可以将视图移入或移出。例如,在启用单选或多选的列表视图中,当前选择集中的视图处于激活状态。(嗯,是的,我们对这里的术语深感抱歉。)激活状态会向下传播到设置该状态的视图的子级。
125    `activated` 如果必须激活视图,则为 true,否则为 false
126    */
127    #[java_method]
128    pub fn set_activated(&self, activated: bool) {}
129
130    /**
131    此视图的可视 x 位置(以像素为单位)。这相当于 TranslationX 属性加上当前 Left 属性。
132    返回:此视图的可视 x 位置(以像素为单位)。
133    */
134    #[java_method]
135    pub fn get_x(&self) -> f32 {}
136
137    /**
138    设置此视图的可视 x 位置(以像素为单位)。这相当于将 TranslationX 属性设置为传入的 x 值与当前 left 属性之间的差值。
139    `x` 此视图的可视 x 位置(以像素为单位)。
140    */
141    #[java_method]
142    pub fn set_x(&self, x: f32) {}
143
144    /**
145    此视图的视觉 y 位置(以像素为单位)。这相当于 TranslationY 属性加上当前的 Top 属性。
146    返回:此视图的视觉 y 位置(以像素为单位)。
147    */
148    #[java_method]
149    pub fn get_y(&self) -> f32 {}
150
151    /**
152    设置此视图的视觉 y 位置(以像素为单位)。这相当于将 TranslationY 属性设置为传入的 y 值与当前 top 属性之间的差值。
153    `y` 此视图的视觉 y 位置(以像素为单位)。
154    */
155    #[java_method]
156    pub fn set_y(&self, y: f32) {}
157
158    /**
159    查找具有给定 ID 的第一个后代视图,如果 ID 与 getId() 匹配,则查找视图本身,如果 ID 无效 (< 0) 或层次结构中没有匹配的视图,则返回 null。
160    注意:在大多数情况下 - 取决于编译器支持 - 生成的视图会自动转换为目标类类型。如果目标类类型不受约束,则可能需要显式转换。
161    返回:如果找到,则返回具有给定 ID 的视图,否则返回 null
162    `id` 要搜索的 ID
163    */
164    #[java_method]
165    pub fn find_view_by_id(&self, id: i32) -> Option<Self> {}
166
167    /**
168    返回视图的内容描述。
169    注意:不要覆盖此方法,因为它不会影响呈现给无障碍服务的内容描述。您必须调用 setContentDescription(CharSequence) 来修改内容描述。
170    返回:内容描述
171    */
172    #[java_method]
173    pub fn get_content_description<CS: CharSequence>(&self) -> Option<CS> {}
174
175    /**
176    设置视图的内容描述。内容描述简要描述视图,主要用于辅助功能支持,以确定应如何向用户呈现视图。对于没有文本表示的视图(如 android.widget.ImageButton),有用的内容描述会解释视图的作用。例如,用于拨打电话的带有电话图标的图像按钮可以使用“呼叫”作为其内容描述。用于保存文件的软盘图像可以使用“保存”。这应该省略角色或状态。角色是指视图的用户界面元素类型,例如按钮或复选框。状态是指视图经常变化的属性,例如按钮的开/关状态或音量滑块的音频级别。内容描述更新并不频繁,并且在元素的语义内容(而不是状态)发生变化时使用。例如,在音乐播放期间,播放按钮可能会更改为暂停按钮。
177    `content_description` 内容描述。
178    */
179    #[java_method]
180    pub fn set_content_description<CS: CharSequence>(&self, content_description: Option<CS>) {}
181
182    /**
183    设置此视图的标识符。标识符在此视图的层次结构中不必唯一。标识符应为正数。
184    `id` 用于标识视图的数字
185    */
186    #[java_method]
187    pub fn set_id(&self, id: i32) {}
188
189    /**
190    返回此视图的标识符。
191    返回:用于标识视图的正整数,如果视图没有 ID,则返回 NO_ID
192    */
193    #[java_method]
194    pub fn get_id(&self) -> i32 {}
195
196    /**
197    单击此视图时注册要调用的回调。如果此视图不可点击,则将设为可点击。
198    `l` 将运行的回调
199    */
200    #[java_method]
201    pub fn set_on_click_listener<L: View_OnClickListener + JProxy>(&self, l: &L) {}
202
203    /**
204    注册一个回调,当此视图被点击并按住时调用。如果此视图不是长按可点击的,则变为长按可点击的。
205    `l` 将运行的回调
206    */
207    #[java_method]
208    pub fn set_on_long_click_listener<L: View_OnLongClickListener + JProxy>(&self, l: &L) {}
209
210    /**
211    获取与此视图关联的 LayoutParams。所有视图都应具有布局参数。这些参数为此视图的父级提供参数,指定应如何排列。
212    ViewGroup.LayoutParams 有许多子类,这些子类对应于负责排列其子级的 ViewGroup 的不同子类。如果此视图未附加到父 ViewGroup 或 setLayoutParams(ViewGroup.LayoutParams) 未成功调用,则此方法可能返回 null。当视图附加到父 ViewGroup 时,此方法不得返回 null。
213    返回:与此视图关联的 LayoutParams,如果尚未设置参数,则返回 null
214    */
215    #[java_method]
216    pub fn get_layout_params(&self) -> Option<ViewGroup_LayoutParams> {}
217
218    /**
219    设置与此视图相关的布局参数。这些参数为该视图的父级提供参数,指定应如何排列。ViewGroup 有许多子类。LayoutParams,这些对应于负责排列其子级的 ViewGroup 的不同子类。
220    `params` 此视图的布局参数,不能为空
221    */
222    #[java_method]
223    pub fn set_layout_params(&self, params: &ViewGroup_LayoutParams) {}
224
225    /**
226    设置此视图的可见性状态。
227    `visibility` VISIBLE、INVISIBLE 或 GONE 之一。
228    */
229    #[java_method]
230    pub fn set_visibility(&self, visibility: i32) {}
231
232    /**
233    返回此视图的可见性状态。
234    返回:VISIBLE、INVISIBLE 或 GONE 之一。
235    */
236    #[java_method]
237    pub fn get_visibility(&self) -> i32 {}
238
239    /**
240    如果已定义,则调用此视图的 OnClickListener。执行与点击相关的所有常规操作:报告可访问性事件、播放声音等。
241    返回:如果已分配一个被调用的 OnClickListener,则返回 True,否则返回 false。
242    */
243    #[java_method]
244    pub fn perform_click(&self) -> bool {}
245
246    /**
247    指示此视图是否对点击事件作出反应。如果视图可点击,则返回 true,否则返回 false
248    */
249    #[java_method]
250    pub fn is_clickable(&self) -> bool {}
251
252    /**
253    启用或禁用此视图的点击事件。当视图可点击时,每次点击时它的状态都会更改为“按下”。子类应将视图设置为可点击,以便对用户的点击做出视觉反应。
254    `clickable` true 表示视图可点击,否则为 false
255    */
256    #[java_method]
257    pub fn set_clickable(&self, clickable: bool) {}
258
259    /**
260    禁用时启用或禁用此视图的单击事件。
261    `clickable_when_disabled` true使视图可单击,否则为false
262    */
263    #[java_method]
264    pub fn set_allow_click_when_disabled(&self, clickable_when_disabled: bool) {}
265
266    /**
267    指示此视图是否对长按事件作出反应。
268    返回:如果视图可长按,则返回 true,否则返回 false
269    */
270    #[java_method]
271    pub fn is_long_clickable(&self) -> bool {}
272
273    /**
274    启用或禁用此视图的长按事件。当视图可长按时,它会对用户按住按钮的时间长于点击做出反应。此事件可以启动侦听器或上下文菜单。
275    `long_clickable` true 表示视图可长按,否则为 false
276    */
277    #[java_method]
278    pub fn set_long_clickable(&self, long_clickable: bool) {}
279
280    /**
281    指示此视图是否对上下文点击反应。
282    返回:如果视图是上下文可单击的,则为false,否则否则
283    */
284    #[java_method]
285    pub fn is_context_clickable(&self) -> bool {}
286
287    /**
288    启用或禁用此视图的上下文点击。此事件可以启动侦听器。
289    `context_clickable` true 表示使视图对上下文点击做出反应,否则为 false
290    */
291    #[java_method]
292    pub fn set_context_clickable(&self, context_clickable: bool) {}
293
294    /**
295    返回此视图是否具有附加的 OnClickListener。如果有侦听器,则返回 true,如果没有,则返回 false。
296    */
297    #[java_method]
298    pub fn has_on_click_listeners(&self) -> bool {}
299
300    /**
301    返回此视图是否具有附加的 OnLongClickListener。如果有侦听器,则返回 true,如果没有,则返回 false。
302    */
303    #[java_method]
304    pub fn has_on_long_click_listeners(&self) -> bool {}
305
306    /**
307    返回屏幕是否应保持开启,对应于 KEEP_SCREEN_ON 的当前值。
308    返回:如果设置了 KEEP_SCREEN_ON,则返回 true。
309    */
310    #[java_method]
311    pub fn get_keep_screen_on(&self) -> bool {}
312
313    /**
314    控制屏幕是否应保持开启,修改 KEEP_SCREEN_ON 的值。
315    `keep_screen_on` 提供 true 以设置 KEEP_SCREEN_ON。
316    */
317    #[java_method]
318    pub fn set_keep_screen_on(&self, keep_screen_on: bool) {}
319
320    /**
321    获取此视图的父级。请注意,父级是 ViewParent,不一定是 View。
322    返回:此视图的父级。
323    */
324    #[java_method]
325    pub fn get_parent<VP: ViewParent>(&self) -> Option<VP> {}
326
327    /**
328    注册一个回调,当此视图中按下硬件键时调用该回调。软件输入法中的按键通常不会触发此侦听器的方法。
329    `l` 要附加到此视图的按键侦听器
330    */
331    #[java_method]
332    pub fn set_on_key_listener<L: View_OnKeyListener>(&self, l: &L) {}
333
334    /// 如果此视图位于当前具有 IME 可聚焦状态的窗口中,则为 true。
335    #[java_method]
336    pub fn has_ime_focus(&self) -> bool {}
337
338    /**
339    如果此视图具有嵌套滚动父级,则返回 true。
340    嵌套滚动父级的存在表明此视图已启动嵌套滚动,并且已被视图层次结构中更高层次的祖先视图接受。
341    返回:此视图是否具有嵌套滚动父级
342    */
343    #[java_method]
344    pub fn has_nested_scrolling_parent(&self) -> bool {}
345
346    /// 二进制兼容性存根。当我们最终完成 O API 时将被删除。
347    #[java_method]
348    pub fn get_tooltip<CS: CharSequence>(&self) -> Option<CS> {}
349
350    /**
351    返回视图的工具提示文本。
352    注意:不要重写此方法,因为它不会影响工具提示中显示的文本。您必须调用 setTooltipText(CharSequence) 来修改工具提示文本。
353    返回:工具提示文本
354    */
355    #[java_method]
356    pub fn get_tooltip_text<CS: CharSequence>(&self) -> Option<CS> {}
357
358    /// 二进制兼容性存根。当我们最终完成 O API 时将被删除。
359    #[java_method]
360    pub fn set_tooltip<CS: CharSequence>(&self, tooltip_text: Option<CS>) {}
361
362    /**
363    设置工具提示文本,该文本将显示在视图旁边的小弹出窗口中。工具提示将显示在:
364    长按时,除非另有处理(通过 OnLongClickListener 或上下文菜单)。
365    悬停时,在指针停止移动后的短暂延迟后
366    注意:不要覆盖此方法,因为它不会影响工具提示中显示的文本。
367    `tooltip_text` 工具提示文本,如果不需要工具提示,则为 null。
368    */
369    #[java_method]
370    pub fn set_tooltip_text<CS: CharSequence>(&self, tooltip_text: Option<CS>) {}
371
372    /**
373    导致 Runnable 被添加到消息队列,在指定的时间过后运行。Runnable 将在用户界面线程上运行。
374    返回:如果 Runnable 成功放入消息队列,则返回 true。如果失败,则返回 false,通常是因为处理消息队列的 looper 正在退出。请注意,结果为 true 并不意味着 Runnable 将被处理 - 如果 looper 在消息传递时间发生之前退出,则消息将被丢弃。
375    `action` 将执行的 Runnable。
376    `delay_millis` Runnable 执行前的延迟(以毫秒为单位)。
377    */
378    #[java_method]
379    pub fn post_delayed<R: Runnable>(&self, action: &R, delay_millis: u64) -> bool {}
380
381    /**
382    设置一个回调,当触控笔 MotionEvent 在该视图的边界内发生时,应调用该回调。回调将从 UI 线程调用。
383    设置回调允许此视图充当手写委托器,以便可以通过触控笔在此委托器视图上的移动来启动委托编辑器视图的手写模式。回调实现应显示并聚焦委托编辑器视图。
384    如果为 isHandwritingDelegate() 返回 true 的视图在相同地触控笔 MotionEvent 序列正在进行时创建输入连接,则将为该视图启动手写模式。
385    一个常见的用例是自定义视图看起来像文本编辑器,但实际上不支持文本编辑本身,单击自定义视图会导致显示 EditText。为了在这种情况下支持手写启动,可以在自定义视图上调用此方法以将其配置为委托器。
386    EditText 应调用 setIsHandwritingDelegate 将其设置为委托。回调实现通常与显示 EditText 的单击侦听器实现相同。
387    如果传递了 null,则此视图将不再充当手写启动委托人。
388    `callback` 当触控笔 MotionEvent 在该视图的范围内发生时应调用的回调
389    */
390    #[java_method]
391    pub fn set_handwriting_delegator_callback<R: Runnable>(&self, callback: Option<&R>) {}
392
393    /**
394    返回由 setHandwritingDelegatorCallback 设置的回调,当触控笔 MotionEvent 在该视图的范围内发生时应调用该回调。该回调只能从 UI 线程调用。
395    */
396    #[java_method]
397    pub fn get_handwriting_delegator_callback<R: Runnable>(&self) -> Option<R> {}
398
399    /**
400    导致 Runnable 被添加到消息队列。Runnable 将在用户界面线程上运行。
401    返回:如果 Runnable 成功放入消息队列,则返回 true。如果失败,则返回 false,通常是因为处理消息队列的循环程序正在退出。
402    `action` 将执行的 Runnable。
403    */
404    #[java_method]
405    pub fn post<R: Runnable>(&self, action: &R) -> bool {}
406
407    /**
408    使 Runnable 在下一个动画时间步骤执行。Runnable 将在用户界面线程上运行。
409    `action` 将执行的 Runnable。
410    */
411    #[java_method]
412    pub fn post_on_animation<R: Runnable>(&self, action: &R) {}
413
414    /**
415    使 Runnable 在指定的时间量过去后在下一个动画时间步骤执行。 Runnable 将在用户界面线程上运行。
416    `action` 将执行的 Runnable。
417    `delay_millis` Runnable 执行前的延迟(以毫秒为单位)。
418    */
419    #[java_method]
420    pub fn post_on_animation_delayed<R: Runnable>(&self, action: &R, delay_millis: u64) {}
421
422    /**
423    从消息队列中移除指定的 Runnable。
424    返回:如果此视图可以要求 Handler 移除 Runnable,则返回 true,否则返回 false。当返回值为 true 时,Runnable 可能已从消息队列中实际移除(例如,如果 Runnable 尚未在队列中)。
425    `action` 要从消息处理队列中移除的 Runnable
426    */
427    #[java_method]
428    pub fn remove_callbacks<R: Runnable>(&self, action: &R) -> bool {}
429}
430
431/// 定义视图父类的职责。这是视图想要与其父类交互时看到的 API。
432#[java_interface(name = "android/view/ViewParent")]
433pub trait ViewParent {
434    #[doc(hidden)]
435    type VP: ViewParent;
436
437    /// 当发生某些更改导致此视图父级的子级布局无效时调用。这将安排视图树的布局过程。
438    fn request_layout(&self);
439
440    /// 指示是否在此视图父级上请求布局。
441    /// 返回:如果请求布局,则返回 true,否则返回 false
442    fn is_layout_requested(&self) -> bool;
443
444    /**
445    当子视图希望视图层次结构收集透明区域并将其报告给窗口合成器时调用。在视图层次结构中“打”洞的视图(例如 SurfaceView)可以使用此 API 来提高系统的性能。当层次结构中不存在此类视图时,此优化是不必要的,并且可能会略微降低视图层次结构的性能。
446    `child` 请求透明区域计算的视图
447    */
448    fn request_transparent_region(&self, child: &View);
449
450    /**
451    如果父级存在则返回该父级,否则返回 null。
452    返回:ViewParent,如果此 ViewParent 没有父级则返回 null。
453    */
454    fn get_parent(&self) -> Option<Self::VP>;
455
456    /**
457    当此父级的子级需要焦点时调用
458    `child` 此 ViewParent 需要焦点的子级。此视图将包含焦点视图。它不一定是实际具有焦点的视图。
459    `focused` 实际具有焦点的子级后代视图
460    */
461    fn request_child_focus(&self, child: &View, focused: &View);
462
463    /**
464    告诉视图层次结构需要重新评估全局视图属性。
465    `child` 属性已更改的视图。
466    */
467    fn recompute_view_attributes(&self, child: &View);
468
469    /**
470    当此父级的子级放弃焦点时调用
471    `child` 放弃焦点的视图
472    */
473    fn clear_child_focus(&self, child: &View);
474
475    /**
476    查找指定方向上想要获得焦点的最近视图
477    `v` 当前获得焦点的视图
478    `direction` FOCUS_UP、FOCUS_DOWN、FOCUS_LEFT 和 FOCUS_RIGHT 之一
479    */
480    fn focus_search(&self, v: &View, direction: i32) -> View;
481
482    /**
483    更改子项的 z 顺序,使其位于所有其他子项之上。如果此容器使用顺序相关的布局方案(例如 LinearLayout),则此顺序更改可能会影响布局。在 android.os.Build.VERSION_CODES.KITKAT 之前,此方法应随后调用此父项的 requestLayout() 和 View.invalidate(),以强制父项使用新的子项顺序重新绘制。
484    `child` 要置于 z 顺序顶部的子项
485    */
486    fn bring_child_to_front(&self, child: &View);
487
488    /**
489    显示指定视图或其祖先的上下文菜单。在大多数情况下,子类不需要覆盖此。但是,如果将子类直接添加到窗口管理器(例如,ViewManager.addView(View, ViewGroup.LayoutParams)),则它应该覆盖此并显示上下文菜单。
490    返回:如果显示上下文菜单,则返回 true,否则返回 false
491    `original_view` 首次调用上下文菜单的源视图
492    */
493    fn show_context_menu_for_child(&self, original_view: &View) -> bool;
494
495    /**
496    当子项的可绘制状态发生改变时,将在父项上调用此方法。
497    `child` 可绘制状态发生改变的子项。
498    */
499    fn child_drawable_state_changed(&self, child: &View);
500
501    /**
502    当子级不希望此父级及其祖先使用 ViewGroup.onInterceptTouchEvent(MotionEvent) 拦截触摸事件时调用。此父级应将此调用传递给其父级。此父级必须在触摸期间遵守此请求(即,仅在此父级收到向上或取消后清除标志。
503    `disallow_intercept` 如果子级不希望父级拦截触摸事件,则为 True。
504    */
505    fn request_disallow_intercept_touch_event(&self, disallow_intercept: bool);
506
507    /**
508    当子视图现在具有或不再跟踪瞬态时调用。 “瞬态”是视图可能持有的任何状态,但不应反映在视图当前呈现的数据模型中。此状态仅影响视图本身向用户呈现的内容,例如正在进行的动画的当前状态或文本选择操作的状态。瞬态可用于向视图系统的其他组件提示特定视图正在跟踪复杂但封装的内容。例如,ListView 可能承认具有瞬态的列表项视图应保留在其位置或稳定项 ID 中,而不是将该视图视为可由后备适配器轻松替换。
509    这使得适配器实现更简单,而不需要跟踪正在进行的项目视图动画的状态,以便在意外回收和重新绑定附加项目视图时可以恢复它们。当子视图或其子树中的视图开始或结束内部瞬态跟踪时,将在父视图上调用此方法。
510    `child` 状态已改变的子视图
511    `has_transient_state` 如果此子视图具有瞬时状态,则为 true
512    */
513    fn child_has_transient_state_changed(&self, child: &View, has_transient_state: bool);
514
515    /**
516    要求执行新的 View.fitSystemWindows(Rect) 调度。
517    */
518    fn request_fit_system_windows(&self);
519
520    /**
521    获取给定 View 的父级,以实现可访问性。由于某些 View 未暴露给可访问性层,因此可访问性的父级不一定是 View 的直接父级,而是前任。
522    返回:父级,如果未找到,则返回 null。
523    */
524    fn get_parent_for_accessibility(&self) -> Option<Self::VP>;
525
526    /**
527    通知视图父级,其某个后代的可访问性状态已更改,并且子树的结构不同。
528    `child` 子树已更改的直接子级。
529    `source` 发生更改的后代视图。不能为 null。
530    `change_type` 发生的更改类型的位掩码。以下一个或多个:
531    AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION AccessibilityEvent.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE
532    AccessibilityEvent.CONTENT_CHANGE_TYPE_TEXT AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED AccessibilityEvent.CONTENT_CHANGE_TYPE_DRAG_STARTED
533    AccessibilityEvent.CONTENT_CHANGE_TYPE_DRAG_CANCELLED AccessibilityEvent.CONTENT_CHANGE_TYPE_DRAG_DROPPED
534    */
535    fn notify_subtree_accessibility_state_changed(
536        &self,
537        child: &View,
538        source: &View,
539        change_type: i32,
540    );
541
542    /**
543    告知此视图父级是否可以解析布局方向。请参阅 View.setLayoutDirection(int)
544    返回:如果此视图父级可以解析布局方向,则返回 True。
545    */
546    fn can_resolve_layout_direction(&self) -> bool;
547
548    /**
549    告知此视图父级布局方向是否已解析。请参阅 View.setLayoutDirection(int)
550    返回:如果此视图父级布局方向已解析,则返回 True。
551    */
552    fn is_layout_direction_resolved(&self) -> bool;
553
554    /**
555    返回此视图的父布局方向。请参阅 View.getLayoutDirection()
556    返回:如果布局方向为 RTL,则返回 View.LAYOUT_DIRECTION_RTL;如果布局方向不是 RTL,则返回 View.LAYOUT_DIRECTION_LTR。
557    */
558    fn get_layout_direction(&self) -> i32;
559
560    /**
561    告知此视图父级是否可以解析文本方向。请参阅 View.setTextDirection(int)
562    返回:如果此视图父级可以解析文本方向,则返回 True。
563    */
564    fn can_resolve_text_direction(&self) -> bool;
565
566    /**
567    告知此视图父文本方向是否已解析。请参阅 View.setTextDirection(int)
568    返回:如果此视图父文本方向已解析,则返回 true。
569    */
570    fn is_text_direction_resolved(&self) -> bool;
571
572    /**
573    返回此视图父文本方向。参见 View.getTextDirection()
574    返回:已解析的文本方向。返回以下之一:
575    View.TEXT_DIRECTION_FIRST_STRONG View.TEXT_DIRECTION_ANY_RTL、View.TEXT_DIRECTION_LTR、View.TEXT_DIRECTION_RTL、View.TEXT_DIRECTION_LOCALE
576    */
577    fn get_text_direction(&self) -> i32;
578
579    /**
580    告知此视图父级是否可以解决文本对齐问题。请参阅 View.setTextAlignment(int)
581    返回:如果此视图父级可以解决文本对齐问题,则返回 True。
582    */
583    fn can_resolve_text_alignment(&self) -> bool;
584
585    /**
586    告知此视图父级是否可以解决文本对齐问题。请参阅 View.setTextAlignment(int)
587    返回:如果此视图父级可以解决文本对齐问题,则返回 True。
588    */
589    fn is_text_alignment_resolved(&self) -> bool;
590
591    /**
592    对启动嵌套滚动操作的子视图做出反应,在适当的情况下声明嵌套滚动操作。此方法将在子视图调用 View.startNestedScroll(int) 时调用。视图层次结构中的每个父视图都将有机会通过返回 true 来响应和声明嵌套滚动操作。
593    此方法可能被 ViewParent 实现覆盖,以指示视图何时愿意支持即将开始的嵌套滚动操作。如果它返回 true,则此 ViewParent 将成为目标视图的嵌套滚动父视图,直至滚动操作完成。当嵌套滚动完成时,此 ViewParent 将收到对 onStopNestedScroll(View) 的调用。
594    如果此 ViewParent 接受嵌套滚动操作,则返回 true
595    `child` 包含目标的此 ViewParent 的直接子视图
596    `target` 发起嵌套滚动的视图
597    `nested_scroll_axes` 由 View.SCROLL_AXIS_HORIZONTAL、View.SCROLL_AXIS_VERTICAL 或两者组成的标志
598    */
599    fn on_start_nested_scroll(&self, child: &View, target: &View, nested_scroll_axes: i32) -> bool;
600
601    /**
602    对成功声明嵌套滚动操作做出反应。此方法将在 onStartNestedScroll 返回 true 后调用。它为视图及其超类提供了对嵌套滚动执行初始配置的机会。此方法的实现应始终调用其超类对此方法的实现(如果存在)。
603    `child` 此 ViewParent 的直接子级,包含 target
604    `target` 启动嵌套滚动的视图
605    `nested_scroll_axes` 由 View.SCROLL_AXIS_HORIZONTAL、View.SCROLL_AXIS_VERTICAL 或两者组成的标志
606    */
607    fn on_nested_scroll_accepted(&self, child: &View, target: &View, nested_scroll_axes: i32);
608
609    /**
610    对嵌套滚动操作结束做出反应。在嵌套滚动操作后执行清理。当嵌套滚动停止时,将调用此方法,例如当嵌套触摸滚动以 MotionEvent.ACTION_UP 或 MotionEvent.ACTION_CANCEL 事件结束时。此方法的实现应始终调用其超类对此方法的实现(如果存在)。
611    `target` 启动嵌套滚动的视图
612    */
613    fn on_stop_nested_scroll(&self, target: &View);
614
615    /**
616    对正在进行的嵌套滚动做出反应。当 ViewParent 的当前嵌套滚动子视图分派嵌套滚动事件时,将调用此方法。要接收对此方法的调用,ViewParent 必须先前已为 onStartNestedScroll(View, View, int) 调用返回 true。
617    滚动距离的已消耗部分和未消耗部分均报告给 ViewParent。例如,实现可以选择使用已消耗部分来匹配或追踪多个子元素的滚动位置。未消耗部分可用于允许连续拖动多个滚动或可拖动元素,例如滚动垂直抽屉内的列表,一旦到达内部滚动内容的边缘,抽屉便开始拖动。
618    `target` 控制嵌套滚动的后代视图
619    `dx_consumed` 目标已消耗的水平滚动距离(以像素为单位)
620    `dy_consumed` 目标已消耗的垂直滚动距离(以像素为单位)
621    `dx_unconsumed` 目标未消耗的水平滚动距离(以像素为单位)
622    `dy_unconsumed` 目标未消耗的垂直滚动距离(以像素为单位)
623    */
624    fn on_nested_scroll(
625        &self,
626        target: &View,
627        dx_consumed: i32,
628        dy_consumed: i32,
629        dx_unconsumed: i32,
630        dy_unconsumed: i32,
631    );
632
633    /**
634    从嵌套滚动请求一次抛出。此方法表示嵌套滚动子视图已检测到适合抛出的条件。通常,这意味着触摸滚动已在滚动方向上以达到或超过可滚动轴上的最小抛出速度的速度结束。
635    如果嵌套滚动子视图通常会抛出但位于其自身内容的边缘,则可以使用此方法将抛出委托给其嵌套滚动父视图。父视图可以选择使用抛出或观察子视图的抛出。
636    返回:如果此父视图消耗了抛出或以其他方式对抛出做出反应,则为 true
637    `target` 发起嵌套滚动的视图。
638    `velocity_x` 水平速度(以像素/秒为单位)。
639    `velocity_y` 垂直速度(以像素/秒为单位)。
640    `consumed` 如果子视图消耗了抛出,则为 true,否则为 false。
641    */
642    fn on_nested_fling(
643        &self,
644        target: &View,
645        velocity_x: f32,
646        velocity_y: f32,
647        consumed: bool,
648    ) -> bool;
649
650    /**
651    在目标视图使用嵌套的快速滑动之前对其做出反应。此方法表示嵌套滚动子视图已检测到沿每个轴具有给定速度的快速滑动。通常,这意味着触摸滚动已在滚动方向上以达到或超过沿可滚动轴的最小快速滑动速度的速度结束。
652    如果嵌套滚动父视图正在将运动作为预滚动的一部分使用,则它可能也适合使用预快速滑动以完成相同的运动。通过从此方法返回 true,父视图表示子视图也不应该快速滑动其自己的内部内容。
653    返回:如果此父视图在目标视图之前使用了快速滑动,则返回 true
654    `target` 发起嵌套滚动的视图。
655    `velocity_x` 水平速度(以像素/秒为单位)。
656    `velocity_y` 垂直速度(以像素/秒为单位)。
657    */
658    fn on_nested_pre_fling(&self, target: &View, velocity_x: f32, velocity_y: f32) -> bool;
659
660    /**
661    在目标处理目标后代视图委托的可访问性操作之前,对它做出反应。如果目标希望让其父链中的视图有机会在正常处理发生之前对事件做出反应,则目标后代视图可以调用此方法。
662    最常见的是滚动事件,例如 android.view.accessibility.AccessibilityNodeInfo.ACTION_SCROLL_FORWARD。支持充当嵌套滚动父级的 ViewParent 应覆盖此方法并采取相应行动,以通过可访问性系统实​​现滚动。
663    返回:true,如果此 ViewParent 使用了此操作
664    `target` 调度此操作的目标视图。
665    `action` 正在执行的操作;请参阅 android.view.accessibility.AccessibilityNodeInfo。
666    `arguments` 可选的操作参数。
667    */
668    fn on_nested_pre_perform_accessibility_action(
669        &self,
670        target: &View,
671        action: i32,
672        arguments: Option<Bundle>,
673    ) -> bool;
674}
675
676/// 当视图被点击时调用的回调的接口定义。
677#[allow(non_camel_case_types)]
678#[java_interface(name = "android/view/View$OnClickListener")]
679pub trait View_OnClickListener {
680    /**
681    当单击某个视图时调用。
682    `v` 被单击的视图。
683    */
684    fn on_click(&self, v: View);
685}
686
687#[doc(hidden)]
688#[allow(non_camel_case_types)]
689#[java_class(name = "android/view/View$OnClickListenerImpl")]
690pub struct View_OnClickListenerImpl(Box<dyn Fn(View) + Send + Sync>);
691
692impl View_OnClickListenerImpl {
693    pub fn from_fn(func: impl Fn(/* v */ View) + Send + Sync + 'static) -> Arc<Self> {
694        Self::new(View_OnClickListenerImplDefault(Box::new(func)))
695    }
696}
697
698impl Default for View_OnClickListenerImplDefault {
699    fn default() -> Self {
700        Self(Box::new(|v| unimplemented!("{:?}", v)))
701    }
702}
703
704#[java_implement]
705impl View_OnClickListener for View_OnClickListenerImpl {
706    fn on_click(&self, v: View) {
707        self.0(v)
708    }
709}
710
711/**
712接口允许您向 Activity 添加和删除子视图。要获取此类的实例,请调用 Context.getSystemService()。
713*/
714#[java_interface(name = "android/view/ViewManager")]
715pub trait ViewManager: JType {
716    /**
717    将传递的 LayoutParams 分配给传递的 View,并将该视图添加到窗口。对于某些编程错误,例如在未移除第一个视图的情况下向窗口添加第二个视图,将抛出 WindowManager.BadTokenException。
718    如果窗口位于辅助显示器上并且找不到指定的显示器,则抛出 WindowManager.InvalidDisplayException(请参阅 android.app.Presentation)。
719    `view` 要添加到此窗口的视图。
720    `params` 要分配给视图的 LayoutParams。
721    */
722    fn add_view(
723        &self,
724        view: &View,
725        params: &ViewGroup_LayoutParams,
726    ) -> Result<(), <Self as JType>::Error>;
727
728    #[doc(hidden)]
729    fn update_view_layout(&self, view: &View, params: &ViewGroup_LayoutParams);
730
731    #[doc(hidden)]
732    fn remove_view(&self, view: &View);
733}
734
735/**
736应用用于与窗口管理器通信的接口。每个窗口管理器实例都绑定到一个 Display。要获取与显示器关联的 WindowManager,请调用 Context.createWindowContext(Display, int, Bundle) 以获取显示器的 UI 上下文,然后在 UI 上下文上调用 Context.getSystemService(String) 或 Context.getSystemService(Class)。
737在特定显示器上显示窗口的最简单方法是创建一个 Presentation,它会自动获取显示器的 WindowManager 和上下文。
738*/
739#[java_interface(name = "android/view/WindowManager")]
740pub trait WindowManager: ViewManager {
741    #[doc(hidden)]
742    const PARCEL_KEY_SHORTCUTS_ARRAY: &'static str = "shortcuts_array";
743
744    /**
745    removeView 的特殊变体,在返回之前立即调用给定视图层次结构的 View.onDetachedFromWindow() 方法。这不适用于普通应用程序;正确使用它需要非常小心。
746    `view` 要删除的视图。
747    */
748    fn remove_view_immediate(&self, view: &View);
749
750    /**
751    返回此WindowManager实例将创建新窗口的显示器。尽管有此方法的名称,但返回的显示器不一定是系统的主要显示器(请参见Display.DEFAULT_DISPLAY)。
752    返回的显示可能是此窗口管理器实例正在管理的辅助显示。将其视为此WindowManager实例默认使用的显示。要在其他显示器上创建窗口,您需要为该显示器获得一个WindowManager。 (有关更多信息,请参见WindowManager类文档。)
753    返回:此窗口管理器正在管理的显示器。
754    */
755    #[deprecated(note = "改用 Context.getDisplay()。")]
756    #[java_method]
757    fn get_default_display(&self) -> Display {}
758}
759
760#[doc(hidden)]
761#[java_class(name = "android/view/WindowManagerImpl")]
762pub struct WindowManagerImpl;
763
764impl ViewManager for WindowManagerImpl {
765    #[java_method]
766    fn add_view(
767        &self,
768        view: &View,
769        params: &ViewGroup_LayoutParams,
770    ) -> Result<(), <Self as JType>::Error> {
771    }
772
773    #[java_method]
774    fn update_view_layout(&self, view: &View, params: &ViewGroup_LayoutParams) {}
775
776    #[java_method]
777    fn remove_view(&self, view: &View) {}
778}
779
780impl WindowManager for WindowManagerImpl {
781    #[java_method]
782    fn remove_view_immediate(&self, view: &View) {}
783}
784
785/**
786ViewGroup 是一种特殊视图,可以包含其他视图(称为子视图)。视图组是布局和视图容器的基类。
787此类还定义了 ViewGroup.LayoutParams 类,该类用作布局参数的基类。另请参阅 ViewGroup.LayoutParams 以了解布局属性。
788
789开发者指南
790有关创建用户界面布局的更多信息,请阅读 XML 布局开发者指南。以下是自定义 ViewGroup 的完整实现,它实现了简单的 android.widget.FrameLayout,并能够在左右边缘堆叠子视图。
791@sample development/samples/ApiDemos/src/com/example/android/apis/view/CustomLayout.java 完整版
792如果您正在实现示例中所示的 XML 布局属性,则这是它们在 res/values/attrs.xml 中的对应定义:
793@sample development/samples/ApiDemos/res/values/attrs.xml CustomLayout
794最后,布局管理器可以在 XML 布局中使用,如下所示:
795@sample development/samples/ApiDemos/res/layout/custom_layout.xml 完整版
796*/
797#[java_class(name = "android/view/ViewGroup", extends=View)]
798pub struct ViewGroup;
799
800impl ViewGroup {
801    /**
802    添加子视图。如果子视图上尚未设置布局参数,则此 ViewGroup 的默认参数将设置在该子视图上。
803    注意:不要从 draw(Canvas)、onDraw(Canvas)、dispatchDraw(Canvas) 或任何相关方法调用此方法。
804    `child` 要添加的子视图
805    */
806    #[java_method]
807    pub fn add_view(&self, child: &View) {}
808
809    /**
810    调用此方法可从 ViewGroup 中删除所有子视图。
811    注意:不要从 draw(Canvas)、onDraw(Canvas)、dispatchDraw(Canvas) 或任何相关方法调用此方法。
812    */
813    #[java_method]
814    pub fn remove_all_views(&self) {}
815
816    /**
817    当 ViewGroup 子类必须先知道其在屏幕上的大小,然后才能计算要渲染的子视图数量时,此方法会由 ViewGroup 子类调用,以从自身移除子视图。例如 Gallery 或 ListView,它们可能“有”50 个子视图,但实际上只渲染当前可容纳在屏幕上的对象内的子视图数量。除非您正在扩展 ViewGroup 并了解视图测量和布局管道,否则请不要调用此方法。
818    注意:不要从 draw(Canvas)、onDraw(Canvas)、dispatchDraw(Canvas) 或任何相关方法调用此方法。
819    */
820    pub fn remove_all_views_in_layout(&self) {}
821}
822
823impl ViewManager for ViewGroup {
824    #[java_method]
825    fn add_view(
826        &self,
827        view: &View,
828        params: &ViewGroup_LayoutParams,
829    ) -> Result<(), <Self as JType>::Error> {
830    }
831
832    #[java_method]
833    fn update_view_layout(&self, view: &View, params: &ViewGroup_LayoutParams) {}
834
835    #[java_method]
836    fn remove_view(&self, view: &View) {}
837}
838
839impl ViewParent for ViewGroup {
840    type VP = Self;
841
842    #[java_method]
843    fn request_layout(&self) {}
844
845    #[java_method]
846    fn is_layout_requested(&self) -> bool {}
847
848    #[java_method]
849    fn request_transparent_region(&self, child: &View) {}
850
851    #[java_method(type_bound=(Self::VP, ViewParent))]
852    fn get_parent(&self) -> Option<Self::VP> {}
853
854    #[java_method]
855    fn request_child_focus(&self, child: &View, focused: &View) {}
856
857    #[java_method]
858    fn recompute_view_attributes(&self, child: &View) {}
859
860    #[java_method]
861    fn clear_child_focus(&self, child: &View) {}
862
863    #[java_method]
864    fn focus_search(&self, v: &View, direction: i32) -> View {}
865
866    #[java_method]
867    fn bring_child_to_front(&self, child: &View) {}
868
869    #[java_method]
870    fn show_context_menu_for_child(&self, original_view: &View) -> bool {}
871
872    #[java_method]
873    fn child_drawable_state_changed(&self, child: &View) {}
874
875    #[java_method]
876    fn request_disallow_intercept_touch_event(&self, disallow_intercept: bool) {}
877
878    #[java_method]
879    fn child_has_transient_state_changed(&self, child: &View, has_transient_state: bool) {}
880
881    #[java_method]
882    fn request_fit_system_windows(&self) {}
883
884    #[java_method(type_bound=(Self::VP, ViewParent))]
885    fn get_parent_for_accessibility(&self) -> Option<Self::VP> {}
886
887    #[java_method]
888    fn notify_subtree_accessibility_state_changed(
889        &self,
890        child: &View,
891        source: &View,
892        change_type: i32,
893    ) {
894    }
895
896    #[java_method]
897    fn can_resolve_layout_direction(&self) -> bool {}
898
899    #[java_method]
900    fn is_layout_direction_resolved(&self) -> bool {}
901
902    #[java_method]
903    fn get_layout_direction(&self) -> i32 {}
904
905    #[java_method]
906    fn can_resolve_text_direction(&self) -> bool {}
907
908    #[java_method]
909    fn is_text_direction_resolved(&self) -> bool {}
910
911    #[java_method]
912    fn get_text_direction(&self) -> i32 {}
913
914    #[java_method]
915    fn can_resolve_text_alignment(&self) -> bool {}
916
917    #[java_method]
918    fn is_text_alignment_resolved(&self) -> bool {}
919
920    #[java_method]
921    fn on_start_nested_scroll(&self, child: &View, target: &View, nested_scroll_axes: i32) -> bool {
922    }
923
924    #[java_method]
925    fn on_nested_scroll_accepted(&self, child: &View, target: &View, nested_scroll_axes: i32) {}
926
927    #[java_method]
928    fn on_stop_nested_scroll(&self, target: &View) {}
929
930    #[java_method]
931    fn on_nested_scroll(
932        &self,
933        target: &View,
934        dx_consumed: i32,
935        dy_consumed: i32,
936        dx_unconsumed: i32,
937        dy_unconsumed: i32,
938    ) {
939    }
940
941    #[java_method]
942    fn on_nested_fling(
943        &self,
944        target: &View,
945        velocity_x: f32,
946        velocity_y: f32,
947        consumed: bool,
948    ) -> bool {
949    }
950
951    #[java_method]
952    fn on_nested_pre_fling(&self, target: &View, velocity_x: f32, velocity_y: f32) -> bool {}
953
954    #[java_method]
955    fn on_nested_pre_perform_accessibility_action(
956        &self,
957        target: &View,
958        action: i32,
959        arguments: Option<Bundle>,
960    ) -> bool {
961    }
962}
963
964/**
965视图使用 LayoutParams 来告诉其父级它们希望如何布局。请参阅 ViewGroup 布局属性,了解此类支持的所有子视图属性的列表。
966基本 LayoutParams 类仅描述视图希望的宽度和高度。对于每个维度,它可以指定以下之一:
967FILL_PARENT(在 API 级别 8 及更高版本中重命名为 MATCH_PARENT),这意味着视图希望与其父级一样大(减去填充)
968WRAP_CONTENT,这意味着视图希望足够大以包含其内容(加上填充)
969
970一个确切的数字
971对于不同的 ViewGroup 子类,有 LayoutParams 的子类。例如,AbsoluteLayout 有自己的 LayoutParams 子类,它添加了 X 和 Y 值。
972
973开发人员指南
974有关创建用户界面布局的更多信息,请阅读 XML 布局开发人员指南。
975*/
976#[allow(non_camel_case_types)]
977#[java_class(name = "android/view/ViewGroup$LayoutParams")]
978pub struct ViewGroup_LayoutParams;
979
980impl ViewGroup_LayoutParams {
981    /// 视图请求的高度或宽度的特殊值。FILL_PARENT 表示视图希望与其父级一样大,减去父级的填充(如果有)。
982    #[deprecated(note = "从 API 级别 8 开始,此值已弃用,并由 MATCH_PARENT 取代。")]
983    pub const FILL_PARENT: i32 = -1;
984
985    /// 视图请求的高度或宽度的特殊值。MATCH_PARENT 表示视图希望与其父级一样大,减去父级的填充(如果有)。在 API 级别 8 中引入。
986    pub const MATCH_PARENT: i32 = -1;
987
988    /// 视图请求的高度或宽度的特殊值。WRAP_CONTENT 表示视图希望足够大以容纳其自己的内部内容,同时考虑其自己的填充。
989    pub const WRAP_CONTENT: i32 = -2;
990
991    /// 有关视图所需宽度的信息。可以是常量 FILL_PARENT(在 API 级别 8 中由 MATCH_PARENT 取代)或 WRAP_CONTENT 之一,也可以是确切的大小。
992    #[java_field]
993    pub fn get_width(&self) -> i32 {}
994
995    /// 有关视图所需宽度的信息。可以是常量 FILL_PARENT(在 API 级别 8 中由 MATCH_PARENT 取代)或 WRAP_CONTENT 之一,也可以是确切的大小。
996    #[java_field]
997    pub fn set_width(&self, value: i32) {}
998
999    /// 有关视图所需高度的信息。可以是常量 FILL_PARENT(在 API 级别 8 中由 MATCH_PARENT 取代)或 WRAP_CONTENT 之一,也可以是确切的大小。
1000    #[java_field]
1001    pub fn get_height(&self) -> i32 {}
1002
1003    /// 有关视图所需高度的信息。可以是常量 FILL_PARENT(在 API 级别 8 中由 MATCH_PARENT 取代)或 WRAP_CONTENT 之一,也可以是确切的大小。
1004    #[java_field]
1005    pub fn set_height(&self, value: i32) {}
1006
1007    /**
1008    创建一组具有指定宽度和高度的新布局参数。
1009    `width` 宽度,可以是 WRAP_CONTENT、FILL_PARENT(在 API 级别 8 中由 MATCH_PARENT 替换),也可以是固定大小(以像素为单位)
1010    `height` 高度,可以是 WRAP_CONTENT、FILL_PARENT(在 API 级别 8 中由 MATCH_PARENT 替换),也可以是固定大小(以像素为单位)
1011    */
1012    #[java_constructor]
1013    pub fn new(width: i32, height: i32) -> Self {}
1014}
1015
1016/**
1017支持边距的布局的每个子视图布局信息。请参阅 ViewGroup 边距布局属性,查看此类支持的所有子视图属性的列表。
1018*/
1019#[allow(non_camel_case_types)]
1020#[java_class(name = "android/view/ViewGroup$MarginLayoutParams", extends=ViewGroup_LayoutParams)]
1021pub struct ViewGroup_MarginLayoutParams;
1022
1023impl ViewGroup_MarginLayoutParams {
1024    /// 默认的开始和结束边距。
1025    pub const DEFAULT_MARGIN_RELATIVE: u32 = Integer::MIN_VALUE;
1026
1027    /// 子项的左边距(以像素为单位)。边距值应为正数。为此字段重新分配新值后,调用 setLayoutParams(ViewGroup. LayoutParams)。
1028    #[java_field]
1029    pub fn get_left_margin(&self) -> i32 {}
1030
1031    /// 子项的左边距(以像素为单位)。边距值应为正数。为此字段重新分配新值后,调用 setLayoutParams(ViewGroup. LayoutParams)。
1032    #[java_field]
1033    pub fn set_left_margin(&self, value: i32) {}
1034
1035    /// 子项的上边距(以像素为单位)。边距值应为正数。为此字段重新分配新值后,调用 setLayoutParams(ViewGroup. LayoutParams)。
1036    #[java_field]
1037    pub fn get_top_margin(&self) -> i32 {}
1038
1039    /// 子项的上边距(以像素为单位)。边距值应为正数。为此字段重新分配新值后,调用 setLayoutParams(ViewGroup. LayoutParams)。
1040    #[java_field]
1041    pub fn set_top_margin(&self, value: i32) {}
1042
1043    /// 子项的右边距(以像素为单位)。边距值应为正数。为此字段重新分配新值后,调用 setLayoutParams(ViewGroup. LayoutParams)。
1044    #[java_field]
1045    pub fn get_right_margin(&self) -> i32 {}
1046
1047    /// 子项的右边距(以像素为单位)。边距值应为正数。为此字段重新分配新值后,调用 setLayoutParams(ViewGroup. LayoutParams)。
1048    #[java_field]
1049    pub fn set_right_margin(&self, value: i32) {}
1050
1051    /// 子项的底部边距(以像素为单位)。边距值应为正数。为此字段重新分配新值后,调用 setLayoutParams(ViewGroup. LayoutParams)。
1052    #[java_field]
1053    pub fn get_bottom_margin(&self) -> i32 {}
1054
1055    /// 子项的底部边距(以像素为单位)。边距值应为正数。为此字段重新分配新值后,调用 setLayoutParams(ViewGroup. LayoutParams)。
1056    #[java_field]
1057    pub fn set_bottom_margin(&self, value: i32) {}
1058
1059    #[doc(hidden)]
1060    #[java_constructor]
1061    pub fn new(width: i32, height: i32) -> Self {}
1062
1063    #[doc(hidden)]
1064    #[java_constructor]
1065    pub fn from_layout_params(source: &ViewGroup_LayoutParams) -> Self {}
1066}
1067
1068#[doc(hidden)]
1069#[allow(non_camel_case_types)]
1070#[java_class(name = "android/view/WindowManager$LayoutParams", extends=ViewGroup_LayoutParams)]
1071pub struct WindowManager_LayoutParams;
1072
1073impl WindowManager_LayoutParams {
1074    /// 代表正常应用程序窗口的窗口类型的启动。
1075    pub const FIRST_APPLICATION_WINDOW: i32 = 1;
1076
1077    /// 窗口类型:作为整个应用程序的“基础”窗口的应用程序窗口;所有其他应用程序窗口将显示在其上方。在多用户系统中,仅显示在拥有该应用程序的用户窗口上。
1078    pub const TYPE_BASE_APPLICATION: i32 = 1;
1079
1080    /// 窗口类型:普通应用程序窗口。令牌必须是活动令牌,用于标识窗口所属用户。在多用户系统中,仅显示在所属用户的窗口上。
1081    pub const TYPE_APPLICATION: i32 = 2;
1082
1083    /// 窗口类型:应用程序启动时显示的特殊应用程序窗口。应用程序本身不使用它;系统使用它来显示某些内容,直到应用程序可以显示自己的窗口。在多用户系统中,显示在所有用户的窗口上。
1084    pub const TYPE_APPLICATION_STARTING: i32 = 3;
1085
1086    /// 窗口类型:TYPE_APPLICATION 的变体,确保窗口管理器将等待此窗口绘制完毕后再显示应用。在多用户系统中,仅显示在拥有该应用的用户窗口上。
1087    pub const TYPE_DRAWN_APPLICATION: i32 = 4;
1088
1089    /// 申请窗口类型的结束。
1090    pub const LAST_APPLICATION_WINDOW: i32 = 99;
1091
1092    /// 子窗口类型的开始。这些窗口的标记必须设置为它们所附加到的窗口。这些类型的窗口在 Z 顺序上紧挨着它们所附加到的窗口,并且它们的坐标空间相对于它们所附加到的窗口。
1093    pub const FIRST_SUB_WINDOW: i32 = 1000;
1094
1095    /// 窗口类型:位于应用程序窗口顶部的面板。这些窗口出现在其附属窗口的顶部。
1096    pub const TYPE_APPLICATION_PANEL: i32 = Self::FIRST_SUB_WINDOW;
1097
1098    /// 窗口类型:用于显示媒体(如视频)的窗口。这些窗口显示在其附属窗口的后面。
1099    pub const TYPE_APPLICATION_MEDIA: i32 = Self::FIRST_SUB_WINDOW + 1;
1100
1101    /// 窗口类型:应用程序窗口顶部的子面板。这些窗口显示在其附属窗口和任何 TYPE_APPLICATION_PANEL 面板的顶部。
1102    pub const TYPE_APPLICATION_SUB_PANEL: i32 = Self::FIRST_SUB_WINDOW + 2;
1103
1104    /// 窗口类型:类似于 TYPE_APPLICATION_PANEL,但窗口的布局与顶层窗口一样,而不是作为其容器的子窗口。
1105    pub const TYPE_APPLICATION_ATTACHED_DIALOG: i32 = Self::FIRST_SUB_WINDOW + 3;
1106
1107    /// 窗口类型:用于在媒体窗口顶部显示覆盖层的窗口。这些窗口显示在 TYPE_APPLICATION_MEDIA 和应用程序窗口之间。它们应该是半透明的,以便于使用。这是一个非常丑陋的 hack,因此:
1108    pub const TYPE_APPLICATION_MEDIA_OVERLAY: i32 = Self::FIRST_SUB_WINDOW + 4;
1109
1110    /// 窗口类型:位于应用程序窗口及其子面板窗口上方的子面板。这些窗口显示在其附属窗口和任何 TYPE_APPLICATION_SUB_PANEL 面板的上方。
1111    pub const TYPE_APPLICATION_ABOVE_SUB_PANEL: i32 = Self::FIRST_SUB_WINDOW + 5;
1112
1113    /// 子窗口类型的结束。
1114    pub const LAST_SUB_WINDOW: i32 = 1999;
1115
1116    /// 启动系统特定的窗口类型。这些窗口类型通常不是由应用程序创建的。
1117    pub const FIRST_SYSTEM_WINDOW: i32 = 2000;
1118
1119    /// 窗口类型:状态栏。只能有一个状态栏窗口;它位于屏幕顶部,所有其他窗口都向下移动,因此它们位于其下方。在多用户系统中显示在所有用户的窗口上。
1120    pub const TYPE_STATUS_BAR: i32 = Self::FIRST_SYSTEM_WINDOW;
1121
1122    /// 窗口类型:搜索栏。只能有一个搜索栏窗口;它位于屏幕顶部。在多用户系统中显示在所有用户的窗口上。
1123    pub const TYPE_SEARCH_BAR: i32 = Self::FIRST_SYSTEM_WINDOW + 1;
1124
1125    /// 窗口类型:电话。这些是非应用程序窗口,用于为用户提供与电话的交互(尤其是来电)。这些窗口通常位于所有应用程序之上,但在状态栏后面。在多用户系统中显示在所有用户的窗口上。
1126    #[deprecated(note = "适用于非系统应用。请改用 TYPE_APPLICATION_OVERLAY。")]
1127    pub const TYPE_PHONE: i32 = Self::FIRST_SYSTEM_WINDOW + 2;
1128
1129    /// 窗口类型:系统窗口,例如低电量警报。这些窗口始终位于应用程序窗口之上。在多用户系统中,仅显示在拥有用户的窗口上。
1130    #[deprecated(note = "适用于非系统应用。请改用 TYPE_APPLICATION_OVERLAY。")]
1131    pub const TYPE_SYSTEM_ALERT: i32 = Self::FIRST_SYSTEM_WINDOW + 3;
1132
1133    /// 窗口类型:键盘保护窗口。在多用户系统中显示在所有用户的窗口上。
1134    pub const TYPE_KEYGUARD: i32 = Self::FIRST_SYSTEM_WINDOW + 4;
1135
1136    /// 窗口类型:瞬态通知。在多用户系统中,仅显示在拥有用户的窗口上。
1137    #[deprecated(note = "适用于非系统应用。请改用 TYPE_APPLICATION_OVERLAY。")]
1138    pub const TYPE_TOAST: i32 = Self::FIRST_SYSTEM_WINDOW + 5;
1139
1140    /// 窗口类型:系统覆盖窗口,需要显示在所有其他窗口之上。这些窗口不得获取输入焦点,否则会干扰键盘保护。在多用户系统中,仅显示在拥有用户的窗口上。
1141    #[deprecated(note = "适用于非系统应用。请改用 TYPE_APPLICATION_OVERLAY。")]
1142    pub const TYPE_SYSTEM_OVERLAY: i32 = Self::FIRST_SYSTEM_WINDOW + 6;
1143
1144    /// 窗口类型:优先手机 UI,即使键盘锁处于活动状态也需要显示。这些窗口不得获取输入焦点,否则会干扰键盘锁。在多用户系统中显示在所有用户的窗口上。
1145    #[deprecated(note = "适用于非系统应用。请改用 TYPE_APPLICATION_OVERLAY。")]
1146    pub const TYPE_PRIORITY_PHONE: i32 = Self::FIRST_SYSTEM_WINDOW + 7;
1147
1148    /// 窗口类型:在多用户系统中从状态栏滑出的面板显示在所有用户的窗口上。
1149    pub const TYPE_SYSTEM_DIALOG: i32 = Self::FIRST_SYSTEM_WINDOW + 8;
1150
1151    /// 窗口类型:键盘保护显示的对话框在多用户系统中显示在所有用户的窗口上。
1152    pub const TYPE_KEYGUARD_DIALOG: i32 = Self::FIRST_SYSTEM_WINDOW + 9;
1153
1154    /// 窗口类型:内部系统错误窗口,显示在所有可能出现的窗口之上。在多用户系统中,仅显示在所属用户的窗口上。
1155    #[deprecated(note = "适用于非系统应用。请改用 TYPE_APPLICATION_OVERLAY。")]
1156    pub const TYPE_SYSTEM_ERROR: i32 = Self::FIRST_SYSTEM_WINDOW + 10;
1157
1158    /// 窗口类型:内部输入法窗口,显示在正常 UI 上方。可以调整应用程序窗口的大小或平移,以便在显示此窗口时保持输入焦点可见。在多用户系统中,仅显示在拥有用户的窗口上。
1159    pub const TYPE_INPUT_METHOD: i32 = Self::FIRST_SYSTEM_WINDOW + 11;
1160
1161    /// 窗口类型:内部输入法对话窗口,显示在当前输入法窗口上方。在多用户系统中,仅显示在所属用户的窗口上。
1162    pub const TYPE_INPUT_METHOD_DIALOG: i32 = Self::FIRST_SYSTEM_WINDOW + 12;
1163
1164    /// 窗口类型:壁纸窗口,放置在任何想要位于壁纸之上的窗口后面。在多用户系统中,仅显示在拥有该壁纸的用户窗口上。
1165    pub const TYPE_WALLPAPER: i32 = Self::FIRST_SYSTEM_WINDOW + 13;
1166
1167    /// 窗口类型:在多用户系统中从状态栏滑出的面板显示在所有用户的窗口上。
1168    pub const TYPE_STATUS_BAR_PANEL: i32 = Self::FIRST_SYSTEM_WINDOW + 14;
1169
1170    /**
1171    窗口类型:安全系统覆盖窗口,需要显示在所有其他窗口之上。这些窗口不得获取输入焦点,否则会干扰键盘保护。
1172    这与 TYPE_SYSTEM_OVERLAY 完全相同,不同之处在于只有系统本身才被允许创建这些覆盖层。应用程序无法获得创建安全系统覆盖层的权限。
1173    在多用户系统中仅显示在所属用户的窗口上。
1174    */
1175    pub const TYPE_SECURE_SYSTEM_OVERLAY: i32 = Self::FIRST_SYSTEM_WINDOW + 15;
1176
1177    /// 窗口类型:拖放式伪窗口。最多只有一个拖放层,并放置在所有其他窗口之上。在多用户系统中,仅显示在拥有该窗口的用户窗口上。
1178    pub const TYPE_DRAG: i32 = Self::FIRST_SYSTEM_WINDOW + 16;
1179
1180    /// 窗口类型:在多用户系统中,从状态栏滑出的面板显示在所有用户的窗口上。这些窗口显示在状态栏和任何 TYPE_STATUS_BAR_PANEL 窗口的顶部。
1181    pub const TYPE_STATUS_BAR_SUB_PANEL: i32 = Self::FIRST_SYSTEM_WINDOW + 17;
1182
1183    /// 窗口类型:(鼠标)指针在多用户系统中显示在所有用户的窗口上。
1184    pub const TYPE_POINTER: i32 = Self::FIRST_SYSTEM_WINDOW + 18;
1185
1186    /// 窗口类型:导航栏(与状态栏不同)在多用户系统中显示在所有用户的窗口上。
1187    pub const TYPE_NAVIGATION_BAR: i32 = Self::FIRST_SYSTEM_WINDOW + 19;
1188
1189    /// 窗口类型:用户更改系统音量时显示的音量级别覆盖/对话框。在多用户系统中,显示在所有用户的窗口上。
1190    pub const TYPE_VOLUME_OVERLAY: i32 = Self::FIRST_SYSTEM_WINDOW + 20;
1191
1192    /// 窗口类型:启动进度对话框,位于所有内容之上。在多用户系统中显示在所有用户的窗口上。
1193    pub const TYPE_BOOT_PROGRESS: i32 = Self::FIRST_SYSTEM_WINDOW + 21;
1194
1195    /// 当系统 UI 栏隐藏时,窗口类型会消耗输入事件。在多用户系统中,显示在所有用户的窗口上。
1196    pub const TYPE_INPUT_CONSUMER: i32 = Self::FIRST_SYSTEM_WINDOW + 22;
1197
1198    /// 窗口类型:导航栏面板(当导航栏与状态栏不同时)在多用户系统中显示在所有用户的窗口上。
1199    pub const TYPE_NAVIGATION_BAR_PANEL: i32 = Self::FIRST_SYSTEM_WINDOW + 24;
1200
1201    /// 窗口类型:显示覆盖窗口。用于模拟辅助显示设备。在多用户系统中显示在所有用户的窗口上。
1202    pub const TYPE_DISPLAY_OVERLAY: i32 = Self::FIRST_SYSTEM_WINDOW + 26;
1203
1204    /// 窗口类型:放大覆盖窗口。用于在启用辅助放大功能时突出显示放大的部分。在多用户系统中显示在所有用户的窗口上。
1205    pub const TYPE_MAGNIFICATION_OVERLAY: i32 = Self::FIRST_SYSTEM_WINDOW + 27;
1206
1207    /// 窗口类型:私人虚拟显示器上方的演示窗口。
1208    pub const TYPE_PRIVATE_PRESENTATION: i32 = Self::FIRST_SYSTEM_WINDOW + 30;
1209
1210    /// 窗口类型:语音交互层的窗口。
1211    pub const TYPE_VOICE_INTERACTION: i32 = Self::FIRST_SYSTEM_WINDOW + 31;
1212
1213    //noinspection SpellCheckingInspection
1214    /// 窗口类型:仅由连接的 android.accessibilityservice.AccessibilityService 覆盖的窗口,用于拦截用户交互,而不会更改无障碍服务可以自检的窗口。具体而言,无障碍服务只能自检视力正常的用户可以与之交互的窗口,也就是说,他们可以触摸这些窗口或在这些窗口中键入内容。例如,如果有一个可触摸的全屏无障碍覆盖,那么它下面的窗口即使被可触摸窗口覆盖,也将是无障碍服务可自检的。
1215    pub const TYPE_ACCESSIBILITY_OVERLAY: i32 = Self::FIRST_SYSTEM_WINDOW + 32;
1216
1217    /// 窗口类型:语音交互层的起始窗口。
1218    pub const TYPE_VOICE_INTERACTION_STARTING: i32 = Self::FIRST_SYSTEM_WINDOW + 33;
1219
1220    /// 用于显示用于调整停靠堆栈大小的句柄的窗口。此窗口归系统进程所有。
1221    pub const TYPE_DOCK_DIVIDER: i32 = Self::FIRST_SYSTEM_WINDOW + 34;
1222
1223    /// 窗口类型:类似于 TYPE_APPLICATION_ATTACHED_DIALOG,但由快速设置图块使用。
1224    pub const TYPE_QS_DIALOG: i32 = Self::FIRST_SYSTEM_WINDOW + 35;
1225
1226    /// 窗口类型:直接显示在键盘保护上方。此层保留用于屏幕截图动画、区域选择和 UI。在多用户系统中,仅显示在拥有用户的窗口上。
1227    pub const TYPE_SCREENSHOT: i32 = Self::FIRST_SYSTEM_WINDOW + 36;
1228
1229    /// 窗口类型:在外部显示器上演示的窗口。
1230    pub const TYPE_PRESENTATION: i32 = Self::FIRST_SYSTEM_WINDOW + 37;
1231
1232    /// 窗口类型:应用叠加窗口显示在所有活动窗口(类型介于 FIRST_APPLICATION_WINDOW 和 LAST_APPLICATION_WINDOW 之间)上方,但位于状态栏或 IME 等关键系统窗口下方。系统可能会随时更改这些窗口的位置、大小或可见性,以减少用户的视觉混乱并管理资源。需要 android.Manifest.permission#SYSTEM_ALERT_WINDOW 权限。系统将调整具有此窗口类型的进程的重要性,以降低低内存终止程序终止它们的可能性。在多用户系统中,仅显示在拥有用户的屏幕上。
1233    pub const TYPE_APPLICATION_OVERLAY: i32 = Self::FIRST_SYSTEM_WINDOW + 38;
1234
1235    /// 窗口类型:用于在其他窗口上方添加辅助功能窗口放大功能的窗口。这会将窗口置于覆盖窗口中。
1236    pub const TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY: i32 = Self::FIRST_SYSTEM_WINDOW + 39;
1237
1238    /// 窗口类型:通知栏和键盘保护。只能有一个状态栏窗口;它位于屏幕顶部,所有其他窗口都向下移动,位于其下方。在多用户系统中,显示在所有用户的窗口上。
1239    pub const TYPE_NOTIFICATION_SHADE: i32 = Self::FIRST_SYSTEM_WINDOW + 40;
1240
1241    /// 窗口类型:用于在屏幕的非常规部分(即屏幕的左侧或底部)显示状态栏。在多用户系统中显示在所有用户的窗口上。
1242    pub const TYPE_STATUS_BAR_ADDITIONAL: i32 = Self::FIRST_SYSTEM_WINDOW + 41;
1243
1244    /// 系统窗口类型的结束。
1245    pub const LAST_SYSTEM_WINDOW: i32 = 2999;
1246
1247    /// 当没有合适的类型时在内部使用。
1248    pub const INVALID_WINDOW_TYPE: i32 = -1;
1249
1250    #[deprecated(note = "这将被忽略,该值在需要时自动设置。")]
1251    pub const MEMORY_TYPE_NORMAL: i32 = 0;
1252
1253    #[deprecated(note = "这将被忽略,该值在需要时自动设置。")]
1254    pub const MEMORY_TYPE_HARDWARE: i32 = 1;
1255
1256    #[deprecated(note = "这将被忽略,该值在需要时自动设置。")]
1257    pub const MEMORY_TYPE_GPU: i32 = 2;
1258
1259    #[deprecated(note = "这将被忽略,该值在需要时自动设置。")]
1260    pub const MEMORY_TYPE_PUSH_BUFFERS: i32 = 3;
1261
1262    /// 窗口标志:只要此窗口对用户可见,就允许在屏幕打开时激活锁定屏幕。这可以单独使用,也可以与 FLAG_KEEP_SCREEN_ON 和/或 FLAG_SHOW_WHEN_LOCKED 结合使用
1263    pub const FLAG_ALLOW_LOCK_WHILE_SCREEN_ON: u32 = 0x00000001;
1264
1265    /// 窗口标志:此窗口后面的所有内容都将变暗。使用 dimAmount 来控制暗淡程度。
1266    pub const FLAG_DIM_BEHIND: u32 = 0x00000002;
1267
1268    /// 窗口标志:为该窗口启用模糊功能。
1269    pub const FLAG_BLUR_BEHIND: u32 = 0x00000004;
1270
1271    /**
1272    窗口标志:此窗口永远不会获得按键输入焦点,因此用户无法向其发送按键或其他按钮事件。这些事件将转至其后面的任何可获得焦点的窗口。此标志还将启用 FLAG_NOT_TOUCH_MODAL,无论是否明确设置。
1273    设置此标志还意味着窗口将不需要与软输入法交互,因此它将按 Z 顺序排列并独立于任何活动输入法定位(通常这意味着它在输入法之上按 Z 顺序排列,因此它可以使用全屏显示其内容并在需要时覆盖输入法。您可以使用 FLAG_ALT_FOCUSABLE_IM 来修改此行为。
1274    */
1275    pub const FLAG_NOT_FOCUSABLE: u32 = 0x00000008;
1276
1277    /**
1278    窗口标志:此窗口永远不能接收触摸事件。
1279    此标志的目的是将触摸留给该窗口下方的某个窗口来处理(按 Z 顺序)。
1280    从Android Build.VERSION_CODES#S开始,出于安全原因,触摸事件通过包含此标志的窗口(即。在该窗口的边界内)将仅在以下一项(或多项)为真的情况下被递送到该触摸消费窗口:
1281    相同的UID:该窗口属于拥有该触摸消费窗口的同一UID。
1282    受信任的窗口:此窗口受信任。可信窗口包括(但不限于)辅助窗口(TYPE_ACCESSIBILITY_OVERLAY)、输入法(TYPE_INPUT_METHOD)和辅助窗口(TYPE_VOICE_INTERACTION)。类型为_APPLICATION_OVERLAY的窗口不受信任,请参见下文。
1283    不可见窗口:该窗口是视图#消失或视图#不可见。
1284    全透明窗口:此窗口的LayoutParams#Alpha等于0。
1285    一个具有足够透明度的SAW窗口:该窗口的类型为_APPLICATION_OVERLAY,其LayoutParams#Alpha小于或等于最大遮挡不透明度(见下文),并且它是触摸路径中该UID的唯一类型为_APPLICATION_OVERLAY的窗口。
1286    具有足够透明度的多个SAW窗口:从该UID开始的触摸路径中的多个重叠的TYPE_APPLICATION_OVERLAY窗口具有低于或等于最大遮挡不透明度的组合遮挡不透明度。有关如何计算该值的信息,请参见下面的组合遮挡不透明度一节。
1287    如果这些情况都不成立,则不会传递触摸,并且会将一条消息记录到LogCAT。
1288    最大遮挡不透明度此值为 0.8。如果应用希望从系统收集此值(而不是对其进行硬编码),则可能需要使用 android.hardware.input.InputManager#getMaximumObscuringOpacityForTouch()。
1289    组合遮挡不透明度
1290    一组窗口的组合遮挡不透明度是通过使用结合和交换运算将该集合中所有窗口的不透明度值组合而获得的,定义为:opacity({A,B}) = 1 - (1 - opacity(A))*(1 - opacity(B)),其中 ` `) = 1 - (1 - opacity(W1)) * ... * (1 - opacity(Wn))
1291    */
1292    pub const FLAG_NOT_TOUCHABLE: u32 = 0x00000010;
1293
1294    /// 窗口标志:即使此窗口可聚焦(其 FLAG_NOT_FOCUSABLE 未设置),也允许将窗口外的任何指针事件发送到其后面的窗口。否则它将自己消耗所有指针事件,无论它们是否在窗口内。
1295    pub const FLAG_NOT_TOUCH_MODAL: u32 = 0x00000020;
1296
1297    /// 窗口标志:设置后,如果按下触摸屏时设备处于休眠状态,您将收到此首次触摸事件。通常,首次触摸事件会被系统消耗,因为用户看不到他们按下的是什么。
1298    #[deprecated(note = "该标志无效。")]
1299    pub const FLAG_TOUCHABLE_WHEN_WAKING: u32 = 0x00000040;
1300
1301    /// 窗口标志:只要此窗口对用户可见,就保持设备屏幕开启且明亮。
1302    pub const FLAG_KEEP_SCREEN_ON: u32 = 0x00000080;
1303
1304    /**
1305    附加窗口的窗口标志:将窗口放置在整个屏幕内,忽略来自父窗口的任何限制。
1306    注意:在具有displayCutout的显示器上,可以将窗口放置,以便在必要时根据LayoutInDisplayCutOutMode避免显示屏区域。
1307    */
1308    pub const FLAG_LAYOUT_IN_SCREEN: u32 = 0x00000100;
1309
1310    /// 窗口标志:允许窗口延伸到屏幕之外。
1311    pub const FLAG_LAYOUT_NO_LIMITS: u32 = 0x00000200;
1312
1313    /**
1314    窗口标志:显示此窗口时隐藏所有屏幕装饰(例如状态栏)。这允许窗口为自己使用整个显示空间 - 当设置了此标志的应用窗口位于顶层时,状态栏将被隐藏。全屏窗口将忽略窗口的 softInputMode 字段的 SOFT_INPUT_ADJUST_RESIZE 值;窗口将保持全屏并且不会调整大小。
1315    您可以通过 android.R.attr#windowFullscreen 属性在您的主题中控制此标志;此属性会在标准全屏主题中自动为您设置,例如 android.R.style#Theme_NoTitleBar_Fullscreen、android.R.style#Theme_Black_NoTitleBar_Fullscreen、android.R.style#Theme_Light_NoTitleBar_Fullscreen、android.R.style#Theme_Holo_NoActionBar_Fullscreen、android.R.style#Theme_Holo_Light_NoActionBar_Fullscreen、android.R.style#Theme_DeviceDefault_NoActionBar_Fullscreen 和 android.R.style#Theme_DeviceDefault_Light_NoActionBar_Fullscreen。
1316    */
1317    #[deprecated(note = "将WindowInsetsController#hide(int)与Type#statusBars()一起使用。")]
1318    pub const FLAG_FULLSCREEN: u32 = 0x00000400;
1319
1320    /// 窗口标志:覆盖 FLAG_FULLSCREEN 并强制显示屏幕装饰(例如状态栏)。
1321    #[deprecated(note = "该值“意外”成为 API,不应被第三方应用程序使用。")]
1322    pub const FLAG_FORCE_NOT_FULLSCREEN: u32 = 0x00000800;
1323
1324    /// 窗口标志:将此窗口合成到屏幕时启用抖动。
1325    #[deprecated(note = "此标志不再使用。")]
1326    pub const FLAG_DITHER: u32 = 0x00001000;
1327
1328    /**
1329    窗口标志:将窗口内容视为安全,防止其出现在屏幕截图中或在非安全显示器上查看。
1330    有关安全表面和安全显示的更多详细信息,请参阅 android.view.Display#FLAG_SECURE。
1331    */
1332    pub const FLAG_SECURE: u32 = 0x00002000;
1333
1334    /// 窗口标志:一种特殊模式,其中布局参数用于在表面合成到屏幕时执行表面的缩放。
1335    pub const FLAG_SCALED: u32 = 0x00004000;
1336
1337    /// 窗口标志:用于用户将屏幕贴在脸上时经常使用的窗口,它将积极过滤事件流以防止在这种情况下意外按压(对于特定窗口可能不是所需的),当检测到这样的事件流时,应用程序将收到一个 CANCEL 运动事件来指示这一点,因此应用程序可以通过在手指释放之前不对事件采取任何操作来相应地处理此问题。
1338    pub const FLAG_IGNORE_CHEEK_PRESSES: u32 = 0x00008000;
1339
1340    /// 窗口标志:一个特殊选项,仅与 FLAG_LAYOUT_IN_SCREEN 结合使用。当请求在屏幕上布局时,您的窗口可能会出现在屏幕装饰(例如状态栏)的上方或后面。通过同时包含此标志,窗口管理器将报告所需的插入矩形,以确保您的内容不会被屏幕装饰覆盖。此标志通常由 Window 为您设置,如 Window#setFlags 中所述
1341    #[deprecated(note = "插图将始终传送到您的应用程序。")]
1342    pub const FLAG_LAYOUT_INSET_DECOR: u32 = 0x00010000;
1343
1344    /**
1345    窗口标志:设置后,反转窗口的输入法可聚焦性。
1346    设置此标志的效果取决于是否设置了 FLAG_NOT_FOCUSABLE:如果未设置 FLAG_NOT_FOCUSABLE,即当窗口可聚焦时,设置此标志将阻止此窗口成为输入法的目标。因此,它将无法与输入法交互,并将位于输入法之上(除非其上方有另一个输入法目标)。
1347    如果设置了 FLAG_NOT_FOCUSABLE,则设置此标志会要求窗口成为输入法目标,即使窗口无法聚焦。因此,它将位于输入法之下。注意:设置了 FLAG_NOT_FOCUSABLE 的窗口无法与输入法交互,无论此标志如何。
1348    */
1349    pub const FLAG_ALT_FOCUSABLE_IM: u32 = 0x00020000;
1350
1351    /// 窗口标志:如果您已设置 FLAG_NOT_TOUCH_MODAL,则可以设置此标志以接收单个特殊 MotionEvent,其动作为 MotionEvent#ACTION_OUTSIDE MotionEvent.ACTION_OUTSIDE,用于发生在窗口外的触摸。请注意,您不会收到完整的向下/移动/向上手势,只会收到第一个向下的位置作为 ACTION_OUTSIDE。
1352    pub const FLAG_WATCH_OUTSIDE_TOUCH: u32 = 0x00040000;
1353
1354    /// 窗口标志:特殊标志,允许在屏幕锁定时显示窗口。这将使应用程序窗口优先于键盘保护或任何其他锁定屏幕。可以与 FLAG_KEEP_SCREEN_ON 一起使用,在显示键盘保护窗口之前直接打开屏幕并显示窗口。可以与 FLAG_DISMISS_KEYGUARD 一起使用,以自动完全关闭非安全键盘保护。此标志仅适用于最顶部的全屏窗口。
1355    #[deprecated(
1356        note = "请使用 android.R.attr#showWhenLocked 或 android.app.Activity#setShowWhenLocked(boolean) 来防止意外的双重生命周期事件。"
1357    )]
1358    pub const FLAG_SHOW_WHEN_LOCKED: u32 = 0x00080000;
1359
1360    /**
1361    窗口标志:要求系统壁纸显示在窗口后面。窗口表面必须是半透明的,才能真正看到其后面的壁纸;此标志仅确保如果此窗口实际上有半透明区域,壁纸表面就会出现。
1362    您可以通过 android.R.attr#windowShowWallpaper 属性在您的主题中控制此标志;此属性会在标准壁纸主题中自动为您设置,例如 android.R.style#Theme_Wallpaper、android.R.style#Theme_Wallpaper_NoTitleBar、android.R.style#Theme_Wallpaper_NoTitleBar_Fullscreen、android.R.style#Theme_Holo_Wallpaper、android.R.style#Theme_Holo_Wallpaper_NoTitleBar、android.R.style#Theme_DeviceDefault_Wallpaper 和 android.R.style#Theme_DeviceDefault_Wallpaper_NoTitleBar。
1363    设置此标志后,发送到此窗口的所有触摸事件也会发送到壁纸,用于与动态壁纸交互。检查 LayoutParams#areWallpaperTouchEventsEnabled(),默认情况下设置为 ` `。在窗口上显示敏感信息时,如果您想禁用将触摸事件发送到壁纸,请使用 LayoutParams#setWallpaperTouchEventsEnabled(boolean)。
1364    */
1365    pub const FLAG_SHOW_WALLPAPER: u32 = 0x00100000;
1366
1367    /// 窗口标志:当设置为添加窗口或使窗口可见时,一旦窗口显示出来,系统就会触发电源管理器的用户活动(就像用户唤醒了设备一样)来打开屏幕。
1368    #[deprecated(
1369        note = "请使用 android.R.attr#turnScreenOn 或 android.app.Activity#setTurnScreenOn(boolean) 来防止意外的双重生命周期事件。"
1370    )]
1371    pub const FLAG_TURN_SCREEN_ON: u32 = 0x00200000;
1372
1373    /// 窗口标志:设置后,仅当窗口不是安全锁定的键盘保护时,才会关闭键盘保护。由于这种键盘保护不是出于安全考虑,因此当用户导航到另一个窗口时,它将永远不会重新出现(与 FLAG_SHOW_WHEN_LOCKED 相反,FLAG_SHOW_WHEN_LOCKED 只会暂时隐藏安全和非安全键盘保护,但确保当用户移动到不隐藏它们的另一个 UI 时它们会重新出现)。如果键盘保护当前处于活动状态且是安全的(需要解锁凭证),则用户仍需要确认它才能看到此窗口,除非也设置了 FLAG_SHOW_WHEN_LOCKED。
1374    #[deprecated(
1375        note = "改用 FLAG_SHOW_WHEN_LOCKED 或 KeyguardManager#requestDismissKeyguard。由于只要窗口上带有此标志的活动处于焦点状态,keyguard 就会一直被关闭,因此 keyguard 无法防止意外触摸屏幕,这是不希望的。"
1376    )]
1377    pub const FLAG_DISMISS_KEYGUARD: u32 = 0x00400000;
1378
1379    /// 窗口标志:设置后,窗口将接受超出其范围的触摸事件,并将其发送到也支持拆分触摸的其他窗口。如果未设置此标志,则第一个向下的指针将确定所有后续触摸将转到哪个窗口,直到所有指针都向上移动。如果设置了此标志,则每个向下的指针(不一定是第一个)将确定该指针的所有后续触摸将转到哪个窗口,直到该指针向上移动,从而允许将多个指针的触摸拆分到多个窗口。
1380    pub const FLAG_SPLIT_TOUCH: u32 = 0x00800000;
1381
1382    /**
1383    指示该窗口是否应加速硬件。请求硬件加速并不能保证它会发生。
1384    此标志只能通过编程控制以启用硬件加速。要通过编程为给定窗口启用硬件加速,请执行以下操作:
1385    Window w = activity.getWindow(); // 在 Activity 的 onCreate() 中
1386    例如
1387    w.setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
1388    重要的是要记住,必须在设置活动或对话框的内容视图之前设置此标志。
1389    在使用 android.R.attr#hardwareAccelerated 在清单中启用硬件加速后,此标志不能用于禁用硬件加速。如果您需要有选择地以编程方式禁用硬件加速(例如用于自动测试),请确保在清单中将其关闭,并在需要时使用上述方法在活动或对话框中启用它。
1390    如果活动或应用程序上的 android.R.attr#hardwareAccelerated android:hardwareAccelerated XML 属性设置为 true,则系统会自动设置此标志。
1391    */
1392    pub const FLAG_HARDWARE_ACCELERATED: u32 = 0x01000000;
1393
1394    //noinspection SpellCheckingInspection
1395    /**
1396    窗口标志:允许窗口内容延伸到屏幕的过扫描区域(如果有)。窗口仍应正确定位其内容以将过扫描区域考虑在内。
1397    可以通过android.R.attr#windowOverscan属性在您的主题中控制该标志;该属性是在标准过扫描主题中为您自动设置的,例如android.R.style#Theme_Holo_NoActionBar_Overscan、android.R.style#Theme_Holo_Light_NoActionBar_Overscan、android.R.style#Theme_DeviceDefault_NoActionBar_Overscan和android.R.style#Theme_DeviceDefault_Light_NoActionBar_Overscan。
1398    当为窗口启用此标志时,其正常内容可能会被显示屏的过扫描区域在一定程度上遮挡。为了确保用户可以看到该内容的关键部分,您可以使用 View#setFitsSystemWindows(boolean) View.setFitsSystemWindows(boolean) 在视图层次结构中设置应应用适当偏移的点。(这可以通过直接调用此函数、使用视图层次结构中的 android.R.attr#fitsSystemWindows 属性或实现您自己的 View#fitSystemWindows(android.graphics.Rect) View.fitSystemWindows(Rect) 方法来完成)。
1399    这种定位内容元素的机制与布局和 View#setSystemUiVisibility(int) View.setSystemUiVisibility(int) 的等效用法相同;这里有一个示例布局,它将在设置此过扫描标志的情况下正确定位其 UI 元素:
1400    development/samples/ApiDemos/res/layout/overscan_activity.xml 完整版
1401    */
1402    #[deprecated(note = "从Android 11开始,任何Android产品都不再设置过范围的区域。")]
1403    pub const FLAG_LAYOUT_IN_OVERSCAN: u32 = 0x02000000;
1404
1405    /**
1406    窗口标志:请求一个半透明的状态栏,并带有系统提供的最少的背景保护。
1407    您可以通过 android.R.attr#windowTranslucentStatus 属性在您的主题中控制此标志;此属性会在标准半透明装饰主题中自动为您设置,例如 android.R.style#Theme_Holo_NoActionBar_TranslucentDecor、android.R.style#Theme_Holo_Light_NoActionBar_TranslucentDecor、android.R.style#Theme_DeviceDefault_NoActionBar_TranslucentDecor 和 android.R.style#Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor。
1408    当为窗口启用此标志时,它会自动设置系统 UI 可见性标志 View#SYSTEM_UI_FLAG_LAYOUT_STABLE 和 View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN。
1409    注意:对于支持 android.content.pm.PackageManager#FEATURE_AUTOMOTIVE 的设备,可以忽略此标志。
1410    */
1411    #[deprecated(note = "改用半透明颜色的 Window#setStatusBarColor(int)。")]
1412    pub const FLAG_TRANSLUCENT_STATUS: u32 = 0x04000000;
1413
1414    /**
1415    窗口标志:请求一个半透明的导航栏,并带有系统提供的最少的背景保护。
1416    您可以通过 android.R.attr#windowTranslucentNavigation 属性在您的主题中控制此标志;此属性会在标准半透明装饰主题中自动为您设置,例如 android.R.style#Theme_Holo_NoActionBar_TranslucentDecor、android.R.style#Theme_Holo_Light_NoActionBar_TranslucentDecor、android.R.style#Theme_DeviceDefault_NoActionBar_TranslucentDecor 和 android.R.style#Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor。
1417    当为窗口启用此标志时,它会自动设置系统 UI 可见性标志 View#SYSTEM_UI_FLAG_LAYOUT_STABLE 和 View#SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION。
1418    注意:对于支持 android.content.pm.PackageManager#FEATURE_AUTOMOTIVE 的设备,汽车制造商可以禁用此标志。
1419    */
1420    #[deprecated(note = "改用半透明颜色的 Window#setNavigationBarColor(int)。")]
1421    pub const FLAG_TRANSLUCENT_NAVIGATION: u32 = 0x08000000;
1422
1423    /// 本地焦点模式窗口的标志。本地焦点模式窗口可以使用 Window#setLocalFocus(boolean, boolean) 独立于窗口管理器控制焦点。通常,此模式下的窗口不会从窗口管理器获取触摸/按键事件,而只能通过使用 Window#injectInputEvent(InputEvent) 的本地注入来获取事件。
1424    pub const FLAG_LOCAL_FOCUS_MODE: u32 = 0x10000000;
1425
1426    /**
1427    窗口标志:允许触摸在手势过程中从一个窗口滑入相邻窗口,而不是在手势持续期间被捕获。
1428    此标志仅更改此窗口的触摸焦点行为。触摸可以滑出窗口但不一定滑回(除非具有触摸焦点的其他窗口允许)。
1429    */
1430    pub const FLAG_SLIPPERY: u32 = 0x20000000;
1431
1432    /// 窗口标志:当请求使用附加窗口进行布局时,附加窗口可能会与父窗口的屏幕装饰(例如导航栏)重叠。通过包含此标志,窗口管理器将在父窗口的装饰框架内布局附加窗口,使其不与屏幕装饰重叠。
1433    #[deprecated(note = "使用 setFitInsetsTypes(int) 来确定附加窗口是否与系统栏重叠。")]
1434    pub const FLAG_LAYOUT_ATTACHED_IN_DECOR: u32 = 0x40000000;
1435
1436    /// 标志,指示此窗口负责绘制系统栏的背景。如果设置,系统栏将以透明背景绘制,并且此窗口中的相应区域将用Window#getStatusBarColor()和Window#getNavationBarColor()中指定的颜色填充。
1437    pub const FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS: u32 = 0x80000000;
1438
1439    /// 在系统进程中,我们全局不使用硬件加速,因为那里有许多线程在处理 UI,它们之间会发生冲突。如果 UI 的某些部分确实需要使用硬件加速,可以设置此标志来强制使用。这基本上是针对锁屏的。如果其他人也使用它,那么你可能错了。
1440    pub const PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED: i32 = 1 << 1;
1441
1442    /// 默认情况下,壁纸在滚动时会发送新的偏移量。如果壁纸没有执行任何有用的操作(它们不会影响壁纸滚动操作),则可以通过调用 android.service.wallpaper.WallpaperService.Engine#setOffsetNotificationsEnabled(boolean) 选择跳过这些通知。
1443    pub const PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS: i32 = 1 << 2;
1444
1445    /// 当设置 LayoutParams#TYPE_APPLICATION_OVERLAY 时,窗口将保持可见,即使为另一个可见窗口设置了 LayoutParams#SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS。
1446    pub const PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY: i32 = 1 << 3;
1447
1448    /// 在多用户系统中,如果设置了此标志并且所有者是系统进程,则此窗口将显示在所有用户屏幕上。这将覆盖通常仅显示在所有者用户的屏幕上的窗口类型的默认行为。请参阅每种窗口类型以确定其默认行为。
1449    pub const SYSTEM_FLAG_SHOW_FOR_ALL_USERS: i32 = 1 << 4;
1450
1451    /// 标记以允许此窗口具有不受限制的手势排除。
1452    pub const PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION: i32 = 1 << 5;
1453
1454    /// 永远不要为窗口的位置变化制作动画。
1455    pub const PRIVATE_FLAG_NO_MOVE_ANIMATION: i32 = 1 << 6;
1456
1457    /// 窗口标志:特殊标志,用于限制窗口大小为原始大小([320x480] x 密度)。用于为在兼容模式下运行的应用程序创建窗口。
1458    pub const PRIVATE_FLAG_COMPATIBLE_WINDOW: i32 = 1 << 7;
1459
1460    /// 窗口标志:用于系统对话框的特殊选项。设置此标志后,窗口在创建时将无条件地要求焦点。
1461    pub const PRIVATE_FLAG_SYSTEM_ERROR: i32 = 1 << 8;
1462
1463    /// 标记以指示仅在必要时才测量窗口的视图层次结构。如果窗口大小可以通过 LayoutParams 获知,我们可以使用该大小来重新布局窗口,并且我们不必在布局视图之前测量视图层次结构。这减少了执行测量的机会。
1464    pub const PRIVATE_FLAG_OPTIMIZE_MEASURE: i32 = 1 << 9;
1465
1466    /// 阻止当前窗口后面的壁纸接收触摸事件的标志。
1467    pub const PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS: i32 = 1 << 10;
1468
1469    /// 强制状态栏窗口始终可见的标志。如果在设置此标志时状态栏处于隐藏状态,则将再次显示。这只能通过 LayoutParams#TYPE_STATUS_BAR 设置。
1470    pub const PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR: i32 = 1 << 11;
1471
1472    /// 标记表示窗口框架应为添加显示切口框架的请求框架。仅当给定的特定尺寸小于父框架且窗口覆盖显示切口时才适用。扩展框架不会大于父框架。
1473    pub const PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT: i32 = 1 << 12;
1474
1475    /// 此标记将使窗口忽略应用程序可见性,而是完全依赖装饰视图可见性来确定窗口可见性。最近使用此功能在启动应用程序后继续绘制。
1476    pub const PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY: i32 = 1 << 13;
1477
1478    /// 标志表明无论当前的窗口模式配置如何,该子窗口都应始终布局在父框架中。
1479    pub const PRIVATE_FLAG_LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME: i32 = 1 << 14;
1480
1481    /// 标志表明此窗口始终绘制状态栏背景,无论其他标志是什么。
1482    pub const PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS: i32 = 1 << 15;
1483
1484    /// 标记用于指示如果设备支持,此窗口需要持续性能模式。
1485    pub const PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE: i32 = 1 << 16;
1486
1487    /// 标志,用于指示当此窗口可见时,应用程序进程添加的属于TYPE_TOAST类型的任何窗口或需要android.app.AppOpsManager#OP_SYSTEM_ALERT_WINDOW权限的窗口都应被隐藏。
1488    pub const SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS: i32 = 1 << 19;
1489
1490    /// 表示此窗口是某些设备上存在的圆角覆盖,这意味着它将被排除在外:屏幕截图、屏幕放大和镜像。
1491    pub const PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY: i32 = 1 << 20;
1492
1493    //noinspection SpellCheckingInspection
1494    /**
1495    标记指示在未缩放的屏幕坐标上计算可放大区域时将排除此窗口,这可以避免放大边界上的剪切。它应该用于不可放大的叠加层。
1496    注意与 PRIVATE_FLAG_NOT_MAGNIFIABLE 不同,此标志不影响放大功能。如果您希望窗口不可放大且不导致剪切,则需要将两者结合起来。
1497    */
1498    pub const PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION: i32 = 1 << 21;
1499
1500    //noinspection SpellCheckingInspection
1501    /**
1502    标记以防止窗口被辅助功能放大镜放大。
1503    TODO(b/190623172): 这只是暂时的解决办法,需要寻找其他方法。
1504    */
1505    pub const PRIVATE_FLAG_NOT_MAGNIFIABLE: i32 = 1 << 22;
1506
1507    /// 标记表示状态栏窗口处于强制显示导航栏的状态,除非导航栏窗口明确设置为 View#GONE。仅当通过 LayoutParams#TYPE_STATUS_BAR 设置时才会生效。
1508    pub const PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION: i32 = 1 << 23;
1509
1510    /// 标志表明窗口与颜色空间无关,并且颜色可以解释为任何颜色空间。
1511    pub const PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC: i32 = 1 << 24;
1512
1513    /// 标记请求创建 BLAST(缓冲区作为 LayerState)层。如果未指定,客户端将收到 BufferQueue 层。
1514    pub const PRIVATE_FLAG_USE_BLAST: i32 = 1 << 25;
1515
1516    /// 标志表示窗口正在控制系统栏的外观。因此我们不需要通过读取其系统 UI 标志来调整它以实现兼容性。
1517    pub const PRIVATE_FLAG_APPEARANCE_CONTROLLED: i32 = 1 << 26;
1518
1519    /// 标志表示窗口正在控制系统栏的行为。因此我们不需要通过读取其窗口标志或系统 UI 标志来调整它以实现兼容性。
1520    pub const PRIVATE_FLAG_BEHAVIOR_CONTROLLED: i32 = 1 << 27;
1521
1522    /// 标记表示窗口正在自行控制如何适应窗口插入。因此我们无需调整其属性来适应窗口插入。
1523    pub const PRIVATE_FLAG_FIT_INSETS_CONTROLLED: i32 = 1 << 28;
1524
1525    /// 标记以表明该窗口是受信任的覆盖。
1526    pub const PRIVATE_FLAG_TRUSTED_OVERLAY: i32 = 1 << 29;
1527
1528    /// 标志表明窗口的父框架应该由 IME 插入。
1529    pub const PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME: i32 = 1 << 30;
1530
1531    /**
1532    标记表示我们想要拦截和处理所有用户的全局拖放。此标记允许窗口即使不可见也考虑拖放事件,并将接收系统中所有活动用户的拖放。
1533    使用此标志向窗口提供附加数据,包括 ClipData(包含具有 DragEvent#ACTION_DRAG_STARTED 事件的所有项目)和具有 DragEvent#ACTION_DROP 事件的实际拖动表面。如果窗口消耗了拖放,则拖动表面的清理(作为 DragEvent#ACTION_DROP 的一部分提供)将由窗口承担。
1534    */
1535    pub const PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP: i32 = 1 << 31;
1536
1537    /// 确定此窗口的软输入区域所需的可见性状态的位的 softInputMode 掩码。
1538    pub const SOFT_INPUT_MASK_STATE: i32 = 0x0f;
1539
1540    /// softInputMode 的可见性状态:未指定状态。当窗口获得焦点时,系统可能会显示或隐藏软件键盘,以获得更好的用户体验。
1541    pub const SOFT_INPUT_STATE_UNSPECIFIED: i32 = 0;
1542
1543    /// softInputMode 的可见性状态:请不要改变软输入区域的状态。
1544    pub const SOFT_INPUT_STATE_UNCHANGED: i32 = 1;
1545
1546    /// SoftInputMode的可见性状态:通常合适时(用户向前导航到您的窗口时),请隐藏任何软输入区域)。
1547    pub const SOFT_INPUT_STATE_HIDDEN: i32 = 2;
1548
1549    /// softInputMode 的可见性状态:当此窗口获得焦点时,请始终隐藏任何软输入区域。
1550    pub const SOFT_INPUT_STATE_ALWAYS_HIDDEN: i32 = 3;
1551
1552    /**
1553    softInputMode 的可见性状态:请在正常适当的时候显示软输入区域(当用户向前导航到您的窗口时)。
1554    对于以 android.os.Build.VERSION_CODES#P 及更高版本为目标的应用程序,除非存在一个焦点视图,并且在窗口聚焦时从 View#onCheckIsTextEditor() 返回“ ” ,否则此标志将被忽略。
1555    */
1556    pub const SOFT_INPUT_STATE_VISIBLE: i32 = 4;
1557
1558    /**
1559    SoftInputMode的可见性状态:当此窗口接收输入焦点时,请始终使软输入区域可见。
1560    对于以 android.os.Build.VERSION_CODES#P 及更高版本为目标的应用程序,除非存在一个焦点视图,并且在窗口聚焦时从 View#onCheckIsTextEditor() 返回“ ” ,否则此标志将被忽略。
1561    */
1562    pub const SOFT_INPUT_STATE_ALWAYS_VISIBLE: i32 = 5;
1563
1564    /// 软输入模式 (softInputMode) 的掩码,用于确定应如何调整窗口以适应软输入窗口。
1565    pub const SOFT_INPUT_MASK_ADJUST: i32 = 0xf0;
1566
1567    /// softInputMode 的调整选项:未指定。系统将根据窗口的内容尝试选择其中一个。
1568    pub const SOFT_INPUT_ADJUST_UNSPECIFIED: i32 = 0x00;
1569
1570    /// softInputMode 的调整选项:设置为允许在显示输入法时调整窗口大小,以便输入法不会覆盖其内容。这不能与 SOFT_INPUT_ADJUST_PAN 结合使用;如果两者都未设置,则系统将尝试根据窗口的内容选择其中一个。如果窗口的布局参数标志包括 FLAG_FULLSCREEN,则将忽略 softInputMode 的此值;窗口不会调整大小,但会保持全屏显示。
1571    #[deprecated(
1572        note = "使用 ` ` 调用 Window#setDecorFitsSystemWindows(boolean) 并在根内容视图上安装一个适合 Type#ime() 类型插入的 OnApplyWindowInsetsListener。"
1573    )]
1574    pub const SOFT_INPUT_ADJUST_RESIZE: i32 = 0x10;
1575
1576    /// softInputMode 的调整选项:设置为在显示输入法时让窗口平移,这样它就不需要处理调整大小,而只需由框架平移以确保当前输入焦点可见。这不能与 SOFT_INPUT_ADJUST_RESIZE 结合使用;如果两者都未设置,则系统将尝试根据窗口的内容选择其中一个。
1577    pub const SOFT_INPUT_ADJUST_PAN: i32 = 0x20;
1578
1579    /// softInputMode 的调整选项:设置为不根据显示的输入法调整窗口。窗口不会调整大小,也不会平移以使其焦点可见。
1580    pub const SOFT_INPUT_ADJUST_NOTHING: i32 = 0x30;
1581
1582    /// for softInputMode:设置用户将向前导航到窗口时。 通常,该系统会自动为您设置,尽管您可能需要在自己显示窗口时在某些情况下设置它。 显示窗口后,该标志将始终自动清除。
1583    pub const SOFT_INPUT_IS_FORWARD_NAVIGATION: i32 = 0x100;
1584
1585    /// screenBrightness 和 buttonBrightness 的默认值表示此窗口的亮度值不会被覆盖,而应该使用正常的亮度策略。
1586    pub const BRIGHTNESS_OVERRIDE_NONE: f32 = -1.0;
1587
1588    /// screenBrightness 和 buttonBrightness 的值表示当此窗口位于前面时,屏幕或按钮背光亮度应设置为最低值。
1589    pub const BRIGHTNESS_OVERRIDE_OFF: f32 = 0.0;
1590
1591    /// screenBrightness 和 buttonBrightness 的值表示当此窗口位于前面时,屏幕或按钮背光亮度应设置为最高值。
1592    pub const BRIGHTNESS_OVERRIDE_FULL: f32 = 1.0;
1593
1594    /// 未指定 rotationAnimation 的值,表示缺乏偏好。
1595    pub const ROTATION_ANIMATION_UNSPECIFIED: i32 = -1;
1596
1597    /// rotationAnimation 的值指定此窗口在旋转后将在视觉上旋转进或旋转出。
1598    pub const ROTATION_ANIMATION_ROTATE: i32 = 0;
1599
1600    //noinspection SpellCheckingInspection
1601    /// rotationAnimation 的值指定此窗口在旋转后淡入或淡出。
1602    pub const ROTATION_ANIMATION_CROSSFADE: i32 = 1;
1603
1604    //noinspection SpellCheckingInspection
1605    /// rotationAnimation 的值指定此窗口在旋转后将立即消失或出现。
1606    pub const ROTATION_ANIMATION_JUMPCUT: i32 = 2;
1607
1608    //noinspection SpellCheckingInspection
1609    /// rotationAnimation 的值用于指定无缝旋转模式。其工作原理与 JUMPCUT 类似,但如果无法在不暂停屏幕的情况下应用旋转,则会回退到 CROSSFADE。例如,这对于相机应用来说是理想的选择,这些应用不希望取景器内容旋转或淡入淡出(而是无缝),但在无法应用无缝旋转的应用转换场景中也不希望出现 ROTATION_ANIMATION_JUMPCUT。
1610    pub const ROTATION_ANIMATION_SEAMLESS: i32 = 3;
1611
1612    /// 指示此窗口是否希望HDR转换被禁用。
1613    pub const DISPLAY_FLAG_DISABLE_HDR_CONVERSION: i32 = 1 << 0;
1614
1615    /**
1616    仅当 DisplayCutout 完全包含在系统栏内或 DisplayCutout 深度不超过 16 dp 时,窗口才可以延伸到 DisplayCutout 区域,但这取决于 OEM 的选择。否则,窗口的布局不会与 DisplayCutout 区域重叠。
1617    实际上,这意味着如果窗口未设置 FLAG_FULLSCREEN 或 View#SYSTEM_UI_FLAG_FULLSCREEN,则如果切口位于顶部边缘,则它可以延伸到纵向切口区域。对于 View#SYSTEM_UI_FLAG_HIDE_NAVIGATION 和屏幕底部的切口,情况也是如此。否则(即全屏或横向),它会被布置成不与切口区域重叠。
1618    通常采取的不与状态栏和导航栏重叠的预防措施足以确保没有重要内容与 DisplayCutout 重叠。
1619    注意:当 DisplayCutout 与系统栏位于不同侧时,OEM 可以选择让窗口始终延伸到 DisplayCutout 区域,无论是否设置了凹口标志,前提是 DisplayCutout 与窗口的重叠部分最多为 16dp。在这种情况下,OEM 必须为用户提供选择加入/退出的选项。
1620    android:windowLayoutInDisplayCutoutMode
1621    */
1622    pub const LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT: i32 = 0;
1623
1624    /**
1625    窗口始终可以延伸到屏幕短边的 DisplayCutout 区域。
1626    窗口永远不会延伸到屏幕长边上的 DisplayCutout 区域,除非 DisplayCutout 的深度不超过 16 dp,但这取决于 OEM 的选择。
1627    注意:OEM 可以选择让窗口延伸到长边的 DisplayCutout 区域,但前提是凹口与窗口的重叠部分最多为 16dp。在这种情况下,OEM 必须为用户提供选择加入/退出的选项。
1628    窗口必须确保没有重要内容与DisplayCutout重叠。
1629    在此模式下,无论窗口是否隐藏了系统栏,窗口都会在纵向和横向显示屏短边的切口下延伸:
1630    角落中的切口被视为位于短边:
1631    另一方面,如果切口位于显示器的长边上,则会应用信箱,使得窗口不会延伸到任一长边的切口中:
1632    注意:Android 可能不允许内容视图在视图级别与系统栏重叠。要覆盖此行为并允许内容能够延伸到切口区域,请使用 ` ` 调用 Window#setDecorFitsSystemWindows(boolean)。
1633    android:windowLayoutInDisplayCutoutMode
1634    */
1635    pub const LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES: i32 = 1;
1636
1637    /**
1638    窗口永远不会与DisplayCutout区域重叠。
1639    这应该与暂时设置 View#SYSTEM_UI_FLAG_FULLSCREEN 或 View#SYSTEM_UI_FLAG_HIDE_NAVIGATION 的窗口一起使用,以避免在设置或清除相应标志时重新布局窗口。
1640    android:windowLayoutInDisplayCutoutMode
1641    */
1642    pub const LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER: i32 = 2;
1643
1644    /**
1645    窗口始终可以延伸到屏幕所有边缘的 DisplayCutout 区域。
1646    窗口必须确保没有重要内容与DisplayCutout重叠。
1647    在这种模式下,无论窗口是否隐藏了系统栏,窗口都会在纵向和横向显示屏的所有边缘的切口下延伸。
1648    注意:Android 可能不允许内容视图在视图级别与系统栏重叠。要覆盖此行为并允许内容能够延伸到切口区域,请使用 ` ` 调用 Window#setDecorFitsSystemWindows(boolean)。
1649    android:windowLayoutInDisplayCutoutMode
1650    */
1651    pub const LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS: i32 = 3;
1652
1653    /// 不为该窗口构建输入通道。因此该通道将无法接收输入。
1654    pub const INPUT_FEATURE_NO_INPUT_CHANNEL: i32 = 1 << 0;
1655
1656    /// 当此窗口获得焦点时,不会针对所有输入事件调用用户活动,因此应用程序必须自行执行此操作。仅应由键盘锁和手机应用程序使用。仅应由键盘锁和手机应用程序使用。
1657    pub const INPUT_FEATURE_DISABLE_USER_ACTIVITY: i32 = 1 << 1;
1658
1659    /// 输入侦测窗口。此窗口将接收其可触摸区域内的所有指针事件,但不会阻止事件按 Z 顺序发送到其下方的其他窗口。输入事件将分派到事件坐标处顶部非侦测窗口上方的所有侦测窗口。
1660    pub const INPUT_FEATURE_SPY: i32 = 1 << 2;
1661
1662    pub const LAYOUT_CHANGED: i32 = 1 << 0;
1663
1664    pub const TYPE_CHANGED: i32 = 1 << 1;
1665
1666    pub const FLAGS_CHANGED: i32 = 1 << 2;
1667
1668    pub const FORMAT_CHANGED: i32 = 1 << 3;
1669
1670    pub const ANIMATION_CHANGED: i32 = 1 << 4;
1671
1672    pub const DIM_AMOUNT_CHANGED: i32 = 1 << 5;
1673
1674    pub const TITLE_CHANGED: i32 = 1 << 6;
1675
1676    pub const ALPHA_CHANGED: i32 = 1 << 7;
1677
1678    pub const MEMORY_TYPE_CHANGED: i32 = 1 << 8;
1679
1680    pub const SOFT_INPUT_MODE_CHANGED: i32 = 1 << 9;
1681
1682    pub const SCREEN_ORIENTATION_CHANGED: i32 = 1 << 10;
1683
1684    pub const SCREEN_BRIGHTNESS_CHANGED: i32 = 1 << 11;
1685
1686    pub const ROTATION_ANIMATION_CHANGED: i32 = 1 << 12;
1687
1688    pub const BUTTON_BRIGHTNESS_CHANGED: i32 = 1 << 13;
1689
1690    pub const SYSTEM_UI_VISIBILITY_CHANGED: i32 = 1 << 14;
1691
1692    pub const SYSTEM_UI_LISTENER_CHANGED: i32 = 1 << 15;
1693
1694    pub const INPUT_FEATURES_CHANGED: i32 = 1 << 16;
1695
1696    pub const PRIVATE_FLAGS_CHANGED: i32 = 1 << 17;
1697
1698    pub const USER_ACTIVITY_TIMEOUT_CHANGED: i32 = 1 << 18;
1699
1700    pub const TRANSLUCENT_FLAGS_CHANGED: i32 = 1 << 19;
1701
1702    pub const SURFACE_INSETS_CHANGED: i32 = 1 << 20;
1703
1704    pub const PREFERRED_REFRESH_RATE_CHANGED: i32 = 1 << 21;
1705
1706    pub const DISPLAY_FLAGS_CHANGED: i32 = 1 << 22;
1707
1708    pub const PREFERRED_DISPLAY_MODE_ID: i32 = 1 << 23;
1709
1710    pub const ACCESSIBILITY_ANCHOR_CHANGED: i32 = 1 << 24;
1711
1712    pub const ACCESSIBILITY_TITLE_CHANGED: i32 = 1 << 25;
1713
1714    pub const COLOR_MODE_CHANGED: i32 = 1 << 26;
1715
1716    pub const INSET_FLAGS_CHANGED: i32 = 1 << 27;
1717
1718    pub const MINIMAL_POST_PROCESSING_PREFERENCE_CHANGED: i32 = 1 << 28;
1719
1720    pub const BLUR_BEHIND_RADIUS_CHANGED: i32 = 1 << 29;
1721
1722    pub const PREFERRED_MIN_DISPLAY_REFRESH_RATE: i32 = 1 << 30;
1723
1724    pub const PREFERRED_MAX_DISPLAY_REFRESH_RATE: i32 = 1 << 31;
1725
1726    /// 此窗口的 X 位置。使用默认重力时,它会被忽略。使用 Gravity.LEFT 或 Gravity.START 或 Gravity.RIGHT 或 Gravity.END 时,它会提供与给定边缘的偏移量。
1727    #[java_field]
1728    pub fn get_x(&self) -> i32 {}
1729
1730    /// 此窗口的 X 位置。使用默认重力时,它会被忽略。使用 Gravity.LEFT 或 Gravity.START 或 Gravity.RIGHT 或 Gravity.END 时,它会提供与给定边缘的偏移量。
1731    #[java_field]
1732    pub fn set_x(&self, value: i32) {}
1733
1734    /// 此窗口的 Y 位置。使用默认重力时,它会被忽略。使用 Gravity.TOP 或 Gravity.BOTTOM 时,它会提供与给定边缘的偏移量。
1735    #[java_field]
1736    pub fn get_y(&self) -> i32 {}
1737
1738    /// 此窗口的 Y 位置。使用默认重力时,它会被忽略。使用 Gravity.TOP 或 Gravity.BOTTOM 时,它会提供与给定边缘的偏移量。
1739    #[java_field]
1740    pub fn set_y(&self, value: i32) {}
1741
1742    /// 指示将为与这些 LayoutParams 关联的视图水平分配多少额外空间。如果视图不应拉伸,请指定 0。否则,额外的像素将在权重大于 0 的所有视图之间按比例分配。
1743    #[java_field]
1744    pub fn get_horizontal_weight(&self) -> f32 {}
1745
1746    /// 指示将为与这些 LayoutParams 关联的视图水平分配多少额外空间。如果视图不应拉伸,请指定 0。否则,额外的像素将在权重大于 0 的所有视图之间按比例分配。
1747    #[java_field]
1748    pub fn set_horizontal_weight(&self, value: f32) {}
1749
1750    /// 指示将为与这些 LayoutParams 关联的视图垂直分配多少额外空间。如果视图不应拉伸,请指定 0。否则,额外的像素将在权重大于 0 的所有视图之间按比例分配。
1751    #[java_field]
1752    pub fn get_vertical_weight(&self) -> f32 {}
1753
1754    /// 指示将为与这些 LayoutParams 关联的视图垂直分配多少额外空间。如果视图不应拉伸,请指定 0。否则,额外的像素将在权重大于 0 的所有视图之间按比例分配。
1755    #[java_field]
1756    pub fn set_vertical_weight(&self, value: f32) {}
1757
1758    /// 窗口的一般类型。窗口类型主要有三类:
1759    /// 应用程序窗口(范围从 FIRST_APPLICATION_WINDOW 到 LAST_APPLICATION_WINDOW)是普通的顶层应用程序窗口。对于这些类型的窗口,必须将令牌设置为它们所属活动的令牌(如果令牌为空,通常会为您完成此操作)。
1760    /// 子窗口(范围从 FIRST_SUB_WINDOW 到 LAST_SUB_WINDOW)与另一个顶层窗口相关联。对于这些类型的窗口,令牌必须是它所附加到的窗口的令牌。
1761    /// 系统窗口(范围从 FIRST_SYSTEM_WINDOW 到 LAST_SYSTEM_WINDOW)是供系统用于特定目的的特殊类型的窗口。它们通常不应由应用程序使用,并且使用它们需要特殊权限。
1762    #[java_field]
1763    pub fn get_type(&self) -> i32 {}
1764
1765    /// 窗口的一般类型。窗口类型主要有三类:
1766    /// 应用程序窗口(范围从 FIRST_APPLICATION_WINDOW 到 LAST_APPLICATION_WINDOW)是普通的顶层应用程序窗口。对于这些类型的窗口,必须将令牌设置为它们所属活动的令牌(如果令牌为空,通常会为您完成此操作)。
1767    /// 子窗口(范围从 FIRST_SUB_WINDOW 到 LAST_SUB_WINDOW)与另一个顶层窗口相关联。对于这些类型的窗口,令牌必须是它所附加到的窗口的令牌。
1768    /// 系统窗口(范围从 FIRST_SYSTEM_WINDOW 到 LAST_SYSTEM_WINDOW)是供系统用于特定目的的特殊类型的窗口。它们通常不应由应用程序使用,并且使用它们需要特殊权限。
1769    #[java_field]
1770    pub fn set_type(&self, value: i32) {}
1771
1772    /**
1773    如果窗口类型是警报窗口,则返回 true。
1774    `type` 窗口类型。如果窗口类型是警报窗口,则返回 true。
1775    */
1776    #[java_method]
1777    pub fn is_system_alert_window_type(r#type: i32) {}
1778
1779    #[deprecated(note = "这被忽略了")]
1780    #[java_field]
1781    pub fn get_memory_type(&self) -> i32 {}
1782
1783    #[deprecated(note = "这被忽略了")]
1784    #[java_field]
1785    pub fn set_memory_type(&self, value: i32) {}
1786
1787    /// 各种行为选项/标志。默认为无。
1788    #[java_field]
1789    pub fn get_flags(&self) -> u32 {}
1790
1791    /// 各种行为选项/标志。默认为无。
1792    #[java_field]
1793    pub fn set_flags(&self, value: u32) {}
1794
1795    /// 控制平台私有的标志。
1796    #[java_field]
1797    pub fn get_private_flags(&self) -> i32 {}
1798
1799    /// 控制平台私有的标志。
1800    #[java_field]
1801    pub fn set_private_flags(&self, value: i32) {}
1802
1803    /**
1804    给定一组特定的窗口管理器标志,确定此类窗口在获得焦点时是否可以成为输入法的目标。具体来说,这会检查 FLAG_NOT_FOCUSABLE 和 FLAG_ALT_FOCUSABLE_IM 标志,如果两者的组合对应于可以使用输入法的窗口,则返回 true。
1805    返回:如果具有给定标志的窗口能够使用输入法,则返回 true,否则返回 false。
1806    `flags` 当前窗口管理器标志。
1807    */
1808    #[java_method]
1809    pub fn may_use_input_method(flags: i32) -> bool {}
1810
1811    /// 任何软输入区域所需的操作模式。可以是以下任意组合:
1812    /// 可见性状态之一 SOFT_INPUT_STATE_UNSPECIFIED、SOFT_INPUT_STATE_UNCHANGED、SOFT_INPUT_STATE_HIDDEN、SOFT_INPUT_STATE_ALWAYS_HIDDEN、SOFT_INPUT_STATE_VISIBLE 或 SOFT_INPUT_STATE_ALWAYS_VISIBLE。
1813    /// 调整选项之一 SOFT_INPUT_ADJUST_UNSPECIFIED、SOFT_INPUT_ADJUST_RESIZE、SOFT_INPUT_ADJUST_PAN 或 SOFT_INPUT_ADJUST_NOTHING。
1814    /// 此标志可以在您的主题中通过 android.R.attr.windowSoftInputMode 属性进行控制。
1815    #[java_field]
1816    pub fn get_soft_input_mode(&self) -> i32 {}
1817
1818    /// 任何软输入区域所需的操作模式。可以是以下任意组合:
1819    /// 可见性状态之一 SOFT_INPUT_STATE_UNSPECIFIED、SOFT_INPUT_STATE_UNCHANGED、SOFT_INPUT_STATE_HIDDEN、SOFT_INPUT_STATE_ALWAYS_HIDDEN、SOFT_INPUT_STATE_VISIBLE 或 SOFT_INPUT_STATE_ALWAYS_VISIBLE。
1820    /// 调整选项之一 SOFT_INPUT_ADJUST_UNSPECIFIED、SOFT_INPUT_ADJUST_RESIZE、SOFT_INPUT_ADJUST_PAN 或 SOFT_INPUT_ADJUST_NOTHING。
1821    /// 此标志可以在您的主题中通过 android.R.attr.windowSoftInputMode 属性进行控制。
1822    #[java_field]
1823    pub fn set_soft_input_mode(&self, value: i32) {}
1824
1825    /// 根据 Gravity 在屏幕内放置窗口。Gravity.apply 和 Gravity.applyDisplay 都在窗口布局期间使用,此值指定为所需重力。例如,您可以在此处指定 Gravity.DISPLAY_CLIP_HORIZONTAL 和 Gravity.DISPLAY_CLIP_VERTICAL 来控制 Gravity.applyDisplay 的行为。
1826    #[java_field]
1827    pub fn get_gravity(&self) -> i32 {}
1828
1829    /// 根据 Gravity 在屏幕内放置窗口。Gravity.apply 和 Gravity.applyDisplay 都在窗口布局期间使用,此值指定为所需重力。例如,您可以在此处指定 Gravity.DISPLAY_CLIP_HORIZONTAL 和 Gravity.DISPLAY_CLIP_VERTICAL 来控制 Gravity.applyDisplay 的行为。
1830    #[java_field]
1831    pub fn set_gravity(&self, value: i32) {}
1832
1833    /// 容器和小部件之间的水平边距,以容器宽度的百分比表示。请参阅 Gravity.apply 以了解如何使用。此字段与 x 一起添加以提供 xAdj 参数。
1834    #[java_field]
1835    pub fn get_horizontal_margin(&self) -> f32 {}
1836
1837    /// 容器和小部件之间的水平边距,以容器宽度的百分比表示。请参阅 Gravity.apply 以了解如何使用。此字段与 x 一起添加以提供 xAdj 参数。
1838    #[java_field]
1839    pub fn set_horizontal_margin(&self, value: f32) {}
1840
1841    /// 容器和小部件之间的垂直边距,以容器高度的百分比表示。请参阅 Gravity.apply 以了解如何使用。此字段与 y 一起添加以提供 yAdj 参数。
1842    #[java_field]
1843    pub fn get_vertical_margin(&self) -> f32 {}
1844
1845    /// 容器和小部件之间的垂直边距,以容器高度的百分比表示。请参阅 Gravity.apply 以了解如何使用。此字段与 y 一起添加以提供 yAdj 参数。
1846    #[java_field]
1847    pub fn set_vertical_margin(&self, value: f32) {}
1848
1849    /// 是否已手动设置表面插入图。设置为 false 时,视图根将自动确定适当的表面插入图。
1850    #[java_field]
1851    pub fn get_has_manual_surface_insets(&self) -> bool {}
1852
1853    /// 是否已手动设置表面插入图。设置为 false 时,视图根将自动确定适当的表面插入图。
1854    #[java_field]
1855    pub fn set_has_manual_surface_insets(&self, value: bool) {}
1856
1857    /// 向窗口报告插入内容时是否应使用全局插入内容状态。设置为 true 时,所有插入内容都将报告给窗口,而不管 z 顺序如何。否则,仅报告给定窗口上方的插入内容。
1858    #[java_field]
1859    pub fn get_receive_insets_ignoring_z_order(&self) -> bool {}
1860
1861    /// 向窗口报告插入内容时是否应使用全局插入内容状态。设置为 true 时,所有插入内容都将报告给窗口,而不管 z 顺序如何。否则,仅报告给定窗口上方的插入内容。
1862    #[java_field]
1863    pub fn set_receive_insets_ignoring_z_order(&self, value: bool) {}
1864
1865    /// 是否应使用先前的表面插入图,而不是当前设置的表面插入图。设置为 true 时,视图根将忽略此对象中的表面插入图并使用其当前拥有的表面插入图。
1866    #[java_field]
1867    pub fn get_preserve_previous_surface_insets(&self) -> bool {}
1868
1869    /// 是否应使用先前的表面插入图,而不是当前设置的表面插入图。设置为 true 时,视图根将忽略此对象中的表面插入图并使用其当前拥有的表面插入图。
1870    #[java_field]
1871    pub fn set_preserve_previous_surface_insets(&self, value: bool) {}
1872
1873    /// 所需的位图格式。可能是 PixelFormat 中的常量之一。格式的选择可能会被 setColorMode(int) 覆盖。默认为 OPAQUE。
1874    #[java_field]
1875    pub fn get_format(&self) -> i32 {}
1876
1877    /// 所需的位图格式。可能是 PixelFormat 中的常量之一。格式的选择可能会被 setColorMode(int) 覆盖。默认为 OPAQUE。
1878    #[java_field]
1879    pub fn set_format(&self, value: i32) {}
1880
1881    /// 定义此窗口要使用的动画的样式资源。这必须是系统资源;它不能是应用程序资源,因为窗口管理器无权访问应用程序。
1882    #[java_field]
1883    pub fn get_window_animations(&self) -> i32 {}
1884
1885    /// 定义此窗口要使用的动画的样式资源。这必须是系统资源;它不能是应用程序资源,因为窗口管理器无权访问应用程序。
1886    #[java_field]
1887    pub fn set_window_animations(&self, value: i32) {}
1888
1889    /// 应用于整个窗口的 alpha 值。alpha 值为 1.0 表示完全不透明,alpha 值为 0.0 表示完全透明
1890    #[java_field]
1891    pub fn get_alpha(&self) -> f32 {}
1892
1893    /// 应用于整个窗口的 alpha 值。alpha 值为 1.0 表示完全不透明,alpha 值为 0.0 表示完全透明
1894    #[java_field]
1895    pub fn set_alpha(&self, value: f32) {}
1896
1897    /// 当设置 FLAG_DIM_BEHIND 时,这是要应用的调光量。范围从 1.0(完全不透明)到 0.0(无调光)。
1898    #[java_field]
1899    pub fn get_dim_amount(&self) -> f32 {}
1900
1901    /// 当设置 FLAG_DIM_BEHIND 时,这是要应用的调光量。范围从 1.0(完全不透明)到 0.0(无调光)。
1902    #[java_field]
1903    pub fn set_dim_amount(&self, value: f32) {}
1904
1905    /// 这可用于覆盖用户偏好的屏幕亮度。小于 0 的值(默认值)表示使用偏好的屏幕亮度。0 到 1 可将亮度从暗调整到全亮。
1906    #[java_field]
1907    pub fn get_screen_brightness(&self) -> f32 {}
1908
1909    /// 这可用于覆盖用户偏好的屏幕亮度。小于 0 的值(默认值)表示使用偏好的屏幕亮度。0 到 1 可将亮度从暗调整到全亮。
1910    #[java_field]
1911    pub fn set_screen_brightness(&self, value: f32) {}
1912
1913    /// 这可用于覆盖按钮和键盘背光的标准行为。小于 0 的值(默认值)表示使用标准背光行为。0 到 1 可将亮度从暗调整到全亮。
1914    #[java_field]
1915    pub fn get_button_brightness(&self) -> f32 {}
1916
1917    /// 这可用于覆盖按钮和键盘背光的标准行为。小于 0 的值(默认值)表示使用标准背光行为。0 到 1 可将亮度从暗调整到全亮。
1918    #[java_field]
1919    pub fn set_button_brightness(&self, value: f32) {}
1920
1921    /// 定义设备旋转时此窗口使用的退出和进入动画。这仅在进入和离开的最顶层不透明窗口设置了 #FLAG_FULLSCREEN 位且未被 其他窗口覆盖 时才会产生影响。所有其他情况都默认为 ROTATION_ANIMATION_ROTATE 行为。
1922    #[java_field]
1923    pub fn get_rotation_animation(&self) -> i32 {}
1924
1925    /// 定义设备旋转时此窗口使用的退出和进入动画。这仅在进入和离开的最顶层不透明窗口设置了 #FLAG_FULLSCREEN 位且未被 其他窗口覆盖 时才会产生影响。所有其他情况都默认为 ROTATION_ANIMATION_ROTATE 行为。
1926    #[java_field]
1927    pub fn set_rotation_animation(&self, value: i32) {}
1928
1929    /// 拥有此窗口的包的名称。
1930    #[java_field]
1931    pub fn get_package_name(&self) -> Option<String> {}
1932
1933    /// 拥有此窗口的包的名称。
1934    #[java_field]
1935    pub fn set_package_name(&self, value: Option<String>) {}
1936
1937    /// 窗口的特定方向值。可以是 ActivityInfo.screenOrientation 允许的任何相同值。如果未设置,将使用默认值 ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED。
1938    #[java_field]
1939    pub fn get_screen_orientation(&self) -> i32 {}
1940
1941    /// 窗口的特定方向值。可以是 ActivityInfo.screenOrientation 允许的任何相同值。如果未设置,将使用默认值 ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED。
1942    #[java_field]
1943    pub fn set_screen_orientation(&self, value: i32) {}
1944
1945    /// 窗口的首选刷新率。在 API 34 之前,这必须是窗口所在显示器支持的刷新率之一。所选的刷新率将应用于显示器的默认模式。从 API 34 开始,此值不限于从窗口的显示器获得的支持的刷新率:它可以是窗口打算运行的任何刷新率。任何刷新率都可以作为首选窗口刷新率提供。
1946    /// 操作系统将选择与 preferredRefreshRate 最匹配的刷新率。设置此值相当于使用 (preferred_frame_rate, Surface.FRAME_RATE_COMPATIBILITY_DEFAULT, Surface.CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS) 调用 Surface.setFrameRate。对于想要指定刷新率但不想为任何其他 displayMode 属性(例如分辨率)指定首选项的应用程序,应使用 preferredDisplayModeId。如果设置了 preferredDisplayModeId,则忽略此值。
1947    #[java_field]
1948    pub fn get_preferred_refresh_rate(&self) -> f32 {}
1949
1950    /// 窗口的首选刷新率。在 API 34 之前,这必须是窗口所在显示器支持的刷新率之一。所选的刷新率将应用于显示器的默认模式。从 API 34 开始,此值不限于从窗口的显示器获得的支持的刷新率:它可以是窗口打算运行的任何刷新率。任何刷新率都可以作为首选窗口刷新率提供。
1951    /// 操作系统将选择与 preferredRefreshRate 最匹配的刷新率。设置此值相当于使用 (preferred_frame_rate, Surface.FRAME_RATE_COMPATIBILITY_DEFAULT, Surface.CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS) 调用 Surface.setFrameRate。对于想要指定刷新率但不想为任何其他 displayMode 属性(例如分辨率)指定首选项的应用程序,应使用 preferredDisplayModeId。如果设置了 preferredDisplayModeId,则忽略此值。
1952    #[java_field]
1953    pub fn set_preferred_refresh_rate(&self, value: f32) {}
1954
1955    /// 窗口首选显示模式的 ID。这必须是窗口所在显示器支持的模式之一。值为 0 表示无偏好。
1956    #[java_field]
1957    pub fn get_preferred_display_mode_id(&self) -> i32 {}
1958
1959    /// 窗口首选显示模式的 ID。这必须是窗口所在显示器支持的模式之一。值为 0 表示无偏好。
1960    #[java_field]
1961    pub fn set_preferred_display_mode_id(&self, value: i32) {}
1962
1963    /// 窗口处于焦点状态时的最小显示刷新率。如果设置了 preferredDisplayModeId,则此值会被忽略。
1964    #[java_field]
1965    pub fn get_preferred_min_display_refresh_rate(&self) -> f32 {}
1966
1967    /// 窗口处于焦点状态时的最小显示刷新率。如果设置了 preferredDisplayModeId,则此值会被忽略。
1968    #[java_field]
1969    pub fn set_preferred_min_display_refresh_rate(&self, value: f32) {}
1970
1971    /// 窗口处于焦点状态时的最大显示刷新率。如果设置了 preferredDisplayModeId,则此值会被忽略。
1972    #[java_field]
1973    pub fn get_preferred_max_display_refresh_rate(&self) -> f32 {}
1974
1975    /// 窗口处于焦点状态时的最大显示刷新率。如果设置了 preferredDisplayModeId,则此值会被忽略。
1976    #[java_field]
1977    pub fn set_preferred_max_display_refresh_rate(&self, value: f32) {}
1978
1979    /// 控制状态栏的可见性。
1980    #[deprecated(note = "SystemUiVisibility 标志已弃用。请改用 WindowInsetsController。")]
1981    #[java_field]
1982    pub fn get_system_ui_visibility(&self) -> i32 {}
1983
1984    /// 控制状态栏的可见性。
1985    #[deprecated(note = "SystemUiVisibility 标志已弃用。请改用 WindowInsetsController。")]
1986    #[java_field]
1987    pub fn set_system_ui_visibility(&self, value: i32) {}
1988
1989    /// 此层次结构中的视图所要求的 UI 可见性。组合值应为 systemUiVisibility | subtreeSystemUiVisibility。
1990    #[java_field]
1991    pub fn get_subtree_system_ui_visibility(&self) -> i32 {}
1992
1993    /// 此层次结构中的视图所要求的 UI 可见性。组合值应为 systemUiVisibility | subtreeSystemUiVisibility。
1994    #[java_field]
1995    pub fn set_subtree_system_ui_visibility(&self, value: i32) {}
1996
1997    /// 获取有关系统 UI 可见性变化的回调。TODO:也许应该有一个我们需要的可选回调的位域。
1998    #[java_field]
1999    pub fn get_has_system_ui_listeners(&self) -> bool {}
2000
2001    /// 获取有关系统 UI 可见性变化的回调。TODO:也许应该有一个我们需要的可选回调的位域。
2002    #[java_field]
2003    pub fn set_has_system_ui_listeners(&self, value: bool) {}
2004
2005    /// 如果有 DisplayCutout,则控制窗口的布局方式。默认为 LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT。
2006    #[java_field]
2007    pub fn get_layout_in_display_cutout_mode(&self) -> i32 {}
2008
2009    /// 如果有 DisplayCutout,则控制窗口的布局方式。默认为 LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT。
2010    #[java_field]
2011    pub fn set_layout_in_display_cutout_mode(&self, value: i32) {}
2012
2013    /// 控制向应用进程公开的输入子系统的一组功能。警告:请勿使用 android.os.InputConfig 标志!必须将其设置为 WindowManager.LayoutParams.InputFeatureFlags 中包含的标志值。
2014    #[java_field]
2015    pub fn get_input_features(&self) -> i32 {}
2016
2017    /// 控制向应用进程公开的输入子系统的一组功能。警告:请勿使用 android.os.InputConfig 标志!必须将其设置为 WindowManager.LayoutParams.InputFeatureFlags 中包含的标志值。
2018    #[java_field]
2019    pub fn set_input_features(&self, value: i32) {}
2020
2021    /// 设置此窗口获得焦点时用户活动超时发生前的毫秒数。值为 -1 时使用标准超时。值为 0 时使用最小支持显示超时。此属性只能用于减少用户指定的显示超时;它永远不会使超时时间比正常时间长。仅应由键盘锁和手机应用使用。
2022    #[java_field]
2023    pub fn get_user_activity_timeout(&self) -> i64 {}
2024
2025    /// 设置此窗口获得焦点时用户活动超时发生前的毫秒数。值为 -1 时使用标准超时。值为 0 时使用最小支持显示超时。此属性只能用于减少用户指定的显示超时;它永远不会使超时时间比正常时间长。仅应由键盘锁和手机应用使用。
2026    #[java_field]
2027    pub fn set_user_activity_timeout(&self, value: i64) {}
2028
2029    /// 对于具有锚点的窗口(例如 PopupWindow),跟踪锚定窗口的视图。
2030    #[java_field]
2031    pub fn get_accessibility_id_of_anchor(&self) -> i64 {}
2032
2033    /// 对于具有锚点的窗口(例如 PopupWindow),跟踪锚定窗口的视图。
2034    #[java_field]
2035    pub fn set_accessibility_id_of_anchor(&self, value: i64) {}
2036
2037    /// 窗口标题与标题栏中显示的内容不同步,因此我们单独跟踪当前显示的标题以提供可访问性。
2038    #[java_field]
2039    pub fn get_accessibility_title<CS: CharSequence>(&self) -> CS {}
2040
2041    /// 窗口标题与标题栏中显示的内容不同步,因此我们单独跟踪当前显示的标题以提供可访问性。
2042    #[java_field]
2043    pub fn set_accessibility_title<CS: CharSequence>(&self, value: &CS) {}
2044
2045    /// 设置窗口管理器隐藏窗口的超时时间(以毫秒为单位)。对于诸如提示消息之类的瞬时通知很有用,这样我们就不必依赖客户端的配合来确保窗口被隐藏。必须在创建窗口时指定。请注意,应用程序无法处理未经其明确请求而被移除的窗口,并且可能会尝试与已移除的窗口进行交互,从而导致未定义的行为和崩溃。因此,我们确实会隐藏此类窗口,以防止它们覆盖其他应用程序。
2046    #[java_field]
2047    pub fn get_hide_timeout_milliseconds(&self) -> i64 {}
2048
2049    /// 设置窗口管理器隐藏窗口的超时时间(以毫秒为单位)。对于诸如提示消息之类的瞬时通知很有用,这样我们就不必依赖客户端的配合来确保窗口被隐藏。必须在创建窗口时指定。请注意,应用程序无法处理未经其明确请求而被移除的窗口,并且可能会尝试与已移除的窗口进行交互,从而导致未定义的行为和崩溃。因此,我们确实会隐藏此类窗口,以防止它们覆盖其他应用程序。
2050    #[java_field]
2051    pub fn set_hide_timeout_milliseconds(&self, value: i64) {}
2052
2053    /// 指示此窗口是否希望连接的显示器对生成的图像或视频帧进行最少的后期处理。仅当窗口在屏幕上可见时才会请求此设置。当低延迟比图像增强处理具有更高的优先级时,应使用此设置(例如,对于游戏或视频会议)。如果显示器接收器通过 HDMI 连接,则设备将开始发送启用了自动低延迟模式和游戏内容类型的信息帧。这会将连接的显示器切换到最小图像处理模式(如果可用),从而减少延迟,改善游戏或视频会议应用程序的用户体验。有关更多信息,请参阅 HDMI 2.1 规范。
2054    /// 如果显示器接收器具有内部连接或使用 HDMI 以外的其他协议,效果可能类似,但由实现定义。切换到具有最少后期处理的模式的功能可以通过系统设置菜单中的用户设置禁用。在这种情况下,此字段将被忽略,显示器将保持其当前模式。
2055    #[java_field]
2056    pub fn get_prefer_minimal_post_processing(&self) -> bool {}
2057
2058    /// 指示此窗口是否希望连接的显示器对生成的图像或视频帧进行最少的后期处理。仅当窗口在屏幕上可见时才会请求此设置。当低延迟比图像增强处理具有更高的优先级时,应使用此设置(例如,对于游戏或视频会议)。如果显示器接收器通过 HDMI 连接,则设备将开始发送启用了自动低延迟模式和游戏内容类型的信息帧。这会将连接的显示器切换到最小图像处理模式(如果可用),从而减少延迟,改善游戏或视频会议应用程序的用户体验。有关更多信息,请参阅 HDMI 2.1 规范。
2059    /// 如果显示器接收器具有内部连接或使用 HDMI 以外的其他协议,效果可能类似,但由实现定义。切换到具有最少后期处理的模式的功能可以通过系统设置菜单中的用户设置禁用。在这种情况下,此字段将被忽略,显示器将保持其当前模式。
2060    #[java_field]
2061    pub fn set_prefer_minimal_post_processing(&self, value: bool) {}
2062
2063    /// 如果指定,则用于计算相对圆角的框架将是此窗口的框架减去此窗口提供的插入部分。任务栏将在其上方绘制假圆角,因此我们需要此插入部分来计算此窗口的正确圆角。
2064    #[java_field]
2065    pub fn get_insets_rounded_corner_frame(&self) -> bool {}
2066
2067    /// 如果指定,则用于计算相对圆角的框架将是此窗口的框架减去此窗口提供的插入部分。任务栏将在其上方绘制假圆角,因此我们需要此插入部分来计算此窗口的正确圆角。
2068    #[java_field]
2069    pub fn set_insets_rounded_corner_frame(&self, value: bool) {}
2070
2071    /**
2072    指定此窗口在布局期间应避免重叠的插入类型。
2073    `types` 哪些 WindowInsets。此窗口应避免的插入类型。此对象的初始值包括所有系统栏。
2074    */
2075    #[java_method]
2076    pub fn set_fit_insets_types(&self, types: i32) {}
2077
2078    /**
2079    指定此窗口在布局期间应避免重叠的边。
2080    `sides` 此窗口应避免与指定类型的边重叠。此对象的初始值包括所有边。
2081    */
2082    #[java_method]
2083    pub fn set_fit_insets_sides(&self, sides: i32) {}
2084
2085    /**
2086    指定此窗口是否应适合窗口插入,无论它们是否可见。
2087    `ignore` 如果为 true,此窗口将适合给定的类型,即使它们不可见。
2088    */
2089    #[java_method]
2090    pub fn set_fit_insets_ignoring_visibility(&self, ignore: bool) {}
2091
2092    /**
2093    指定应将窗口视为受信任的系统覆盖层。考虑窗口在输入调度期间是否被遮挡时,将忽略受信任的系统覆盖层。需要 android.Manifest.permission.INTERNAL_SYSTEM_WINDOW 权限。
2094    @see android.view.MotionEvent#FLAG_WINDOW_IS_OBSCURED
2095    @see android.view.MotionEvent#FLAG_WINDOW_IS_PARTIALLY_OBSCURED
2096    */
2097    #[java_method]
2098    pub fn set_trusted_overlay(&self) {}
2099
2100    /**
2101    当在 TYPE_APPLICATION_OVERLAY 窗口上设置时,它们保持可见,即使为另一个可见窗口设置了 SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS。
2102    `is_system_application_overlay` 系统应用覆盖。
2103    */
2104    #[java_method]
2105    pub fn set_system_application_overlay(&self, is_system_application_overlay: bool) {}
2106
2107    /// 如果此窗口被标记为系统应用程序覆盖,则返回。
2108    #[java_method]
2109    pub fn is_system_application_overlay(&self) -> bool {}
2110
2111    /**
2112    设置是否应向系统壁纸发送触摸事件(可以由第三方应用程序提供),以启用背景中显示壁纸的窗口。默认情况下,这将设置为true。检查flag_show_wallpaper以获取有关显示窗口后面系统壁纸的更多信息。
2113    `enable` 是否可以向系统壁纸发送触摸事件。
2114    */
2115    #[java_method]
2116    pub fn set_wallpaper_touch_events_enabled(&self, enable: bool) {}
2117
2118    /**
2119    返回是否允许在后台显示壁纸的窗口向系统壁纸(可由第三方应用提供)发送触摸事件。检查 FLAG_SHOW_WALLPAPER 以获取有关在窗口后面显示系统壁纸的更多信息。
2120    返回:是否允许向系统壁纸发送触摸事件。
2121    */
2122    #[java_method]
2123    pub fn are_wallpaper_touch_events_enabled(&self) -> bool {}
2124
2125    /**
2126    设置是否可以为该窗口的位置变化播放动画。
2127    `enable` 如果禁用,窗口将立即移动到其新位置而不播放动画。
2128    */
2129    #[java_method]
2130    pub fn set_can_play_move_animation(&self, enable: bool) {}
2131
2132    /// 是否允许在此窗口上的位置改变期间播放动画。这并不能保证在所有此类情况下都会播放动画。例如,拖动调整大小可能会移动窗口但不播放动画。
2133    #[java_method]
2134    pub fn can_play_move_animation(&self) -> bool {}
2135
2136    /// WindowInsets。此窗口避免重叠的类型。
2137    #[java_method]
2138    pub fn get_fit_insets_types(&self) -> i32 {}
2139
2140    /// 此窗口避免重叠的侧面。
2141    #[java_method]
2142    pub fn get_fit_insets_sides(&self) -> i32 {}
2143
2144    /// 如果此窗口适合窗口插图,则无论它们是否可见,都为 true。
2145    #[java_method]
2146    pub fn is_fit_insets_ignoring_visibility(&self) -> bool {}
2147
2148    #[java_method]
2149    pub fn for_rotation(&self, rotation: i32) -> Self {}
2150
2151    #[java_constructor]
2152    pub fn new() -> Self {}
2153
2154    #[java_method]
2155    pub fn set_title<CS: CharSequence>(&self, title: Option<CS>) {}
2156
2157    #[java_method]
2158    pub fn get_title<CS: CharSequence>(&self) -> Option<CS> {}
2159
2160    /**
2161    根据输入视图的高度(视觉 z 位置)设置表面插图。
2162    */
2163    #[java_method]
2164    pub fn set_surface_insets(&self, view: &View, manual: bool, preserve_previous: bool) {}
2165
2166    /// 返回窗口是否启用了 HDR 转换
2167    #[java_method]
2168    pub fn is_hdr_conversion_enabled(&self) -> bool {}
2169
2170    /// 启用/禁用窗口的 HDR 转换。默认情况下,窗口的 HDR 转换已启用。
2171    #[java_method]
2172    pub fn set_hdr_conversion_enabled(&self, enabled: bool) {}
2173
2174    /**
2175    设置窗口的颜色模式。设置颜色模式可能会覆盖窗口的像素格式。
2176    `color_mode` 颜色模式必须是 ActivityInfo.COLOR_MODE_DEFAULT、ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT 或 ActivityInfo.COLOR_MODE_HDR 之一。
2177    */
2178    #[java_method]
2179    pub fn set_color_mode(&self, color_mode: i32) {}
2180
2181    /// 返回窗口的颜色模式,可以是 ActivityInfo.COLOR_MODE_DEFAULT、ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT 或 ActivityInfo.COLOR_MODE_HDR 之一。
2182    #[java_method]
2183    pub fn get_color_mode(&self) -> i32 {}
2184
2185    /**
2186    使窗口后面的屏幕模糊。效果类似于 dimAmount,但不是变暗,而是使窗口后面的内容模糊(或与暗淡量相结合,如果指定了)。模糊的密度由模糊半径设置。半径定义相邻区域的大小,从中对像素进行平均以形成每个像素的最终颜色。该操作近似于高斯模糊。半径为 0 表示无模糊。半径越大,模糊越密集。
2187    请注意与 Window.setBackgroundBlurRadius 的区别,它仅在窗口范围内模糊。后面模糊会使窗口后面的整个屏幕模糊。需要设置 FLAG_BLUR_BEHIND。由于 GPU 限制,某些设备可能不支持跨窗口模糊。它也可以在运行时禁用,例如在省电模式下、使用多媒体隧道时或请求最少的后期处理时。在这种情况下,不会计算或绘制任何模糊,导致窗口与其后面的内容之间没有深度分离。为了避免这种情况,应用程序可能需要在其窗口上使用更多的 dimAmount。
2188    要监听跨窗口模糊启用/禁用事件,请使用 addCrossWindowBlurEnabledListener。
2189    `blur_behind_radius` 用于模糊后方的模糊半径(以像素为单位)
2190    */
2191    #[java_method]
2192    pub fn set_blur_behind_radius(&self, blur_behind_radius: i32) {}
2193
2194    /// 返回窗口半径后面的模糊程度。
2195    #[java_method]
2196    pub fn get_blur_behind_radius(&self) -> i32 {}
2197
2198    #[java_method]
2199    pub fn describe_contents(&self) -> i32 {}
2200
2201    #[java_method]
2202    pub fn copy_from(&self, o: &Self) -> i32 {}
2203
2204    /**
2205    缩放布局参数的坐标和大小。
2206    `scale` 缩放系数。
2207    */
2208    #[java_method]
2209    pub fn scale(&self, scale: f32) {}
2210
2211    /**
2212    如果布局参数将导致窗口覆盖整个屏幕,则为 True;否则为 false。
2213    */
2214    #[java_method]
2215    pub fn is_fullscreen(&self) -> bool {}
2216
2217    /// 如果窗口应自行处理所有指针事件(无论它们是否在窗口内),则为 True。如果窗口是模态窗口,其可触摸区域将扩展至其任务的大小。
2218    #[java_method]
2219    pub fn is_modal(&self) -> bool {}
2220}
2221
2222/**
2223提供有关逻辑显示器的大小和密度的信息。显示区域有两种不同的描述方式。应用程序显示区域指定可能包含应用程序窗口的显示器部分,不包括系统装饰。应用程序显示区域可能小于实际显示区域,因为系统减去了状态栏等装饰元素所需的空间。
2224使用 WindowMetrics.getBounds() 查询应用程序窗口边界。实际显示区域指定应用程序在当前系统状态下可访问的显示器部分。在某些情况下,实际显示区域可能小于显示器的物理尺寸。使用 WindowManager.getCurrentWindowMetrics() 确定活动窗口的当前大小。
2225与 UI 相关的工作(例如选择 UI 布局)应依赖于 WindowMetrics.getBounds()。有关详细信息,请参阅 getRealSize / getRealMetrics。逻辑显示器不一定代表特定的物理显示设备,例如内部显示器或外部显示器。
2226根据当前连接的设备以​​及是否启用镜像,逻辑显示器的内容可能会显示在一个或多个物理显示器上。
2227*/
2228#[java_class(name = "android/view/Display")]
2229pub struct Display;
2230
2231impl Display {
2232    /// 默认的 Display ID,假设有一个主显示器,则为主显示器的 ID。
2233    pub const DEFAULT_DISPLAY: i32 = 0;
2234
2235    /// 无效的显示 ID。
2236    pub const INVALID_DISPLAY: i32 = -1;
2237
2238    /// 分辨率宽度无效。
2239    pub const INVALID_DISPLAY_WIDTH: i32 = -1;
2240
2241    /// 分辨率高度无效。
2242    pub const INVALID_DISPLAY_HEIGHT: i32 = -1;
2243
2244    /// 刷新率无效。
2245    pub const INVALID_DISPLAY_REFRESH_RATE: f32 = 0.0;
2246
2247    /// 默认显示组 ID,假设有一个主显示器,则为主显示器的显示组 ID。
2248    pub const DEFAULT_DISPLAY_GROUP: i32 = 0;
2249
2250    /// 显示组 ID 无效。
2251    pub const INVALID_DISPLAY_GROUP: i32 = -1;
2252
2253    /// 显示标志:表示显示器支持合成存储在受保护图形缓冲区中的内容。如果设置了此标志,则显示设备支持合成受保护缓冲区。如果未设置此标志,则显示设备可能不支持合成受保护缓冲区;用户可能会在屏幕上看到空白区域而不是受保护的内容。安全 (DRM) 视频解码器可以分配受保护的图形缓冲区,以请求在视频解码器和外部显示接收器之间提供受硬件保护的路径。
2254    /// 如果没有可用的硬件保护路径,则可能无法合成存储在受保护图形缓冲区中的内容。应用程序可以使用此标志的缺失作为提示,表示它不应该为此显示使用受保护的缓冲区,因为内容可能不可见。例如,如果未设置标志,则应用程序可以选择不在此显示器上显示内容、显示信息性错误消息、选择备用内容流或采用不依赖受保护缓冲区的不同内容解码策略。
2255    pub const FLAG_SUPPORTS_PROTECTED_BUFFERS: i32 = 1 << 0;
2256
2257    /// 显示标志:表示显示器具有安全的视频输出并支持合成安全表面。如果设置了此标志,则显示设备具有安全的视频输出并能够显示安全表面。它也可能能够显示 FLAG_SUPPORTS_PROTECTED_BUFFERS 受保护的缓冲区。如果未设置此标志,则显示设备可能没有安全的视频输出;用户可能会在屏幕上看到空白区域,而不是安全表面或受保护缓冲区的内容。
2258    /// 安全表面用于防止应用程序渲染到这些表面的内容出现在屏幕截图中或在非安全显示器上查看。安全视频解码器使用受保护的缓冲区来实现类似目的。应用程序通过指定 WindowManager.LayoutParams#FLAG_SECURE 窗口标志来创建具有安全表面的窗口。同样,应用程序通过在将安全视图附加到其包含窗口之前调用 SurfaceView#setSecure 来创建具有安全表面的 SurfaceView。应用程序可以使用此标志的缺失来提示它不应在此显示器上创建安全表面或受保护的缓冲区,因为内容可能不可见。例如,如果未设置该标志,则应用程序可以选择不在此显示器上显示内容,显示信息性错误消息,选择备用内容流或采用不依赖安全表面或受保护缓冲区的其他策略来解码内容。
2259    pub const FLAG_SECURE: i32 = 1 << 1;
2260
2261    /// 显示标志:表示该显示是私有的。只有拥有该显示的应用和已经在该显示上的应用才能在该显示上创建窗口。
2262    pub const FLAG_PRIVATE: i32 = 1 << 2;
2263
2264    /// 显示标志:表示该显示器是演示显示器。此标志标识适合用作演示显示器的辅助显示器,例如外部或无线显示器。应用程序可以自动将其内容投影到演示显示器,以提供更丰富的第二屏幕体验。
2265    pub const FLAG_PRESENTATION: i32 = 1 << 3;
2266
2267    /// 显示标志:表示显示屏为圆形。此标志标识显示屏为圆形、椭圆形或其他形状,不允许用户看到显示屏的所有逻辑角落。
2268    pub const FLAG_ROUND: i32 = 1 << 4;
2269
2270    /// 显示标志:表示在显示非安全键盘保护时,显示器可以显示其内容。此标志标识如果无需输入凭据即可关闭键盘保护,则辅助显示器将继续显示内容。使用的一个示例是虚拟显示器,其内容显示在系统无法直接看到的外部硬件显示器上。
2271    /// TODO (b/114338689): 删除该标志并使用 IWindowManager#shouldShowWithInsecureKeyguard
2272    pub const FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD: i32 = 1 << 5;
2273
2274    /// 显示标志:表示显示应显示系统装饰。此标志标识应显示系统装饰的辅助显示,例如状态栏、导航栏、主页活动或 IME。请注意,如果没有 FLAG_TRUSTED,此标志不起作用
2275    /// TODO (b/114338689): 删除该标志并使用 IWindowManager#setShouldShowSystemDecors
2276    pub const FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS: i32 = 1 << 6;
2277
2278    /// 标志:信任该显示器可以显示系统装饰并接收输入,无需用户触摸。
2279    pub const FLAG_TRUSTED: i32 = 1 << 7;
2280
2281    /// 标志:表示显示器不应该成为默认 DisplayGroup 的一部分,而应该成为新 DisplayGroup 的一部分。
2282    pub const FLAG_OWN_DISPLAY_GROUP: i32 = 1 << 8;
2283
2284    /// 标志:表示显示屏应始终解锁。仅在未在默认显示组中的虚拟显示上有效。
2285    pub const FLAG_ALWAYS_UNLOCKED: i32 = 1 << 9;
2286
2287    /// 标志:表示当用户触摸屏幕时,显示器不应播放音效或执行触觉反馈。
2288    pub const FLAG_TOUCH_FEEDBACK_DISABLED: i32 = 1 << 10;
2289
2290    /**
2291    标志:表示显示器维持自己的焦点和触摸模式。
2292    此标志在行为上与 com.android.internal.R.bool.config_perDisplayFocusEnabled 类似,但仅适用于特定显示器,而不是系统范围的所有显示器。
2293    注意:必须信任显示器才能拥有自己的焦点。
2294    */
2295    pub const FLAG_OWN_FOCUS: i32 = 1 << 11;
2296
2297    /**
2298    标志:表示显示器不应通过从另一个显示器窃取顶部焦点而成为顶部焦点显示器。
2299    结果是只有目标输入事件(输入事件的 displayId 与显示器的 displayId 匹配)才能到达此显示器。如果系统仅由一个显示器组成,或者所有显示器都设置了此标志,则设置了此标志的显示器仍可成为顶部聚焦显示器。在这两种情况下,默认显示器都会成为顶部聚焦显示器。
2300    注意:如果显示器是顶部聚焦显示器,或者显示器管理自己的焦点(通过 FLAG_OWN_FOCUS)或所有显示器管理自己的焦点(通过 ` ` 标志),则显示器仅具有聚焦窗口。如果显示器没有聚焦窗口,则不会向其发送任何输入事件。因此,此标志仅与 FLAG_OWN_FOCUS 一起使用才有用,如果未设置,将被忽略。
2301    注意:框架仅支持顶部聚焦显示屏上的 IME(b/262520411)。因此,在显示屏上启用此标志会隐式禁用显示任何 IME。这不是预期的行为,但在实施 b/262520411 之前无法修复。如果您需要在显示屏上使用 IME,请不要设置此标志。
2302    */
2303    pub const FLAG_STEAL_TOP_FOCUS_DISABLED: i32 = 1 << 12;
2304
2305    /// 显示器标志:表示显示器为后置显示器。此标志标识背对用户的互补显示器。
2306    pub const FLAG_REAR: i32 = 1 << 13;
2307
2308    /// 显示标志:表示不应缩放显示内容以适应物理屏幕尺寸。仅用于开发以模拟具有较小物理屏幕的设备,同时保持密度。
2309    pub const FLAG_SCALING_DISABLED: i32 = 1 << 30;
2310
2311    /// 显示类型:未知的显示类型。
2312    pub const TYPE_UNKNOWN: i32 = 0;
2313
2314    /// 显示器类型:通过内部端口连接的物理显示器。
2315    pub const TYPE_INTERNAL: i32 = 1;
2316
2317    /// 显示器类型:通过外部端口连接的物理显示器。
2318    pub const TYPE_EXTERNAL: i32 = 2;
2319
2320    /// 显示类型:WiFi显示。
2321    pub const TYPE_WIFI: i32 = 3;
2322
2323    /// 显示类型:覆盖显示。
2324    pub const TYPE_OVERLAY: i32 = 4;
2325
2326    /// 显示类型:虚拟显示。
2327    pub const TYPE_VIRTUAL: i32 = 5;
2328
2329    /// 显示状态:显示状态未知。
2330    pub const STATE_UNKNOWN: i32 = 0;
2331
2332    /// 显示状态:显示屏关闭。
2333    pub const STATE_OFF: i32 = 1;
2334
2335    /// 显示状态:显示屏亮。
2336    pub const STATE_ON: i32 = 2;
2337
2338    /// 显示状态:显示器在低功耗状态下处于打瞌睡状态;它仍然处于开启状态,但针对在设备非交互时显示系统提供的内容进行了优化。
2339    pub const STATE_DOZE: i32 = 3;
2340
2341    /// 显示状态:显示器处于挂起低功耗状态,处于休眠状态;它仍处于开启状态,但 CPU 不会更新它。这可以用于以下两种情况之一:在设备处于非交互状态时显示系统提供的静态内容,或允许“Sidekick”计算资源更新显示。因此,CPU 不得在此模式下控制显示器。
2342    pub const STATE_DOZE_SUSPEND: i32 = 4;
2343
2344    /// 显示状态:显示屏已开启并针对 VR 模式进行了优化。
2345    pub const STATE_VR: i32 = 5;
2346
2347    /// 显示状态:显示器处于挂起的全功率状态;它仍然打开,但 CPU 不会更新它。这可以以两种方式之一使用:在设备处于非交互状态时显示系统提供的静态内容,或允许“Sidekick”计算资源更新显示。因此,CPU 不得在此模式下控制显示器。
2348    pub const STATE_ON_SUSPEND: i32 = 6;
2349
2350    /* 下面定义的颜色模式常量必须与 system/core/include/system/graphics-base.h 中的常量保持同步 */
2351
2352    /// 显示颜色模式:当前颜色模式未知或无效。
2353    pub const COLOR_MODE_INVALID: i32 = -1;
2354
2355    /// 显示色彩模式:显示器的默认或原生色域。
2356    pub const COLOR_MODE_DEFAULT: i32 = 0;
2357
2358    #[doc(hidden)]
2359    pub const COLOR_MODE_BT601_625: i32 = 1;
2360
2361    #[doc(hidden)]
2362    pub const COLOR_MODE_BT601_625_UNADJUSTED: i32 = 2;
2363
2364    #[doc(hidden)]
2365    pub const COLOR_MODE_BT601_525: i32 = 3;
2366
2367    #[doc(hidden)]
2368    pub const COLOR_MODE_BT601_525_UNADJUSTED: i32 = 4;
2369
2370    #[doc(hidden)]
2371    pub const COLOR_MODE_BT709: i32 = 5;
2372
2373    #[doc(hidden)]
2374    pub const COLOR_MODE_DCI_P3: i32 = 6;
2375
2376    #[doc(hidden)]
2377    pub const COLOR_MODE_SRGB: i32 = 7;
2378
2379    #[doc(hidden)]
2380    pub const COLOR_MODE_ADOBE_RGB: i32 = 8;
2381
2382    #[doc(hidden)]
2383    pub const COLOR_MODE_DISPLAY_P3: i32 = 9;
2384
2385    /// 表示当显示屏被移除时,其所有活动将移至主显示屏,并且最顶层的活动将成为焦点。
2386    /// TODO (b/114338689): 删除该标志并使用 WindowManager#REMOVE_CONTENT_MODE_MOVE_TO_PRIMARY
2387    pub const REMOVE_MODE_MOVE_CONTENT_TO_PRIMARY: i32 = 0;
2388
2389    /// 表示当display被移除时,其所有堆栈和任务都将被移除,所有活动将按照通常的生命周期被销毁。
2390    /// TODO (b/114338689): 删除该标志并使用 WindowManager#REMOVE_CONTENT_MODE_DESTROY
2391    pub const REMOVE_MODE_DESTROY_CONTENT: i32 = 1;
2392
2393    #[doc(hidden)]
2394    pub const DISPLAY_MODE_ID_FOR_FRAME_RATE_OVERRIDE: i32 = 0xFF;
2395
2396    /**
2397    获取显示 ID。
2398    每个逻辑显示都有一个唯一 ID。默认显示 ID 为 DEFAULT_DISPLAY。
2399    */
2400    #[java_method]
2401    pub fn get_display_id(&self) -> i32 {}
2402
2403    /**
2404    获取显示器唯一 ID。
2405    唯一 ID 与显示器 ID 不同,因为物理显示器在重新启动后具有稳定的唯一 ID。
2406    */
2407    #[java_method]
2408    pub fn get_unique_id(&self) -> Option<String> {}
2409
2410    /**
2411    如果此显示仍然有效,则返回 true;如果显示已被移除,则返回 false。如果显示无效,则此类的方法将继续报告最近观察到的显示信息。但是,在显示消亡后继续使用 Display 对象是不明智的(而且毫无意义)。如果重新连接具有相同 ID 的显示,则之前无效的显示可能会再次有效。
2412    返回:如果显示仍然有效,则返回 True。
2413    */
2414    #[java_method]
2415    pub fn is_valid(&self) -> bool {}
2416
2417    /**
2418    获取显示器的层堆栈。每个显示器都有自己独立的层堆栈,表面放置在其上,由表面投射器进行管理。
2419    返回:显示器的层堆栈编号。
2420    */
2421    #[java_method]
2422    pub fn get_layer_stack(&self) -> i32 {}
2423
2424    /**
2425    返回描述显示器功能的标志组合。
2426    返回:显示标志。
2427    */
2428    #[java_method]
2429    pub fn get_flags(&self) -> i32 {}
2430
2431    /**
2432    获取显示类型。
2433    返回:显示类型。
2434    */
2435    #[java_method]
2436    pub fn get_type(&self) -> i32 {}
2437
2438    /**
2439    获取拥有此显示屏的应用程序的 UID,如果显示屏归系统所有,则获得零。如果显示屏是私有的,则只有所有者可以使用它。
2440    */
2441    #[java_method]
2442    pub fn get_owner_uid(&self) -> i32 {}
2443
2444    /**
2445    获取拥有此显示屏的应用程序的软件包名称,如果显示屏归系统所有,则返回 null。如果显示屏是私有的,则只有所有者可以使用它。
2446    */
2447    #[java_method]
2448    pub fn get_owner_package_name(&self) -> Option<String> {}
2449
2450    /**
2451    获取显示器的名称。请注意,某些显示器可能会被用户重命名。
2452    返回:显示器的名称。
2453    */
2454    #[java_method]
2455    pub fn get_name(&self) -> String {}
2456
2457    /**
2458    获取显示器配置的默认亮度。
2459    返回:默认亮度介于 0.0-1.0 之间
2460    */
2461    #[java_method]
2462    pub fn get_brightness_default(&self) -> f32 {}
2463
2464    /**
2465    返回将发生的最大屏幕尺寸。这主要用于壁纸。
2466    */
2467    #[java_method]
2468    pub fn get_maximum_size_dimension(&self) -> i32 {}
2469
2470    #[doc(hidden)]
2471    #[deprecated(note = "改用 WindowMetrics.getBounds.width()。")]
2472    #[java_method]
2473    pub fn get_width(&self) -> i32 {}
2474
2475    #[doc(hidden)]
2476    #[deprecated(note = "改用#height()。")]
2477    #[java_method]
2478    pub fn get_height(&self) -> i32 {}
2479
2480    /**
2481    返回屏幕从其“自然”方向的旋转。返回值可能是 Surface.ROTATION_0(无旋转)、Surface.ROTATION_90、Surface.ROTATION_180 或 Surface.ROTATION_270。
2482    例如,如果设备具有自然高大的屏幕,并且用户已将其侧放以进入横向方向,则此处返回的值可能是 Surface.ROTATION_90 或 Surface.ROTATION_270,具体取决于旋转的方向。角度是屏幕上绘制图形的旋转,与设备的物理旋转方向相反。例如,如果设备逆时针旋转 90 度,为了补偿渲染将顺时针旋转 90 度,因此此处返回的值将是 Surface.ROTATION_90。此旋转值将与 getMetrics 的结果相匹配:这意味着如果通过活动访问,旋转值将与活动相对应。
2483    */
2484    #[java_method]
2485    pub fn get_rotation(&self) -> i32 {}
2486
2487    /// 返回显示器的安装方向。
2488    #[java_method]
2489    pub fn get_install_orientation(&self) -> i32 {}
2490
2491    /// 返回:此显示的方向。
2492    #[deprecated(note = "使用 getRotation")]
2493    #[java_method]
2494    pub fn get_orientation(&self) -> i32 {}
2495
2496    /**
2497    获取显示器的像素格式。
2498    返回:PixelFormat 中定义的常量之一。
2499    */
2500    #[deprecated(note = "此方法不再受支持。结果始终为 PixelFormat。RGBA_8888。")]
2501    #[java_method]
2502    pub fn get_pixel_format(&self) -> i32 {}
2503
2504    /**
2505    获取此显示器的刷新率(以每秒帧数为单位)。
2506    */
2507    #[java_method]
2508    pub fn get_refresh_rate(&self) -> f32 {}
2509
2510    /**
2511    如果可以将连接的显示器切换到使用最小的后处理方式的模式,则返回true。如果显示器接收器通过HDMI连接,则如果显示屏支持自动低潜伏期模式或游戏内容类型,则此方法将返回true。如果显示器接收器具有内部连接或使用HDMI以外的其他协议,则如果可以将接收器切换到实现定义的低延迟图像处理模式,则此方法将返回true。
2512    通过系统设置菜单中的用户设置,可以禁用使用最小后处理模式的模式的能力。在这种情况下,此方法返回false。
2513    */
2514    #[java_method]
2515    pub fn is_minimal_post_processing_supported(&self) -> bool {}
2516
2517    /**
2518    请求显示器应用颜色模式。
2519    `color_mode` 颜色模式。
2520    */
2521    #[java_method]
2522    pub fn request_color_mode(&self, color_mode: i32) {}
2523
2524    /**
2525    返回此显示的活跃颜色模式
2526    */
2527    #[java_method]
2528    pub fn get_color_mode(&self) -> i32 {}
2529
2530    /// 获取显示屏的当前移除模式 - 移除显示屏内容时应对其执行哪些操作。在这种情况下,公共显示屏的默认行为是将所有活动移至主显示屏并使其处于焦点状态。对于私人显示屏 - 销毁所有活动。
2531    /// TODO (b/114338689): 删除方法并使用 IWindowManager#getRemoveContentMode
2532    #[java_method]
2533    pub fn get_remove_mode(&self) -> i32 {}
2534
2535    /**
2536    返回此显示器是否支持任何 HDR 类型。
2537    */
2538    #[java_method]
2539    pub fn is_hdr(&self) -> bool {}
2540
2541    /**
2542    显示器是否支持报告 hdr/sdr 比率。如果为 false,则 getHdrSdrRatio() 将始终为 1.0f
2543    */
2544    #[java_method]
2545    pub fn is_hdr_sdr_ratio_available(&self) -> bool {}
2546
2547    /**
2548    删除显示器的用户首选显示模式。
2549    */
2550    #[java_method]
2551    pub fn clear_user_preferred_display_mode(&self) {}
2552
2553    /**
2554    返回此显示器是否可用于显示广色域内容。这并不一定意味着设备本身可以渲染广色域内容。要确保可以生成广色域内容,请参阅 Configuration.isScreenWideColorGamut()。
2555    */
2556    #[java_method]
2557    pub fn is_wide_color_gamut(&self) -> bool {}
2558
2559    /**
2560    获取应用 VSYNC 偏移量(以纳秒为单位)。这是一个正值,表示 Choreographer 提供的 VSYNC 事件相对于显示刷新的相位偏移量。
2561    例如,如果 Choreographer 报告刷新发生在时间 N,则它实际上发生在 (N - appVsyncOffset)。应用通常不需要知道这一点。它仅适用于细粒度的 A/V 同步。
2562    */
2563    #[java_method]
2564    pub fn get_app_vsync_offset_nanos(&self) -> i64 {}
2565
2566    //noinspection SpellCheckingInspection
2567    /**
2568    这是缓冲区必须提前多久排队等待在给定时间进行演示。如果您希望缓冲区在时间 N 出现在屏幕上,则必须在 (N - presentationDeadline) 之前提交缓冲区。
2569    可以使用 android.opengl.EGLExt.eglPresentationTimeANDROID 设置 GLES 渲染所需的演示时间。对于视频解码,请使用 android.media.MediaCodec.releaseOutputBuffer(int, long)。时间以纳秒为单位表示,使用系统单调时钟 (System.nanoTime)。
2570    */
2571    #[java_method]
2572    pub fn get_presentation_deadline_nanos(&self) -> i64 {}
2573
2574    /**
2575    确定是否应将 WindowConfiguration.getMaxBounds() 报告为显示尺寸。当应用需要沙盒化时,最大边界字段可能小于逻辑尺寸。取决于 com.android.server.wm.ConfigurationContainer.providesMaxBounds() 中设置的 WindowConfiguration.getMaxBounds()。
2576    在大多数情况下,此值反映当前 DisplayArea 的大小。当应应用最大边界时,返回 true。
2577    */
2578    #[java_method]
2579    pub fn should_report_max_bounds(&self) -> bool {}
2580
2581    /**
2582    获取显示器的状态,例如是打开还是关闭。
2583    返回:显示器的状态:STATE_OFF、STATE_ON、STATE_DOZE、STATE_DOZE_SUSPEND、STATE_ON_SUSPEND 或 STATE_UNKNOWN 之一。
2584    */
2585    #[java_method]
2586    pub fn get_state(&self) -> i32 {}
2587
2588    /**
2589    如果指定的 UID 有权访问此显示,则返回 true。
2590    `uid` UID。
2591    */
2592    #[java_method]
2593    pub fn has_access(&self, uid: i32) -> bool {}
2594
2595    /// 如果显示是公共演示文稿显示,则返回true。
2596    #[java_method]
2597    pub fn is_public_presentation(&self) -> bool {}
2598
2599    /// 如果显示器是受信任的显示器,则为 true。
2600    #[java_method]
2601    pub fn is_trusted(&self) -> bool {}
2602
2603    /// 如果显示器可以从另一个显示器窃取顶部焦点,则为 true。
2604    #[java_method]
2605    pub fn can_steal_top_focus(&self) -> bool {}
2606
2607    #[doc(hidden)]
2608    #[java_method]
2609    pub fn type_to_string(r#type: i32) -> String {}
2610
2611    #[doc(hidden)]
2612    #[java_method]
2613    pub fn state_to_string(state: i32) -> String {}
2614
2615    /**
2616    如果在指定的显示器电源状态下可以暂停显示更新,则返回 true。在 SUSPEND 状态下,绝对禁止更新。
2617    `state` 状态。
2618    */
2619    #[java_method]
2620    pub fn is_suspended_state(state: i32) -> bool {}
2621
2622    /**
2623    如果在指定的显示器电源状态下显示器可能处于降低的操作模式,则返回 true。
2624    `state` 状态。
2625    */
2626    #[java_method]
2627    pub fn is_doze_state(state: i32) {}
2628
2629    /**
2630    如果显示器处于活动状态(例如 STATE_ON 或 STATE_VR),则返回 true。
2631    `state` 状态。
2632    */
2633    #[java_method]
2634    pub fn is_active_state(state: i32) {}
2635
2636    /**
2637    如果显示器处于关闭状态(例如 STATE_OFF),则返回 true。
2638    `state` 状态。
2639    */
2640    #[java_method]
2641    pub fn is_off_state(state: i32) -> bool {}
2642
2643    /**
2644    如果显示器处于开启状态(例如 STATE_ON 或 STATE_VR 或 STATE_ON_SUSPEND),则返回 true。
2645    `state` 状态。
2646    */
2647    #[java_method]
2648    pub fn is_on_state(state: i32) -> bool {}
2649
2650    /**
2651    如果指定的宽度有效,则返回 true。
2652    `width` 宽度。
2653    */
2654    #[java_method]
2655    pub fn is_width_valid(width: i32) -> bool {}
2656
2657    /**
2658    如果指定的高度有效,则返回 true。
2659    `height` 高度。
2660    */
2661    #[java_method]
2662    pub fn is_height_valid(height: i32) -> bool {}
2663
2664    /**
2665    如果指定的刷新率有效,则返回 true。
2666    `refresh_rate` 刷新率。
2667    */
2668    #[java_method]
2669    pub fn is_refresh_rate_valid(refresh_rate: f32) -> bool {}
2670}
2671
2672/// 输入事件的通用基类。
2673#[java_class(name = "android/view/InputEvent")]
2674pub struct InputEvent;
2675
2676impl InputEvent {
2677    /**
2678    获取此事件所来自设备的 ID。ID 为零表示事件不是来自物理设备并映射到默认键盘映射。其他数字是任意的,您不应该依赖这些值。
2679    返回:设备 ID。
2680    */
2681    #[java_method]
2682    pub fn get_device_id(&self) -> i32 {}
2683
2684    /**
2685    获取事件源。
2686    返回:事件源或输入设备。如果未知,则返回 SOURCE_UNKNOWN。
2687    */
2688    #[java_method]
2689    pub fn get_source(&self) -> i32 {}
2690
2691    /**
2692    修改事件的来源。
2693    `source` 新来源。
2694    */
2695    #[java_method]
2696    pub fn set_source(&self, source: i32) {}
2697
2698    /**
2699    确定事件是否来自给定的源。
2700    返回:事件是否来自给定的源。
2701    `source` 要检查的输入源。这可以是特定的设备类型,例如 InputDevice.SOURCE_TOUCH_NAVIGATION,也可以是更通用的设备类,例如 InputDevice.SOURCE_CLASS_POINTER。
2702    */
2703    #[java_method]
2704    pub fn is_from_source(&self, source: i32) -> bool {}
2705
2706    /**
2707    获取事件的显示 ID。
2708    返回:与事件关联的显示 ID。
2709    */
2710    #[java_method]
2711    pub fn get_display_id(&self) -> i32 {}
2712
2713    /**
2714    修改与事件关联的显示 ID
2715    `display_id`
2716    */
2717    #[java_method]
2718    pub fn set_display_id(&self, display_id: i32) {}
2719
2720    /**
2721    回收事件。此方法仅应由系统使用,因为应用程序不希望回收 KeyEvent 对象,但可以回收 MotionEvent 对象。
2722    有关详细信息,请参阅 KeyEvent.recycle()。
2723    */
2724    #[java_method]
2725    pub fn recycle(&self) {}
2726
2727    /**
2728    在将事件分发给应用程序后,如果合适,则有条件地回收事件。如果事件是 MotionEvent,则回收该事件。如果事件是 KeyEvent,则不回收该事件,因为应用程序希望按键事件是不可变的,因此一旦将事件分发给应用程序,我们就不能再回收它了。
2729    */
2730    #[java_method]
2731    pub fn recycle_if_needed_after_dispatch(&self) {}
2732
2733    /**
2734    获取一个私有标志,该标志指示系统何时检测到此输入事件可能与先前传递的输入事件的序列不一致,例如,当发送了按键释放事件但按键未按下时,或者当发送了指针移动事件但指针未按下时。
2735    返回:如果此事件被污染,则返回 True。
2736    */
2737    #[java_method]
2738    pub fn is_tainted(&self) -> bool {}
2739
2740    /**
2741    设置一个私有标志,指示系统何时检测到此输入事件可能与先前传递的输入事件的序列不一致,例如,当发送了按键释放事件但按键未按下时,或者当发送了指针移动事件但指针未按下时。
2742    `tainted` 如果此事件被污染,则为 True。
2743    */
2744    #[java_method]
2745    pub fn set_tainted(&self, tainted: bool) {}
2746
2747    /**
2748    以 android.os.SystemClock.uptimeMillis 时间基准查询此事件发生的时间。
2749    返回:以 android.os.SystemClock.uptimeMillis 时间基准返回此事件发生的时间。
2750    */
2751    #[java_method]
2752    pub fn get_event_time(&self) -> i64 {}
2753
2754    /**
2755    查询此事件发生的时间,以 android.os.SystemClock.uptimeMillis 时间为基础,但精度为纳秒(而不是毫秒)。该值以纳秒为精度,但可能不具有纳秒的精度。
2756    返回:返回此事件发生的时间,以 android.os.SystemClock.uptimeMillis 时间为基础,但精度为纳秒(而不是毫秒)。
2757    */
2758    #[java_method]
2759    pub fn get_event_time_nanos(&self) -> i64 {}
2760
2761    /**
2762    将输入事件标记为已取消。
2763    */
2764    #[java_method]
2765    pub fn cancel(&self) {}
2766
2767    /**
2768    获取此事件的唯一序列号。进程创建或接收的每个输入事件都有唯一的序列号。此外,每次回收事件对象时都会获得一个新的序列号。序列号仅保证在进程内本地唯一。打包事件时不会保留序列号。
2769    返回:此事件的唯一序列号。
2770    */
2771    #[java_method]
2772    pub fn get_sequence_number(&self) -> i32 {}
2773
2774    //noinspection SpellCheckingInspection
2775    /**
2776    获取此事件的 ID。此 ID 在事件创建时生成,并保存到事件的最后阶段。它不会因为事件跨越进程边界而改变,但在进行修改复制时应该会改变。为了避免将应用程序使用情况暴露给其他进程,此 ID 由 CSPRNG 生成。因此,虽然 ID 冲突的可能性相当低,但不能 100% 保证此 ID 的唯一性。经验法则是不要依赖生产逻辑的唯一性,而要依赖跟踪事件(例如日志记录和分析)的良好来源。
2777    返回:此事件的 ID。
2778    */
2779    #[java_method]
2780    pub fn get_id(&self) -> i32 {}
2781
2782    #[doc(hidden)]
2783    #[java_method]
2784    pub fn describe_contents(&self) -> i32 {}
2785}
2786
2787//noinspection SpellCheckingInspection
2788/**
2789用于报告按键和按钮事件的对象。每次按键都由一系列按键事件描述。按键以 ACTION_DOWN 按键事件开始。如果按键保持的时间足够长,以至于重复,则初始按下之后是其他按键事件,其中 ACTION_DOWN 和非零 getRepeatCount() 值。最后一个按键事件是按键弹起的 ACTION_UP。
2790如果取消按键,则按键弹起事件将设置 FLAG_CANCELED 标志。按键事件通常伴随着按键代码 (getKeyCode())、扫描代码 (getScanCode()) 和元状态 (getMetaState())。按键代码常量在此类中定义。扫描代码常量是从操作系统获得的原始设备特定代码,因此除非使用 KeyCharacterMap 进行解释,否则通常对应用程序没有意义。
2791元状态描述按键修饰符(如 META_SHIFT_ON 或 META_ALT_ON)的按下状态。按键代码通常与输入设备上的各个按键一一对应。许多按键和按键组合在不同的输入设备上具有完全不同的功能,因此在解释它们时必须小心谨慎。将按键映射到字符时,请始终使用与输入设备关联的 KeyCharacterMap。
2792请注意,可能同时有多个按键输入设备处于活动状态,并且每个设备都有自己的按键字符映射。由于软输入法可以使用多种创新的文本输入方式,因此无法保证软键盘上的任何按键都会生成按键事件:这由 IME 自行决定,实际上不鼓励发送此类事件。您永远不应该依赖于接收软输入法上任何按键的 KeyEvent。
2793特别是,默认软件键盘永远不会向任何针对 Jelly Bean 或更高版本的应用程序发送任何按键事件,并且只会向针对 Ice Cream Sandwich 或更早版本的应用程序发送某些删除和返回键按下事件。请注意,其他软件输入法可能永远不会发送按键事件,无论版本如何。考虑使用编辑器操作,如 android.view.inputmethod.EditorInfo。
2794如果您需要与软件键盘进行特定交互,则可以使用 IME_ACTION_DONE,因为它可以让用户更清楚地了解您的应用程序如何对按键做出反应。与 IME 交互时,框架可能会使用特殊操作 ACTION_MULTIPLE 传递按键事件,该操作指定单个重复的按键代码或要插入的字符序列。一般来说,框架无法保证它传递给视图的按键事件始终构成完整的按键序列,因为某些事件可能会在传递之前被包含视图删除或修改。视图实现应该准备好处理 FLAG_CANCELED,并且应该容忍异常情况,例如在没有先收到上一次按键的 ACTION_UP 的情况下收到新的 ACTION_DOWN。
2795有关不同类型的输入设备和源如何表示按键和按钮的更多信息,请参阅 InputDevice。
2796*/
2797#[java_class(name = "android/view/KeyEvent", extends=InputEvent)]
2798pub struct KeyEvent;
2799
2800impl KeyEvent {
2801    /// 键码常量:未知键码。
2802    pub const KEYCODE_UNKNOWN: i32 = 0;
2803
2804    /// 键码常量:软左键。通常位于手机显示屏下方,用作多功能特征键,用于选择显示在显示屏左下角的软件定义功能。
2805    pub const KEYCODE_SOFT_LEFT: i32 = 1;
2806
2807    /// 键码常量:软右键。通常位于手机显示屏下方,用作多功能特征键,用于选择显示在显示屏右下角的软件定义功能。
2808    pub const KEYCODE_SOFT_RIGHT: i32 = 2;
2809
2810    /// 键码常量:主页键。此键由框架处理,永远不会传递给应用程序。
2811    pub const KEYCODE_HOME: i32 = 3;
2812
2813    /// 键码常量:返回键。
2814    pub const KEYCODE_BACK: i32 = 4;
2815
2816    /// 键码常量:呼叫键。
2817    pub const KEYCODE_CALL: i32 = 5;
2818
2819    //noinspection SpellCheckingInspection
2820    /// 键码常量:结束呼叫键。
2821    pub const KEYCODE_ENDCALL: i32 = 6;
2822
2823    /// 键码常量:'0'键。
2824    pub const KEYCODE_0: i32 = 7;
2825
2826    /// 键码常量:'1'键。
2827    pub const KEYCODE_1: i32 = 8;
2828
2829    /// 键码常量:'2'键。
2830    pub const KEYCODE_2: i32 = 9;
2831
2832    /// 键码常量:'3'键。
2833    pub const KEYCODE_3: i32 = 10;
2834
2835    /// 键码常量:'4'键。
2836    pub const KEYCODE_4: i32 = 11;
2837
2838    /// 键码常量:'5'键。
2839    pub const KEYCODE_5: i32 = 12;
2840
2841    /// 键码常量:'6'键。
2842    pub const KEYCODE_6: i32 = 13;
2843
2844    /// 键码常量:'7'键。
2845    pub const KEYCODE_7: i32 = 14;
2846
2847    /// 键码常量:'8'键。
2848    pub const KEYCODE_8: i32 = 15;
2849
2850    /// 键码常量:'9'键。
2851    pub const KEYCODE_9: i32 = 16;
2852
2853    /// 键码常量:'*'键。
2854    pub const KEYCODE_STAR: i32 = 17;
2855
2856    /// 键码常量:'#'键。
2857    pub const KEYCODE_POUND: i32 = 18;
2858
2859    //noinspection SpellCheckingInspection
2860    /// 键码常量:方向键向上键。也可以从轨迹球运动合成。
2861    pub const KEYCODE_DPAD_UP: i32 = 19;
2862
2863    //noinspection SpellCheckingInspection
2864    /// 键码常量:方向键向下键。也可以从轨迹球运动合成。
2865    pub const KEYCODE_DPAD_DOWN: i32 = 20;
2866
2867    //noinspection SpellCheckingInspection
2868    /// 键码常量:方向键左键。也可以从轨迹球运动合成。
2869    pub const KEYCODE_DPAD_LEFT: i32 = 21;
2870
2871    //noinspection SpellCheckingInspection
2872    /// 键码常量:方向键右键。也可以从轨迹球运动合成。
2873    pub const KEYCODE_DPAD_RIGHT: i32 = 22;
2874
2875    //noinspection SpellCheckingInspection
2876    /// 键码常量:方向键中心键。也可以从轨迹球运动合成。
2877    pub const KEYCODE_DPAD_CENTER: i32 = 23;
2878
2879    /// 键码常量:音量向上键。调整扬声器音量。
2880    pub const KEYCODE_VOLUME_UP: i32 = 24;
2881
2882    /// 键码常量:音量减键。调整扬声器音量减小。
2883    pub const KEYCODE_VOLUME_DOWN: i32 = 25;
2884
2885    /// 键码常量:电源键。
2886    pub const KEYCODE_POWER: i32 = 26;
2887
2888    /// 键码常量:相机键。用于启动相机应用程序或拍照。
2889    pub const KEYCODE_CAMERA: i32 = 27;
2890
2891    /// 键码常量:清除键。
2892    pub const KEYCODE_CLEAR: i32 = 28;
2893
2894    /// 键码常量:'A'键。
2895    pub const KEYCODE_A: i32 = 29;
2896
2897    /// 键码常量:'B'键。
2898    pub const KEYCODE_B: i32 = 30;
2899
2900    /// 键码常量:'C'键。
2901    pub const KEYCODE_C: i32 = 31;
2902
2903    /// 键码常量:'D'键。
2904    pub const KEYCODE_D: i32 = 32;
2905
2906    /// 键码常量:'E'键。
2907    pub const KEYCODE_E: i32 = 33;
2908
2909    /// 键码常量:'F'键。
2910    pub const KEYCODE_F: i32 = 34;
2911
2912    /// 键码常量:'G'键。
2913    pub const KEYCODE_G: i32 = 35;
2914
2915    /// 键码常量:'H'键。
2916    pub const KEYCODE_H: i32 = 36;
2917
2918    /// 键码常量:'I'键。
2919    pub const KEYCODE_I: i32 = 37;
2920
2921    /// 键码常量:'J'键。
2922    pub const KEYCODE_J: i32 = 38;
2923
2924    /// 键码常量:'K'键。
2925    pub const KEYCODE_K: i32 = 39;
2926
2927    /// 键码常量:'L'键。
2928    pub const KEYCODE_L: i32 = 40;
2929
2930    /// 键码常量:'M'键。
2931    pub const KEYCODE_M: i32 = 41;
2932
2933    /// 键码常量:'N'键。
2934    pub const KEYCODE_N: i32 = 42;
2935
2936    /// 键码常量:'O'键。
2937    pub const KEYCODE_O: i32 = 43;
2938
2939    /// 键码常量:'P'键。
2940    pub const KEYCODE_P: i32 = 44;
2941
2942    /// 键码常量:'Q'键。
2943    pub const KEYCODE_Q: i32 = 45;
2944
2945    /// 键码常量:'R'键。
2946    pub const KEYCODE_R: i32 = 46;
2947
2948    /// 键码常量:'S'键。
2949    pub const KEYCODE_S: i32 = 47;
2950
2951    /// 键码常量:'T'键。
2952    pub const KEYCODE_T: i32 = 48;
2953
2954    /// 键码常量:'U'键。
2955    pub const KEYCODE_U: i32 = 49;
2956
2957    /// 键码常量:'V'键。
2958    pub const KEYCODE_V: i32 = 50;
2959
2960    /// 键码常量:'W'键。
2961    pub const KEYCODE_W: i32 = 51;
2962
2963    /// 键码常量:'X'键。
2964    pub const KEYCODE_X: i32 = 52;
2965
2966    /// 键码常量:'Y'键。
2967    pub const KEYCODE_Y: i32 = 53;
2968
2969    /// 键码常量:'Z'键。
2970    pub const KEYCODE_Z: i32 = 54;
2971
2972    /// 键码常量:','键。
2973    pub const KEYCODE_COMMA: i32 = 55;
2974
2975    /// 键码常量:'.'键。
2976    pub const KEYCODE_PERIOD: i32 = 56;
2977
2978    /// 键码常量:左Alt修饰键。
2979    pub const KEYCODE_ALT_LEFT: i32 = 57;
2980
2981    /// 键码常量:右Alt修饰键。
2982    pub const KEYCODE_ALT_RIGHT: i32 = 58;
2983
2984    /// 键码常量:左Shift修饰键。
2985    pub const KEYCODE_SHIFT_LEFT: i32 = 59;
2986
2987    /// 键码常量:右Shift修饰键。
2988    pub const KEYCODE_SHIFT_RIGHT: i32 = 60;
2989
2990    /// 键码常量:Tab键。
2991    pub const KEYCODE_TAB: i32 = 61;
2992
2993    /// 键码常量:空格键。
2994    pub const KEYCODE_SPACE: i32 = 62;
2995
2996    /// 键码常量:符号修饰键。用于输入替代符号。
2997    pub const KEYCODE_SYM: i32 = 63;
2998
2999    /// 键码常量:资源管理器特殊功能键。用于启动浏览器应用程序。
3000    pub const KEYCODE_EXPLORER: i32 = 64;
3001
3002    /// 键码常量:信封特殊功能键。用于启动邮件应用程序。
3003    pub const KEYCODE_ENVELOPE: i32 = 65;
3004
3005    /// 键码常量:Enter键。
3006    pub const KEYCODE_ENTER: i32 = 66;
3007
3008    /// 键码常量:退格键。删除插入点前的字符,与KEYCODE_FORWARD_DEL不同。
3009    pub const KEYCODE_DEL: i32 = 67;
3010
3011    /// 键码常量:'`'(反引号)键。
3012    pub const KEYCODE_GRAVE: i32 = 68;
3013
3014    /// 键码常量:'-'。
3015    pub const KEYCODE_MINUS: i32 = 69;
3016
3017    /// 键码常量:'='键。
3018    pub const KEYCODE_EQUALS: i32 = 70;
3019
3020    /// 键码常量:'[' 键。
3021    pub const KEYCODE_LEFT_BRACKET: i32 = 71;
3022
3023    /// 键码常量:']'键。
3024    pub const KEYCODE_RIGHT_BRACKET: i32 = 72;
3025
3026    /// 键码常量:'\'键。
3027    pub const KEYCODE_BACKSLASH: i32 = 73;
3028
3029    /// 键码常量:';'键。
3030    pub const KEYCODE_SEMICOLON: i32 = 74;
3031
3032    /// 键码常量:'''(单引号)键。
3033    pub const KEYCODE_APOSTROPHE: i32 = 75;
3034
3035    /// 键码常量:'/'键。
3036    pub const KEYCODE_SLASH: i32 = 76;
3037
3038    /// 键码常量:'@'键。
3039    pub const KEYCODE_AT: i32 = 77;
3040
3041    /// 键码常量:数字修饰键。用于输入数字符号。这个键不是Num Lock;它更像是KEYCODE_ALT_LEFT,并被android.text.method.MetaKeyKeyListener解释为ALT键。
3042    pub const KEYCODE_NUM: i32 = 78;
3043
3044    //noinspection SpellCheckingInspection
3045    /// 键码常量:耳机钩键。用于挂断电话并停止媒体。
3046    pub const KEYCODE_HEADSETHOOK: i32 = 79;
3047
3048    /// 键码常量:相机对焦键。用于对焦相机。
3049    pub const KEYCODE_FOCUS: i32 = 80;
3050
3051    /// 键码常量:'+'键。
3052    pub const KEYCODE_PLUS: i32 = 81;
3053
3054    /// 键码常量:菜单键。
3055    pub const KEYCODE_MENU: i32 = 82;
3056
3057    /// 键码常量:通知键。
3058    pub const KEYCODE_NOTIFICATION: i32 = 83;
3059
3060    /// 键码常量:搜索键。
3061    pub const KEYCODE_SEARCH: i32 = 84;
3062
3063    /// 键码常量:媒体播放/暂停键。
3064    pub const KEYCODE_MEDIA_PLAY_PAUSE: i32 = 85;
3065
3066    /// 键码常量:媒体停止键。
3067    pub const KEYCODE_MEDIA_STOP: i32 = 86;
3068
3069    /// 键码常量:媒体播放下一曲键。
3070    pub const KEYCODE_MEDIA_NEXT: i32 = 87;
3071
3072    /// 键码常量:媒体播放上一曲键。
3073    pub const KEYCODE_MEDIA_PREVIOUS: i32 = 88;
3074
3075    /// 键码常量:媒体倒带键。
3076    pub const KEYCODE_MEDIA_REWIND: i32 = 89;
3077
3078    /// 键码常量:媒体快进键。
3079    pub const KEYCODE_MEDIA_FAST_FORWARD: i32 = 90;
3080
3081    /// 键码常量:静音键。用于麦克风的静音键(不同于KEYCODE_VOLUME_MUTE,那是扬声器静音键)。
3082    pub const KEYCODE_MUTE: i32 = 91;
3083
3084    /// 键码常量:Page Up键。
3085    pub const KEYCODE_PAGE_UP: i32 = 92;
3086
3087    /// 键码常量:Page Down键。
3088    pub const KEYCODE_PAGE_DOWN: i32 = 93;
3089
3090    //noinspection SpellCheckingInspection
3091    /// 键码常量:图片符号修饰键。用于切换符号集(表情符号、颜文字)。
3092    pub const KEYCODE_PICTSYMBOLS: i32 = 94;
3093
3094    //noinspection SpellCheckingInspection
3095    /// 切换符号集(表情符号、颜文字)
3096    /// 键码常量:切换字符集修饰键。用于切换字符集(汉字、片假名)。
3097    pub const KEYCODE_SWITCH_CHARSET: i32 = 95; // 切换字符集(汉字、片假名)
3098
3099    /// 键码常量:A按钮键。在游戏控制器上,A按钮应为标有A的按钮或控制器按钮底部行的第一个按钮。
3100    pub const KEYCODE_BUTTON_A: i32 = 96;
3101
3102    /// 键码常量:B按钮键。在游戏控制器上,B按钮应为标有B的按钮或控制器按钮底部行的第二个按钮。
3103    pub const KEYCODE_BUTTON_B: i32 = 97;
3104
3105    /// 键码常量:C按钮键。在游戏控制器上,C按钮应为标有C的按钮或控制器按钮底部行的第三个按钮。
3106    pub const KEYCODE_BUTTON_C: i32 = 98;
3107
3108    /// 键码常量:X按钮键。在游戏控制器上,X按钮应为标有X的按钮或控制器按钮顶部行的第一个按钮。
3109    pub const KEYCODE_BUTTON_X: i32 = 99;
3110
3111    /// 键码常量:Y按钮键。在游戏控制器上,Y按钮应为标有Y的按钮或控制器按钮顶部行的第二个按钮。
3112    pub const KEYCODE_BUTTON_Y: i32 = 100;
3113
3114    /// 键码常量:Z按钮键。在游戏控制器上,Z按钮应为标有Z的按钮或控制器按钮顶部行的第三个按钮。
3115    pub const KEYCODE_BUTTON_Z: i32 = 101;
3116
3117    /// 键码常量:L1按钮键。在游戏控制器上,L1按钮应为标有L1(或L)的按钮或左上角的触发器按钮。
3118    pub const KEYCODE_BUTTON_L1: i32 = 102;
3119
3120    /// 键码常量:R1按钮键。在游戏控制器上,R1按钮应为标有R1(或R)的按钮或右上角的触发器按钮。
3121    pub const KEYCODE_BUTTON_R1: i32 = 103;
3122
3123    /// 键码常量:L2按钮键。在游戏控制器上,L2按钮应为标有L2的按钮或左下角的触发器按钮。
3124    pub const KEYCODE_BUTTON_L2: i32 = 104;
3125
3126    //noinspection SpellCheckingInspection
3127    /// 键码常量:左拇指按钮键。在游戏控制器上,左拇指按钮表示按下左(或唯一)操纵杆。
3128    pub const KEYCODE_BUTTON_THUMBL: i32 = 106;
3129
3130    //noinspection SpellCheckingInspection
3131    /// 键码常量:右拇指按钮键。在游戏控制器上,右拇指按钮表示按下了右操纵杆。
3132    pub const KEYCODE_BUTTON_THUMBR: i32 = 107;
3133
3134    /// 键码常量:R2 按钮键。在游戏控制器上,R2 按钮应该是标有 R2 的按钮或右下角触发器按钮。
3135    pub const KEYCODE_BUTTON_R2: i32 = 105;
3136
3137    /// 键码常量:开始按钮键。在游戏控制器上,标有“开始”的按钮。
3138    pub const KEYCODE_BUTTON_START: i32 = 108;
3139
3140    /// 键码常量:选择按钮键。在游戏控制器上,标有“选择”的按钮。
3141    pub const KEYCODE_BUTTON_SELECT: i32 = 109;
3142
3143    /// 键码常量:模式按钮键。在游戏控制器上,标有“模式”的按钮。
3144    pub const KEYCODE_BUTTON_MODE: i32 = 110;
3145
3146    /// 键码常量:Esc 键。
3147    pub const KEYCODE_ESCAPE: i32 = 111;
3148
3149    /// 键码常量:向前删除键。与 KEYCODE_DEL 不同,它删除插入点前面的字符。
3150    pub const KEYCODE_FORWARD_DEL: i32 = 112;
3151
3152    /// 键码常量:左 Control 修饰键。
3153    pub const KEYCODE_CTRL_LEFT: i32 = 113;
3154
3155    /// 键码常量:右 Control 修饰键。
3156    pub const KEYCODE_CTRL_RIGHT: i32 = 114;
3157
3158    /// 键码常量:大写锁定键。
3159    pub const KEYCODE_CAPS_LOCK: i32 = 115;
3160
3161    /// 键码常量:滚动锁定键。
3162    pub const KEYCODE_SCROLL_LOCK: i32 = 116;
3163
3164    /// 键码常量:左 Meta 修饰键。
3165    pub const KEYCODE_META_LEFT: i32 = 117;
3166
3167    /// 键码常量:右 Meta 修饰键。
3168    pub const KEYCODE_META_RIGHT: i32 = 118;
3169
3170    /// 键码常量:功能修饰键。
3171    pub const KEYCODE_FUNCTION: i32 = 119;
3172
3173    //noinspection SpellCheckingInspection
3174    /// 键码常量:系统请求/打印屏幕键。
3175    pub const KEYCODE_SYSRQ: i32 = 120;
3176
3177    /// 键码常量:Break / Pause 键。
3178    pub const KEYCODE_BREAK: i32 = 121;
3179
3180    /// 键码常量:Home 移动键。用于滚动或移动光标到 行 的开始或列表的顶部。
3181    pub const KEYCODE_MOVE_HOME: i32 = 122;
3182
3183    /// 键码常量:End 移动键。用于滚动或移动光标到 行 的末尾或列表的底部。
3184    pub const KEYCODE_MOVE_END: i32 = 123;
3185
3186    /// 键码常量:Insert 键。切换插入/覆盖编辑模式。
3187    pub const KEYCODE_INSERT: i32 = 124;
3188
3189    /// 键码常量:前进键。在历史堆栈中向前导航。与 KEYCODE_BACK 互补。
3190    pub const KEYCODE_FORWARD: i32 = 125;
3191
3192    /// 键码常量:播放媒体键。
3193    pub const KEYCODE_MEDIA_PLAY: i32 = 126;
3194
3195    /// 键码常量:暂停媒体键。
3196    pub const KEYCODE_MEDIA_PAUSE: i32 = 127;
3197
3198    /// 键码常量:关闭媒体键。例如,可用于关闭 CD 托盘。
3199    pub const KEYCODE_MEDIA_CLOSE: i32 = 128;
3200
3201    /// 键码常量:弹出媒体键。例如,可用于弹出 CD 托盘。
3202    pub const KEYCODE_MEDIA_EJECT: i32 = 129;
3203
3204    /// 键码常量:录制媒体键。
3205    pub const KEYCODE_MEDIA_RECORD: i32 = 130;
3206
3207    /// 键码常量:F1 键。
3208    pub const KEYCODE_F1: i32 = 131;
3209
3210    /// 键码常量:F2 键。
3211    pub const KEYCODE_F2: i32 = 132;
3212
3213    /// 键码常量:F3 键。
3214    pub const KEYCODE_F3: i32 = 133;
3215
3216    /// 键码常量:F4 键。
3217    pub const KEYCODE_F4: i32 = 134;
3218
3219    /// 键码常量:F5 键。
3220    pub const KEYCODE_F5: i32 = 135;
3221
3222    /// 键码常量:F6 键。
3223    pub const KEYCODE_F6: i32 = 136;
3224
3225    /// 键码常量:F7 键。
3226    pub const KEYCODE_F7: i32 = 137;
3227
3228    /// 键码常量:F8 键。
3229    pub const KEYCODE_F8: i32 = 138;
3230
3231    /// 键码常量:F9 键。
3232    pub const KEYCODE_F9: i32 = 139;
3233
3234    /// 键码常量:F10 键。
3235    pub const KEYCODE_F10: i32 = 140;
3236
3237    /// 键码常量:F11 键。
3238    pub const KEYCODE_F11: i32 = 141;
3239
3240    /// 键码常量:数字键盘'('键
3241    pub const KEYCODE_NUMPAD_LEFT_PAREN: i32 = 162;
3242
3243    /// 键码常量:数字键盘')'键。
3244    pub const KEYCODE_NUMPAD_RIGHT_PAREN: i32 = 163;
3245
3246    /// 键码常量:F12 键。
3247    pub const KEYCODE_F12: i32 = 142;
3248
3249    /// 键码常量:Num Lock 键。这是 Num Lock 键,与 KEYCODE_NUM 不同。此键会改变数字键盘上其他键的行为。
3250    pub const KEYCODE_NUM_LOCK: i32 = 143;
3251
3252    /// 键码常量:数字键盘 '0' 键。
3253    pub const KEYCODE_NUMPAD_0: i32 = 144;
3254
3255    /// 键码常量:数字键盘 '1' 键。
3256    pub const KEYCODE_NUMPAD_1: i32 = 145;
3257
3258    /// 键码常量:数字键盘 '2' 键。
3259    pub const KEYCODE_NUMPAD_2: i32 = 146;
3260
3261    /// 键码常量:数字键盘 '3' 键。
3262    pub const KEYCODE_NUMPAD_3: i32 = 147;
3263
3264    /// 键码常量:数字键盘 '4' 键。
3265    pub const KEYCODE_NUMPAD_4: i32 = 148;
3266
3267    /// 键码常量:数字键盘 '5' 键。
3268    pub const KEYCODE_NUMPAD_5: i32 = 149;
3269
3270    /// 键码常量:数字键盘 '6' 键。
3271    pub const KEYCODE_NUMPAD_6: i32 = 150;
3272
3273    /// 键码常量:数字键盘 '7' 键。
3274    pub const KEYCODE_NUMPAD_7: i32 = 151;
3275
3276    /// 键码常量:数字键盘 '8' 键。
3277    pub const KEYCODE_NUMPAD_8: i32 = 152;
3278
3279    /// 键码常量:数字键盘 '9' 键。
3280    pub const KEYCODE_NUMPAD_9: i32 = 153;
3281
3282    /// 键码常量:数字键盘 '/' 键(用于除法)。
3283    pub const KEYCODE_NUMPAD_DIVIDE: i32 = 154;
3284
3285    /// 键码常量:数字键盘 '*' 键(用于乘法)。
3286    pub const KEYCODE_NUMPAD_MULTIPLY: i32 = 155;
3287
3288    /// 键码常量:数字键盘 '-' 键(用于减法)。
3289    pub const KEYCODE_NUMPAD_SUBTRACT: i32 = 156;
3290
3291    /// 键码常量:数字键盘 '+' 键(用于加法)。
3292    pub const KEYCODE_NUMPAD_ADD: i32 = 157;
3293
3294    /// 键码常量:数字键盘 '.' 键(用于小数或数字分组)。
3295    pub const KEYCODE_NUMPAD_DOT: i32 = 158;
3296
3297    /// 键码常量:数字键盘 ',' 键(用于小数或数字分组)。
3298    pub const KEYCODE_NUMPAD_COMMA: i32 = 159;
3299
3300    /// 键码常量:数字键盘 Enter 键。
3301    pub const KEYCODE_NUMPAD_ENTER: i32 = 160;
3302
3303    /// 键码常量:绿色“可编程”键。在电视遥控器上,用作上下文/可编程键。
3304    pub const KEYCODE_PROG_GREEN: i32 = 184;
3305
3306    /// 键码常量:数字键盘 '=' 键。
3307    pub const KEYCODE_NUMPAD_EQUALS: i32 = 161;
3308
3309    /// 键码常量:音量静音键。用于扬声器的静音键(与 KEYCODE_MUTE 不同,后者是麦克风的静音键)。此键通常应实现为切换键,即第一次按下时静音扬声器,第二次按下时恢复原始音量。
3310    pub const KEYCODE_VOLUME_MUTE: i32 = 164;
3311
3312    /// 键码常量:信息键。通常在电视遥控器上,用于显示与当前正在查看的内容相关的附加信息。
3313    pub const KEYCODE_INFO: i32 = 165;
3314
3315    /// 键码常量:频道上键。在电视遥控器上,用于增加电视频道。
3316    pub const KEYCODE_CHANNEL_UP: i32 = 166;
3317
3318    /// 键码常量:频道下键。在电视遥控器上,用于减少电视频道。
3319    pub const KEYCODE_CHANNEL_DOWN: i32 = 167;
3320
3321    /// 键码常量:放大键。
3322    pub const KEYCODE_ZOOM_IN: i32 = 168;
3323
3324    /// 键码常量:缩小键。
3325    pub const KEYCODE_ZOOM_OUT: i32 = 169;
3326
3327    /// 键码常量:电视键。在电视遥控器上,切换到观看直播电视。
3328    pub const KEYCODE_TV: i32 = 170;
3329
3330    /// 键码常量:窗口键。在电视遥控器上,切换画中画模式或其他窗口功能。在 Android Wear 设备上,触发显示偏移。
3331    pub const KEYCODE_WINDOW: i32 = 171;
3332
3333    /// 键码常量:指南键。在电视遥控器上,显示节目指南。
3334    pub const KEYCODE_GUIDE: i32 = 172;
3335
3336    /// 键码常量:DVR 键。在某些电视遥控器上,切换到录制的节目的 DVR 模式。
3337    pub const KEYCODE_DVR: i32 = 173;
3338
3339    /// 键码常量:书签键。在某些电视遥控器上,用于标记内容或网页为书签。
3340    pub const KEYCODE_BOOKMARK: i32 = 174;
3341
3342    /// 键码常量:切换字幕键。在电视节目期间,切换闭路字幕文本的模式。
3343    pub const KEYCODE_CAPTIONS: i32 = 175;
3344
3345    /// 键码常量:设置键。启动系统设置活动。
3346    pub const KEYCODE_SETTINGS: i32 = 176;
3347
3348    /// 键码常量:语言切换键。切换当前输入语言,例如在 QWERTY 键盘上切换英语和日语。在某些设备上,按 Shift+空格键可以执行相同的功能。
3349    pub const KEYCODE_LANGUAGE_SWITCH: i32 = 204;
3350
3351    /// 键码常量:电视电源键。在HDMI电视面板设备和不支持HDMI的Android TV设备上,切换设备的电源状态。在HDMI源设备上,通过HDMI-CEC切换HDMI连接电视的电源状态,并使源设备跟随此电源状态。
3352    pub const KEYCODE_TV_POWER: i32 = 177;
3353
3354    /// 键码常量:电视输入键。在电视遥控器上,在电视屏幕上切换输入。
3355    pub const KEYCODE_TV_INPUT: i32 = 178;
3356
3357    /// 键码常量:机顶盒电源键。在电视遥控器上,切换外部机顶盒的电源。
3358    pub const KEYCODE_STB_POWER: i32 = 179;
3359
3360    /// 键码常量:机顶盒输入键。在电视遥控器上,切换外部机顶盒的输入模式。
3361    pub const KEYCODE_STB_INPUT: i32 = 180;
3362
3363    /// 键码常量:A/V接收器电源键。在电视遥控器上,切换外部A/V接收器的电源。
3364    pub const KEYCODE_AVR_POWER: i32 = 181;
3365
3366    /// 键码常量:A/V接收器输入键。在电视遥控器上,切换外部A/V接收器的输入模式。
3367    pub const KEYCODE_AVR_INPUT: i32 = 182;
3368
3369    /// 键码常量:红色“可编程”键。在电视遥控器上,作为上下文/可编程键使用。
3370    pub const KEYCODE_PROG_RED: i32 = 183;
3371
3372    /// 键码常量:黄色“可编程”键。在电视遥控器上,作为上下文/可编程键使用。
3373    pub const KEYCODE_PROG_YELLOW: i32 = 185;
3374
3375    /// 键码常量:蓝色“可编程”键。在电视遥控器上,作为上下文/可编程键使用。
3376    pub const KEYCODE_PROG_BLUE: i32 = 186;
3377
3378    /// 键码常量:应用程序切换键。应该显示应用程序切换器对话框。
3379    pub const KEYCODE_APP_SWITCH: i32 = 187;
3380
3381    /// 键码常量:通用游戏板按钮#1。
3382    pub const KEYCODE_BUTTON_1: i32 = 188;
3383
3384    /// 键码常量:通用游戏板按钮#2。
3385    pub const KEYCODE_BUTTON_2: i32 = 189;
3386
3387    //noinspection SpellCheckingInspection
3388    /// 键码常量:日语全角/半角键。
3389    pub const KEYCODE_ZENKAKU_HANKAKU: i32 = 211;
3390
3391    //noinspection SpellCheckingInspection
3392    /// 键码常量:日语字母数字键。
3393    pub const KEYCODE_EISU: i32 = 212;
3394
3395    //noinspection SpellCheckingInspection
3396    /// 键码常量:日语非转换键。
3397    pub const KEYCODE_MUHENKAN: i32 = 213;
3398
3399    //noinspection SpellCheckingInspection
3400    /// 键码常量:日语转换键。
3401    pub const KEYCODE_HENKAN: i32 = 214;
3402
3403    /// 键码常量:通用游戏板按钮#3。
3404    pub const KEYCODE_BUTTON_3: i32 = 190;
3405
3406    /// 键码常量:通用游戏板按钮#4。
3407    pub const KEYCODE_BUTTON_4: i32 = 191;
3408
3409    /// 键码常量:通用游戏板按钮#5。
3410    pub const KEYCODE_BUTTON_5: i32 = 192;
3411
3412    /// 键码常量:通用游戏板按钮#6。
3413    pub const KEYCODE_BUTTON_6: i32 = 193;
3414
3415    /// 键码常量:通用游戏板按钮#7。
3416    pub const KEYCODE_BUTTON_7: i32 = 194;
3417
3418    /// 键码常量:通用游戏板按钮#8。
3419    pub const KEYCODE_BUTTON_8: i32 = 195;
3420
3421    /// 键码常量:通用游戏板按钮#9。
3422    pub const KEYCODE_BUTTON_9: i32 = 196;
3423
3424    /// 键码常量:通用游戏板按钮#10。
3425    pub const KEYCODE_BUTTON_10: i32 = 197;
3426
3427    /// 键码常量:通用游戏板按钮#11。
3428    pub const KEYCODE_BUTTON_11: i32 = 198;
3429
3430    /// 键码常量:通用游戏板按钮#12。
3431    pub const KEYCODE_BUTTON_12: i32 = 199;
3432
3433    /// 键码常量:通用游戏板按钮#13。
3434    pub const KEYCODE_BUTTON_13: i32 = 200;
3435
3436    /// 键码常量:通用游戏板按钮#14。
3437    pub const KEYCODE_BUTTON_14: i32 = 201;
3438
3439    /// 键码常量:通用游戏板按钮#15。
3440    pub const KEYCODE_BUTTON_15: i32 = 202;
3441
3442    /// 键码常量:通用游戏板按钮#16。
3443    pub const KEYCODE_BUTTON_16: i32 = 203;
3444
3445    /// 键码常量:礼仪模式键。在某些设置(如在拥挤的火车上)中,打开和关闭静音或振动模式,使设备表现得更加礼貌。在某些设备上,此键可能仅在长按时才有效。
3446    pub const KEYCODE_MANNER_MODE: i32 = 205;
3447
3448    /// 键码常量:3D模式键。在2D和3D模式之间切换显示。
3449    pub const KEYCODE_3D_MODE: i32 = 206;
3450
3451    /// 键码常量:联系人特殊功能键。用于启动地址簿应用程序。
3452    pub const KEYCODE_CONTACTS: i32 = 207;
3453
3454    /// 键码常量:日历特殊功能键。用于启动日历应用程序。
3455    pub const KEYCODE_CALENDAR: i32 = 208;
3456
3457    /// 键码常量:音轨键。切换音轨。
3458    pub const KEYCODE_MEDIA_AUDIO_TRACK: i32 = 222;
3459
3460    /// 键码常量:睡眠键。使设备进入睡眠状态。行为类似于 KEYCODE_POWER,但如果设备已处于睡眠状态,则不起作用。
3461    pub const KEYCODE_SLEEP: i32 = 223;
3462
3463    /// 键码常量:唤醒键。唤醒设备。行为有点类似于 KEYCODE_POWER,但如果设备已唤醒,则不起作用。
3464    pub const KEYCODE_WAKEUP: i32 = 224;
3465
3466    /// 键码常量:音乐特殊功能键。用于启动音乐播放器应用程序。
3467    pub const KEYCODE_MUSIC: i32 = 209;
3468
3469    /// 键码常量:计算器特殊功能键。用于启动计算器应用程序。
3470    pub const KEYCODE_CALCULATOR: i32 = 210;
3471
3472    /// 键码常量:日本假名/平假名键。
3473    pub const KEYCODE_KATAKANA_HIRAGANA: i32 = 215;
3474
3475    /// 键码常量:日本日元键。
3476    pub const KEYCODE_YEN: i32 = 216;
3477
3478    /// 键码常量:日本Ro键。
3479    pub const KEYCODE_RO: i32 = 217;
3480
3481    /// 键码常量:日本假名键。
3482    pub const KEYCODE_KANA: i32 = 218;
3483
3484    /// 键码常量:辅助键。启动全局辅助活动。不会传递给应用程序。
3485    pub const KEYCODE_ASSIST: i32 = 219;
3486
3487    /// 键码常量:亮度减小键。降低屏幕亮度。
3488    pub const KEYCODE_BRIGHTNESS_DOWN: i32 = 220;
3489
3490    /// 键码常量:亮度增大键。提高屏幕亮度。
3491    pub const KEYCODE_BRIGHTNESS_UP: i32 = 221;
3492
3493    /// 键码常量:配对键。启动外设配对模式。对于配对遥控器或游戏控制器特别有用,尤其是如果没有其他输入模式可用时。
3494    pub const KEYCODE_PAIRING: i32 = 225;
3495
3496    /// 键码常量:媒体顶层菜单键。跳转到媒体菜单的顶部。
3497    pub const KEYCODE_MEDIA_TOP_MENU: i32 = 226;
3498
3499    /// 键码常量:‘11’键。
3500    pub const KEYCODE_11: i32 = 227;
3501
3502    /// 键码常量:“12”键。
3503    pub const KEYCODE_12: i32 = 228;
3504
3505    /// 键码常量:上一个频道键。跳转到最后一个观看的频道。
3506    pub const KEYCODE_LAST_CHANNEL: i32 = 229;
3507
3508    /// 键码常量:电视数据服务键。显示数据服务,如天气、体育等。
3509    pub const KEYCODE_TV_DATA_SERVICE: i32 = 230;
3510
3511    /// 键码常量:语音助手键。启动全局语音助手活动。不会传递给应用程序。
3512    pub const KEYCODE_VOICE_ASSIST: i32 = 231;
3513
3514    /// 键码常量:收音机键。切换电视服务/收音机服务。
3515    pub const KEYCODE_TV_RADIO_SERVICE: i32 = 232;
3516
3517    /// 键码常量:电视图文键。显示电视图文服务。
3518    pub const KEYCODE_TV_TELETEXT: i32 = 233;
3519
3520    /// 键码常量:数字输入键。当每个数字键被分配用于选择单独的频道时,启动输入多位频道号。对应于 CEC 用户控制代码的数字输入模式 (0x1D)。
3521    pub const KEYCODE_TV_NUMBER_ENTRY: i32 = 234;
3522
3523    /// 键码常量:模拟地面广播键。切换到模拟地面广播服务。
3524    pub const KEYCODE_TV_TERRESTRIAL_ANALOG: i32 = 235;
3525
3526    /// 键码常量:数字地面广播键。切换到数字地面广播服务。
3527    pub const KEYCODE_TV_TERRESTRIAL_DIGITAL: i32 = 236;
3528
3529    /// 键码常量:卫星键。切换到数字卫星广播服务。
3530    pub const KEYCODE_TV_SATELLITE: i32 = 237;
3531
3532    /// 键码常量:BS键。切换到日本可用的BS数字卫星广播服务。
3533    pub const KEYCODE_TV_SATELLITE_BS: i32 = 238;
3534
3535    /// 键码常量:CS键。切换到日本可用的CS数字卫星广播服务。
3536    pub const KEYCODE_TV_SATELLITE_CS: i32 = 239;
3537
3538    /// 键码常量:BS/CS键。在BS和CS数字卫星服务之间切换。
3539    pub const KEYCODE_TV_SATELLITE_SERVICE: i32 = 240;
3540
3541    /// 键码常量:切换网络键。切换选择广播服务。
3542    pub const KEYCODE_TV_NETWORK: i32 = 241;
3543
3544    /// 键码常量:天线/电缆键。在天线和电缆之间切换广播输入源。
3545    pub const KEYCODE_TV_ANTENNA_CABLE: i32 = 242;
3546
3547    /// 键码常量:HDMI #1 键。切换到 HDMI 输入 #1。
3548    pub const KEYCODE_TV_INPUT_HDMI_1: i32 = 243;
3549
3550    /// 键码常量:HDMI #2 键。切换到 HDMI 输入 #2。
3551    pub const KEYCODE_TV_INPUT_HDMI_2: i32 = 244;
3552
3553    /// 键码常量:HDMI #3 键。切换到 HDMI 输入 #3。
3554    pub const KEYCODE_TV_INPUT_HDMI_3: i32 = 245;
3555
3556    /// 键码常量:HDMI #4 键。切换到 HDMI 输入 #4。
3557    pub const KEYCODE_TV_INPUT_HDMI_4: i32 = 246;
3558
3559    /// 键码常量:复合 #1 键。切换到复合视频输入 #1。
3560    pub const KEYCODE_TV_INPUT_COMPOSITE_1: i32 = 247;
3561
3562    /// 键码常量:复合 #2 键。切换到复合视频输入 #2。
3563    pub const KEYCODE_TV_INPUT_COMPOSITE_2: i32 = 248;
3564
3565    /// 键码常量:分量 #1 键。切换到分量视频输入 #1。
3566    pub const KEYCODE_TV_INPUT_COMPONENT_1: i32 = 249;
3567
3568    /// 键码常量:分量 #2 键。切换到分量视频输入 #2。
3569    pub const KEYCODE_TV_INPUT_COMPONENT_2: i32 = 250;
3570
3571    /// 键码常量:VGA #1 键。切换到 VGA(模拟 RGB)输入 #1。
3572    pub const KEYCODE_TV_INPUT_VGA_1: i32 = 251;
3573
3574    /// 键码常量:音频描述键。开启/关闭音频描述。
3575    pub const KEYCODE_TV_AUDIO_DESCRIPTION: i32 = 252;
3576
3577    /// 键码常量:音频描述混合音量调高键。与正常音频音量相比,增大音频描述音量。
3578    pub const KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP: i32 = 253;
3579
3580    /// 键码常量:音频描述混音音量减小键。与正常音频音量相比,降低音频描述音量。
3581    pub const KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN: i32 = 254;
3582
3583    /// 键码常量:缩放模式键。更改缩放模式(正常、全屏、缩放、宽缩放等)
3584    pub const KEYCODE_TV_ZOOM_MODE: i32 = 255;
3585
3586    /// 键码常量:内容菜单键。进入标题列表。对应于CEC用户控制代码的“内容菜单”(0x0B)
3587    pub const KEYCODE_TV_CONTENTS_MENU: i32 = 256;
3588
3589    /// 键码常量:媒体上下文菜单键。进入媒体内容的上下文菜单。对应于CEC用户控制代码的“媒体上下文相关菜单”(0x11)。
3590    pub const KEYCODE_TV_MEDIA_CONTEXT_MENU: i32 = 257;
3591
3592    /// 键码常量:定时器编程键。进入定时器录制菜单。对应于CEC用户控制代码的“定时器编程”(0x54)。
3593    pub const KEYCODE_TV_TIMER_PROGRAMMING: i32 = 258;
3594
3595    /// 键码常量:帮助键。
3596    pub const KEYCODE_HELP: i32 = 259;
3597
3598    /// 键码常量:导航到上一个键。在有序的项目集合中向后移动一个项目。
3599    pub const KEYCODE_NAVIGATE_PREVIOUS: i32 = 260;
3600
3601    /// 键码常量:导航到下一个键。在有序的项目集合中前进到下一个项目。
3602    pub const KEYCODE_NAVIGATE_NEXT: i32 = 261;
3603
3604    /// 键码常量:导航进入键。激活当前具有焦点的项目或展开到导航层级的下一个级别。
3605    pub const KEYCODE_NAVIGATE_IN: i32 = 262;
3606
3607    /// 键码常量:导航退出键。退出导航层级的一个级别或折叠当前具有焦点的项目。
3608    pub const KEYCODE_NAVIGATE_OUT: i32 = 263;
3609
3610    /// 键码常量:Wear手表上的主要电源/重置按钮的主要茎键。
3611    pub const KEYCODE_STEM_PRIMARY: i32 = 264;
3612
3613    /// 键码常量:Wear的通用茎键1
3614    pub const KEYCODE_STEM_1: i32 = 265;
3615
3616    //noinspection SpellCheckingInspection
3617    /// 键码常量:方向键向上-向左
3618    pub const KEYCODE_DPAD_UP_LEFT: i32 = 268;
3619
3620    //noinspection SpellCheckingInspection
3621    /// 键码常量:方向键向下向左
3622    pub const KEYCODE_DPAD_DOWN_LEFT: i32 = 269;
3623
3624    //noinspection SpellCheckingInspection
3625    /// 键码常量:方向键右上
3626    pub const KEYCODE_DPAD_UP_RIGHT: i32 = 270;
3627
3628    //noinspection SpellCheckingInspection
3629    /// 键码常量:方向键右下
3630    pub const KEYCODE_DPAD_DOWN_RIGHT: i32 = 271;
3631
3632    /// 键码常量:Wear 的通用茎键 2
3633    pub const KEYCODE_STEM_2: i32 = 266;
3634
3635    /// 键码常量:Wear 的通用茎键 3
3636    pub const KEYCODE_STEM_3: i32 = 267;
3637
3638    /// 键码常量:跳过向前的媒体键。
3639    pub const KEYCODE_MEDIA_SKIP_FORWARD: i32 = 272;
3640
3641    /// 键码常量:跳过向后的媒体键。
3642    pub const KEYCODE_MEDIA_SKIP_BACKWARD: i32 = 273;
3643
3644    /// 键码常量:逐帧向前媒体键。每次向前移动一帧媒体。
3645    pub const KEYCODE_MEDIA_STEP_FORWARD: i32 = 274;
3646
3647    /// 键码常量:逐帧向后媒体键。每次向后移动一帧媒体。
3648    pub const KEYCODE_MEDIA_STEP_BACKWARD: i32 = 275;
3649
3650    /// 键码常量:除非持有唤醒锁,否则使设备进入休眠状态。
3651    pub const KEYCODE_SOFT_SLEEP: i32 = 276;
3652
3653    /// 键码常量:剪切键。
3654    pub const KEYCODE_CUT: i32 = 277;
3655
3656    /// 键码常量:复制键。
3657    pub const KEYCODE_COPY: i32 = 278;
3658
3659    /// 键码常量:粘贴键。
3660    pub const KEYCODE_PASTE: i32 = 279;
3661
3662    /// 键码常量:由系统用于向上导航
3663    pub const KEYCODE_SYSTEM_NAVIGATION_UP: i32 = 280;
3664
3665    /// 键码常量:由系统用于向下导航
3666    pub const KEYCODE_SYSTEM_NAVIGATION_DOWN: i32 = 281;
3667
3668    /// 键码常量:由系统用于向左导航
3669    pub const KEYCODE_SYSTEM_NAVIGATION_LEFT: i32 = 282;
3670
3671    /// 键码常量:由系统用于向右导航
3672    pub const KEYCODE_SYSTEM_NAVIGATION_RIGHT: i32 = 283;
3673
3674    /// 键码常量:显示所有应用
3675    pub const KEYCODE_ALL_APPS: i32 = 284;
3676
3677    /// 键码常量:刷新键。
3678    pub const KEYCODE_REFRESH: i32 = 285;
3679
3680    /// 键码常量:点赞键。应用可以使用此键让用户对内容进行点赞。
3681    pub const KEYCODE_THUMBS_UP: i32 = 286;
3682
3683    /// 键码常量:反对键。应用可利用此功能让用户反对内容。
3684    pub const KEYCODE_THUMBS_DOWN: i32 = 287;
3685
3686    /// 键码常量:用于切换当前正在使用内容的 android.accounts.Account。系统可能会使用该代码来全局设置账户。
3687    pub const KEYCODE_PROFILE_SWITCH: i32 = 288;
3688
3689    /// 键码常量:视频应用键 #1。
3690    pub const KEYCODE_VIDEO_APP_1: i32 = 289;
3691
3692    /// 键码常量:视频应用键 #2。
3693    pub const KEYCODE_VIDEO_APP_2: i32 = 290;
3694
3695    /// 键码常量:视频应用键 #3。
3696    pub const KEYCODE_VIDEO_APP_3: i32 = 291;
3697
3698    /// 键码常量:视频应用键 #4。
3699    pub const KEYCODE_VIDEO_APP_4: i32 = 292;
3700
3701    /// 键码常量:视频应用键 #5。
3702    pub const KEYCODE_VIDEO_APP_5: i32 = 293;
3703
3704    /// 键码常量:视频应用键 #6。
3705    pub const KEYCODE_VIDEO_APP_6: i32 = 294;
3706
3707    /// 键码常量:视频应用键 #7。
3708    pub const KEYCODE_VIDEO_APP_7: i32 = 295;
3709
3710    /// 键码常量:视频应用键 #8。
3711    pub const KEYCODE_VIDEO_APP_8: i32 = 296;
3712
3713    /// 键码常量:特色应用键 #1。
3714    pub const KEYCODE_FEATURED_APP_1: i32 = 297;
3715
3716    /// 键码常量:特色应用键 #2。
3717    pub const KEYCODE_FEATURED_APP_2: i32 = 298;
3718
3719    /// 键码常量:特色应用键 #3。
3720    pub const KEYCODE_FEATURED_APP_3: i32 = 299;
3721
3722    /// 键码常量:特色应用键 #4。
3723    pub const KEYCODE_FEATURED_APP_4: i32 = 300;
3724
3725    /// 键码常量:演示应用键 #1。
3726    pub const KEYCODE_DEMO_APP_1: i32 = 301;
3727
3728    /// 键码常量:演示应用键 #2。
3729    pub const KEYCODE_DEMO_APP_2: i32 = 302;
3730
3731    /// 键码常量:演示应用键 #3。
3732    pub const KEYCODE_DEMO_APP_3: i32 = 303;
3733
3734    /// 键码常量:演示应用键 #4。
3735    pub const KEYCODE_DEMO_APP_4: i32 = 304;
3736
3737    /// 键码常量:键盘背光调暗
3738    pub const KEYCODE_KEYBOARD_BACKLIGHT_DOWN: i32 = 305;
3739
3740    /// 键码常量:键盘背光调亮
3741    pub const KEYCODE_KEYBOARD_BACKLIGHT_UP: i32 = 306;
3742
3743    /// 键码常量:键盘背光切换
3744    pub const KEYCODE_KEYBOARD_BACKLIGHT_TOGGLE: i32 = 307;
3745
3746    /// 键码常量:触控笔笔杆上的主要按钮。这通常是最靠近触控笔尖的按钮。
3747    pub const KEYCODE_STYLUS_BUTTON_PRIMARY: i32 = 308;
3748
3749    /// 键码常量:触控笔笔杆上的第二个按钮。这通常是从触控笔尖算起的第二个按钮。
3750    pub const KEYCODE_STYLUS_BUTTON_SECONDARY: i32 = 309;
3751
3752    /// 键码常量:触控笔笔杆上的第三个按钮。这通常是从触控笔尖开始的第三个按钮。
3753    pub const KEYCODE_STYLUS_BUTTON_TERTIARY: i32 = 310;
3754
3755    /// 键码常量:触控笔尾部的按钮。此按钮的使用通常与橡皮擦的功能无关。
3756    pub const KEYCODE_STYLUS_BUTTON_TAIL: i32 = 311;
3757
3758    /// 键码常量:打开最近使用的应用程序视图(又称概览)。此键由框架处理,永远不会传递给应用程序。
3759    pub const KEYCODE_RECENT_APPS: i32 = 312;
3760
3761    /// 键码常量:用户可以通过系统自定义其用途的按钮。用户可自定义键 #1。
3762    pub const KEYCODE_MACRO_1: i32 = 313;
3763
3764    /// 键码常量:用户可以通过系统自定义其用途的按钮。用户可自定义键 #2。
3765    pub const KEYCODE_MACRO_2: i32 = 314;
3766
3767    /// 键码常量:用户可以通过系统自定义其用途的按钮。用户可自定义键 #3。
3768    pub const KEYCODE_MACRO_3: i32 = 315;
3769
3770    /// 键码常量:用户可以通过系统自定义其用途的按钮。用户可自定义键 #4。
3771    pub const KEYCODE_MACRO_4: i32 = 316;
3772
3773    /// 最后一个 KEYCODE 的整数值。随着新的键码添加到 KeyEvent,该值会增加。
3774    pub const LAST_KEYCODE: i32 = Self::KEYCODE_MACRO_4;
3775
3776    #[doc(hidden)]
3777    #[deprecated(note = "现在键码数量已超过 MAX_KEYCODE。请使用 getMaxKeyCode()。")]
3778    pub const MAX_KEYCODE: i32 = 84;
3779
3780    /// getAction值:该键已被按下。
3781    pub const ACTION_DOWN: i32 = 0;
3782
3783    /// getAction 值:按键已被释放。
3784    pub const ACTION_UP: i32 = 1;
3785
3786    #[doc(hidden)]
3787    #[deprecated(
3788        note = "输入系统不再使用。getAction 值:连续发生多个重复按键事件,或者正在传递复杂字符串。如果按键代码不是 KEYCODE_UNKNOWN,则 getRepeatCount() 方法返回应执行给定按键代码的次数。否则,如果按键代码是 KEYCODE_UNKNOWN,则这是 getCharacters 返回的字符序列。"
3789    )]
3790    pub const ACTION_MULTIPLE: i32 = 2;
3791
3792    /// SHIFT 键在 CAPS 模式下锁定。保留供 MetaKeyKeyListener 用于其 API 中已发布的常量。
3793    pub const META_CAP_LOCKED: i32 = 0x100;
3794
3795    /// ALT 键已锁定。保留供 MetaKeyKeyListener 用于其 API 中已发布的常量。
3796    pub const META_ALT_LOCKED: i32 = 0x200;
3797
3798    /// SYM 键已锁定。保留供 MetaKeyKeyListener 用于其 API 中已发布的常量。
3799    pub const META_SYM_LOCKED: i32 = 0x400;
3800
3801    /// 文本处于选择模式。保留供 MetaKeyKeyListener 使用,用于其 API 中未发布的私有常量,目前由于遗留原因而保留。
3802    pub const META_SELECTING: i32 = 0x800;
3803
3804    /// 此掩码用于检查是否按下了 ALT 元键之一。
3805    pub const META_ALT_ON: i32 = 0x02;
3806
3807    /// 此掩码用于检查左边 ALT 元键是否被按下。
3808    pub const META_ALT_LEFT_ON: i32 = 0x10;
3809
3810    /// 此掩码用于检查是否按下了右边 ALT 元键。
3811    pub const META_ALT_RIGHT_ON: i32 = 0x20;
3812
3813    /// 此掩码用于检查是否按下了 SHIFT 元键之一。
3814    pub const META_SHIFT_ON: i32 = 0x1;
3815
3816    /// 此掩码用于检查左 SHIFT 元键是否被按下。
3817    pub const META_SHIFT_LEFT_ON: i32 = 0x40;
3818
3819    /// 此掩码用于检查是否按下了右 SHIFT 元键。
3820    pub const META_SHIFT_RIGHT_ON: i32 = 0x80;
3821
3822    /// 此掩码用于检查 SYM 元键是否被按下。
3823    pub const META_SYM_ON: i32 = 0x4;
3824
3825    /// 此掩码用于检查 FUNCTION 元键是否被按下。
3826    pub const META_FUNCTION_ON: i32 = 0x8;
3827
3828    /// 此掩码用于检查是否按下了 CTRL 元键之一。
3829    pub const META_CTRL_ON: i32 = 0x1000;
3830
3831    /// 此掩码用于检查左边 CTRL 元键是否被按下。
3832    pub const META_CTRL_LEFT_ON: i32 = 0x2000;
3833
3834    /// 此掩码用于检查是否按下了右边 CTRL 元键。
3835    pub const META_CTRL_RIGHT_ON: i32 = 0x4000;
3836
3837    /// 此掩码用于检查是否按下了 META 元键之一。
3838    pub const META_META_ON: i32 = 0x10000;
3839
3840    /// 该掩码用于检查左META键是否按下。
3841    pub const META_META_LEFT_ON: i32 = 0x20000;
3842
3843    /// 此掩码用于检查是否按下了正确的 META 元键。
3844    pub const META_META_RIGHT_ON: i32 = 0x40000;
3845
3846    /// 此掩码用于检查 CAPS LOCK 元键是否打开。
3847    pub const META_CAPS_LOCK_ON: i32 = 0x100000;
3848
3849    /// 此掩码用于检查 NUM LOCK 元键是否打开。
3850    pub const META_NUM_LOCK_ON: i32 = 0x200000;
3851
3852    /// 此掩码用于检查 SCROLL LOCK 元键是否打开。
3853    pub const META_SCROLL_LOCK_ON: i32 = 0x400000;
3854
3855    /// 此掩码是 META_SHIFT_ON、META_SHIFT_LEFT_ON 和 META_SHIFT_RIGHT_ON 的组合。
3856    pub const META_SHIFT_MASK: i32 =
3857        Self::META_SHIFT_ON | Self::META_SHIFT_LEFT_ON | Self::META_SHIFT_RIGHT_ON;
3858
3859    /// 此掩码是 META_ALT_ON、META_ALT_LEFT_ON 和 META_ALT_RIGHT_ON 的组合。
3860    pub const META_ALT_MASK: i32 =
3861        Self::META_ALT_ON | Self::META_ALT_LEFT_ON | Self::META_ALT_RIGHT_ON;
3862
3863    /// 此掩码是 META_CTRL_ON、META_CTRL_LEFT_ON 和 META_CTRL_RIGHT_ON 的组合。
3864    pub const META_CTRL_MASK: i32 =
3865        Self::META_CTRL_ON | Self::META_CTRL_LEFT_ON | Self::META_CTRL_RIGHT_ON;
3866
3867    /// 此掩码是 META_META_ON、META_META_LEFT_ON 和 META_META_RIGHT_ON 的组合。
3868    pub const META_META_MASK: i32 =
3869        Self::META_META_ON | Self::META_META_LEFT_ON | Self::META_META_RIGHT_ON;
3870
3871    /// 如果设备由于该键事件而被唤醒,则设置此掩码。
3872    #[deprecated(note = "由于系统本身会消耗所有唤醒键,因此系统永远不会设置此标志。")]
3873    pub const FLAG_WOKE_HERE: u32 = 0x1;
3874
3875    /// 如果键事件是由软件键盘生成的,则设置此掩码。
3876    pub const FLAG_SOFT_KEYBOARD: u32 = 0x2;
3877
3878    /// 如果我们不希望按键事件导致我们离开触摸模式,则设置此掩码。
3879    pub const FLAG_KEEP_TOUCH_MODE: u32 = 0x4;
3880
3881    /// 如果已知事件来自系统的可信部分,则设置此掩码。也就是说,已知事件来自用户,并且不可能被第三方组件欺骗。
3882    pub const FLAG_FROM_SYSTEM: u32 = 0x8;
3883
3884    /// 此掩码用于兼容性,以识别来自 IME 的输入键,该 IME 的输入键已自动标记为“下一个”或“完成”。这允许 TextView 将这些输入键作为旧应用程序的正常输入键进行分派,但在收到这些输入键时仍会执行适当的操作。
3885    pub const FLAG_EDITOR_ACTION: u32 = 0x10;
3886
3887    /// 当与向上键事件相关联时,这表示按键已被取消。这通常用于虚拟触摸屏按键,用户可以从虚拟按键区域滑动到显示屏上:在这种情况下,应用程序将收到已取消的向上事件,并且不应执行通常与按键相关联的操作。
3888    /// 请注意,要使此功能正常工作,应用程序在收到向上事件或长按超时已过期之前不能对按键执行操作。
3889    pub const FLAG_CANCELED: u32 = 0x20;
3890
3891    /// 此按键事件由虚拟(屏幕上)硬键区域生成。通常,这是触摸屏上常规显示屏之外的区域,专用于“硬件”按钮。
3892    pub const FLAG_VIRTUAL_HARD_KEY: u32 = 0x40;
3893
3894    /// 此标志是为长按超时后发生的第一次按键重复设置的。
3895    pub const FLAG_LONG_PRESS: u32 = 0x80;
3896
3897    /// 当按键事件因按下时执行长按动作而设置了 FLAG_CANCELED 时设置。
3898    pub const FLAG_CANCELED_LONG_PRESS: u32 = 0x100;
3899
3900    /// 当此事件的按键代码从其初始按下时仍在被跟踪时,设置为 ACTION_UP。也就是说,有人请求在按键按下时开始跟踪,并且长按不会导致跟踪被取消。
3901    pub const FLAG_TRACKING: u32 = 0x200;
3902
3903    /// 当合成按键事件以实现应用未处理的事件的默认行为时设置。后备按键事件由未处理的轨迹球运动(用于模拟方向键盘)和按键映射中声明的某些未处理的按键(例如,当 NumLock 关闭时的特殊功能数字键盘键)生成。
3904    pub const FLAG_FALLBACK: u32 = 0x400;
3905
3906    /// 此标志表示此事件由无障碍服务修改或生成。值 = 0x800
3907    pub const FLAG_IS_ACCESSIBILITY_EVENT: u32 = 0x800;
3908
3909    //noinspection SpellCheckingInspection
3910    /// 表示密钥正在被预先分派。
3911    pub const FLAG_PREDISPATCH: u32 = 0x20000000;
3912
3913    /// 私人控制,用于确定应用程序何时跟踪按键序列。
3914    pub const FLAG_START_TRACKING: u32 = 0x40000000;
3915
3916    /// 私有标志,指示系统何时检测到此按键事件可能与先前传送的按键事件的顺序不一致,例如,当发送了按键释放事件但按键并未按下时。
3917    pub const FLAG_TAINTED: u32 = 0x80000000;
3918
3919    /// 返回最大键码。
3920    #[java_method]
3921    pub fn get_max_key_code() -> i32 {}
3922
3923    /// 获取在字符 c 上添加重音后生成的字符。例如,getDeadChar('`', 'e') 返回 è。
3924    #[java_method]
3925    pub fn get_dead_char(accent: i32, c: i32) -> i32 {}
3926
3927    /**
3928    创建一个新的按键事件。
3929    `action` 操作代码:ACTION_DOWN、ACTION_UP 或 ACTION_MULTIPLE。
3930    `code` 按键代码。
3931    */
3932    #[java_constructor]
3933    pub fn new(action: i32, code: i32) -> Self {}
3934
3935    /**
3936    创建一个新的按键事件。
3937    `down_time` 此按键代码最初按下的时间(以 android.os.SystemClock.uptimeMillis 为单位)。
3938    `event_time` 此事件发生的时间(以 android.os.SystemClock.uptimeMillis 为单位)。
3939    `action` 操作代码:ACTION_DOWN、ACTION_UP 或 ACTION_MULTIPLE。
3940    `code` 按键代码。
3941    `repeat` 按下事件的重复计数(如果是在首次按下之后,则 > 0)或多个事件的事件计数。
3942    */
3943    #[java_constructor]
3944    pub fn new_with_time(
3945        down_time: i64,
3946        event_time: i64,
3947        action: i32,
3948        code: i32,
3949        repeat: i32,
3950    ) -> Self {
3951    }
3952
3953    /// 获取(可能回收的)按键事件。
3954    #[java_method]
3955    pub fn obtain(
3956        down_time: i64,
3957        event_time: i64,
3958        action: i32,
3959        code: i32,
3960        repeat: i32,
3961        meta_state: i32,
3962        device_id: i32,
3963        scan_code: i32,
3964        flags: u32,
3965        source: i32,
3966        display_id: i32,
3967        characters: String,
3968    ) -> Self {
3969    }
3970
3971    /// 获取另一个关键事件的副本(可能被回收)。
3972    #[java_method]
3973    pub fn obtain_other(other: &Self) -> Self {}
3974
3975    /**
3976    创建与给定事件相同的新按键事件,但其事件时间和重复次数将替换为给定值。
3977    `event` 要复制的现有事件。这不会被修改。
3978    `event_time` 事件的新事件时间(以 android.os.SystemClock.uptimeMillis 为单位)。
3979    `new_repeat` 事件的新重复次数。
3980    */
3981    #[java_method]
3982    pub fn change_time_repeat(event: &Self, event_time: i64, new_repeat: i32) -> Self {}
3983
3984    /**
3985    创建与给定事件相同的新键事件,但其事件时间和重复次数将替换为给定值。
3986    `event` 要复制的现有事件。这不会被修改。
3987    `event_time` 事件的新事件时间(以 android.os.SystemClock.uptimeMillis 为单位)。
3988    `new_repeat` 事件的新重复次数。
3989    `new_flags` 事件的新标志,替换原始事件中的整个值。
3990    */
3991    #[java_method]
3992    pub fn change_time_repeat_with_flags(
3993        event: &Self,
3994        event_time: i64,
3995        new_repeat: i32,
3996        new_flags: u32,
3997    ) -> Self {
3998    }
3999
4000    /**
4001    创建一个与给定事件相同的新键事件,但其操作将替换为给定值。
4002    `event` 要复制的现有事件。这不会被修改。
4003    `action` 事件的新操作代码。
4004    */
4005    #[java_method]
4006    pub fn change_action(event: &Self, action: i32) -> Self {}
4007
4008    /**
4009    创建一个与给定事件相同的新键事件,但其标志将被替换为给定值。
4010    `event` 要复制的现有事件。这不会被修改。
4011    `flags` 新的标志常量。
4012    */
4013    #[java_method]
4014    pub fn change_flags(event: &Self, flags: u32) -> Self {}
4015
4016    /**
4017    返回:如果操作是 ACTION_DOWN,则返回 true;否则返回 false。
4018    */
4019    #[deprecated(note = "不要在新代码中使用,而是明确检查 getAction()。")]
4020    #[java_method]
4021    pub fn is_down(&self) -> bool {}
4022
4023    /**
4024    这是系统键吗?系统键不能用作菜单快捷键。
4025    */
4026    #[java_method]
4027    pub fn is_system(&self) -> bool {}
4028
4029    #[doc(hidden)]
4030    #[java_method(overload = isWakeKey)]
4031    pub fn is_wake(&self) -> bool {}
4032
4033    /**
4034    如果指定的键码是游戏手柄按钮,则返回 true。
4035    返回:如果键码是游戏手柄按钮(例如 KEYCODE_BUTTON_A),则返回 True。
4036    */
4037    #[java_method]
4038    pub fn is_gamepad_button(key_code: i32) -> bool {}
4039
4040    /**
4041    默认情况下,按键是否会触发对焦点视图的点击。
4042    */
4043    #[java_method]
4044    pub fn is_confirm_key(key_code: i32) -> bool {}
4045
4046    /**
4047    返回此键是否将被发送到android.media.session.MediaSession。若未处理则回调。
4048    */
4049    #[java_method]
4050    pub fn is_media_session_key(key_code: i32) -> bool {}
4051
4052    /// 这是系统键吗?系统键不能用作菜单快捷键。
4053    #[java_method]
4054    pub fn is_system_key(key_code: i32) -> bool {}
4055
4056    #[doc(hidden)]
4057    #[java_method]
4058    pub fn is_wake_key(key_code: i32) -> bool {}
4059
4060    #[doc(hidden)]
4061    #[java_method]
4062    pub fn is_meta_key(key_code: i32) -> bool {}
4063
4064    #[doc(hidden)]
4065    #[java_method]
4066    pub fn is_alt_key(key_code: i32) -> bool {}
4067
4068    #[doc(hidden)]
4069    #[java_method]
4070    pub fn get_device_id(&self) -> i32 {}
4071
4072    #[doc(hidden)]
4073    #[java_method]
4074    pub fn get_source(&self) -> i32 {}
4075
4076    #[doc(hidden)]
4077    #[java_method]
4078    pub fn set_source(&self, source: i32) {}
4079
4080    #[doc(hidden)]
4081    #[java_method]
4082    pub fn get_display_id(&self) -> i32 {}
4083
4084    #[doc(hidden)]
4085    #[java_method]
4086    pub fn set_display_id(&self, display_id: i32) {}
4087
4088    /// 返回元键的状态。
4089    /// 返回:一个整数,其中每个设置为 1 的位代表按下的元键
4090    #[java_method]
4091    pub fn get_meta_state(&self) -> i32 {}
4092
4093    /**
4094    返回修饰键的状态。就此函数而言,KEYCODE_CAPS_LOCK、KEYCODE_SCROLL_LOCK 和 KEYCODE_NUM_LOCK 不被视为修饰键。因此,此函数专门屏蔽了 META_CAPS_LOCK_ON、META_SCROLL_LOCK_ON 和 META_NUM_LOCK_ON。返回的值由使用 normalizeMetaState(int) 规范化的元状态(来自 getMetaState)组成,然后使用 getModifierMetaStateMask 进行屏蔽,以便仅保留有效的修饰位。
4095    返回:一个整数,其中设置为 1 的每个位代表按下的修饰键。
4096    */
4097    #[java_method]
4098    pub fn get_modifiers(&self) -> i32 {}
4099
4100    /**
4101    修改事件的标志。
4102    `new_flags` 事件的新标志,替换整个值。
4103    */
4104    #[java_method]
4105    pub fn set_flags(&self, new_flags: u32) {}
4106
4107    /**
4108    返回此键事件的标志。
4109    */
4110    #[java_method]
4111    pub fn get_flags(&self) -> i32 {}
4112
4113    /// 获取包含所有有效修饰键元状态位的掩码。就此函数而言,KEYCODE_CAPS_LOCK、KEYCODE_SCROLL_LOCK 和 KEYCODE_NUM_LOCK 不被视为修饰键。因此,掩码明确排除 META_CAPS_LOCK_ON、META_SCROLL_LOCK_ON 和 META_NUM_LOCK_ON。
4114    /// 返回:修饰键元状态掩码,它是 META_SHIFT_ON、META_SHIFT_LEFT_ON、META_SHIFT_RIGHT_ON、META_ALT_ON、META_ALT_LEFT_ON、META_ALT_RIGHT_ON、META_CTRL_ON、META_CTRL_LEFT_ON、META_CTRL_RIGHT_ON、META_META_ON、META_META_LEFT_ON、META_META_RIGHT_ON、META_SYM_ON、META_FUNCTION_ON 的组合。
4115    #[java_method]
4116    pub fn get_modifier_meta_state_mask() -> i32 {}
4117
4118    /**
4119    如果此键码是修饰键,则返回 true。就此函数而言,KEYCODE_CAPS_LOCK、KEYCODE_SCROLL_LOCK 和 KEYCODE_NUM_LOCK 不被视为修饰键。因此,此函数对这些键返回 false。
4120    返回:如果键码是 KEYCODE_SHIFT_LEFT、KEYCODE_SHIFT_RIGHT、KEYCODE_ALT_LEFT、KEYCODE_ALT_RIGHT、KEYCODE_CTRL_LEFT、KEYCODE_CTRL_RIGHT、KEYCODE_META_LEFT 或 KEYCODE_META_RIGHT、KEYCODE_SYM、KEYCODE_NUM、KEYCODE_FUNCTION 之一,则返回 True。
4121    */
4122    #[java_method]
4123    pub fn is_modifier_key(key_code: i32) -> bool {}
4124
4125    /**
4126    规范化指定的元状态。元状态被规范化,这样如果设置了左或右修饰符元状态位,则结果还将包括该修饰符的通用位。如果指定的元状态包含 META_ALT_LEFT_ON,则结果除了 META_ALT_LEFT_ON 和输入中指定的其他位之外,还将包含 META_ALT_ON。
4127    对 shift、control 和 meta 执行相同的过程。如果指定的元状态包含 MetaKeyKeyListener 定义的合成元状态,则这些状态将在此处转换,并从结果中删除原始合成元状态。MetaKeyKeyListener.META_CAP_LOCKED 转换为 META_CAPS_LOCK_ON。MetaKeyKeyListener.META_ALT_LOCKED 转换为 META_ALT_ON。MetaKeyKeyListener.META_SYM_LOCKED 转换为 META_SYM_ON。未定义的元状态位被删除。
4128    返回:规范化的元状态。
4129    `meta_state` 元状态。
4130    */
4131    #[java_method]
4132    pub fn normalize_meta_state(meta_state: i32) -> i32 {}
4133
4134    /**
4135    如果根据指定的元状态未按下任何修饰键,则返回 true。就此函数而言,KEYCODE_CAPS_LOCK、KEYCODE_SCROLL_LOCK 和 KEYCODE_NUM_LOCK 不被视为修饰键。因此,此函数忽略 META_CAPS_LOCK_ON、META_SCROLL_LOCK_ON 和 META_NUM_LOCK_ON。使用 normalizeMetaState(int) 比较之前,元状态已标准化。
4136    返回:如果没有按下任何修饰键,则返回 True。
4137    `meta_state` 要考虑的元状态。
4138    */
4139    #[java_method]
4140    pub fn meta_state_has_no_modifiers(meta_state: i32) -> bool {}
4141
4142    /**
4143    如果根据指定的元状态仅按下了指定的修饰键,则返回 true。如果按下了不同的修饰键组合,则返回 false。就此函数而言,KEYCODE_CAPS_LOCK、KEYCODE_SCROLL_LOCK 和 KEYCODE_NUM_LOCK 不被视为修饰键。因此,此函数忽略 META_CAPS_LOCK_ON、META_SCROLL_LOCK_ON 和 META_NUM_LOCK_ON。
4144    如果指定的修饰符掩码包括方向修饰符(例如 META_SHIFT_LEFT_ON),则此方法可确保在该侧按下修饰符。如果指定的修饰符掩码包括非方向修饰符(例如 META_SHIFT_ON),则此方法可确保在任一侧按下修饰符。如果指定的修饰符掩码包含同一类型键的方向和非方向修饰符,例如 META_SHIFT_ON 和 META_SHIFT_LEFT_ON,则此方法将抛出非法参数异常。
4145    返回:如果仅按下了指定的修饰键,则返回 True。
4146    抛出:IllegalArgumentException – 如果 modifiers 参数包含无效修饰符
4147    `meta_state` 要考虑的元状态。
4148    `modifiers` 要检查的修饰键的元状态。可能是 getModifierMetaStateMask() 定义的修饰符元状态的组合。可以为 0,以确保没有按下修饰键。
4149    */
4150    #[java_method]
4151    pub fn meta_state_has_modifiers(
4152        meta_state: i32,
4153        modifiers: i32,
4154    ) -> Result<bool, <Self as JType>::Error> {
4155    }
4156
4157    /**
4158    如果没有按下修饰键,则返回 true。就此函数而言,KEYCODE_CAPS_LOCK、KEYCODE_SCROLL_LOCK 和 KEYCODE_NUM_LOCK 不被视为修饰键。因此,此函数忽略 META_CAPS_LOCK_ON、META_SCROLL_LOCK_ON 和 META_NUM_LOCK_ON。
4159    使用 normalizeMetaState(int) 进行比较之前,元状态已标准化。
4160    返回:如果没有按下修饰键,则返回 True。
4161    */
4162    #[java_method]
4163    pub fn has_no_modifiers(&self) -> bool {}
4164
4165    /**
4166    如果仅按下了指定的修饰键,则返回 true。如果按下了不同的修饰键组合,则返回 false。就此函数而言,KEYCODE_CAPS_LOCK、KEYCODE_SCROLL_LOCK 和 KEYCODE_NUM_LOCK 不被视为修饰键。因此,此函数忽略 META_CAPS_LOCK_ON、META_SCROLL_LOCK_ON 和 META_NUM_LOCK_ON。
4167    如果指定的修饰符掩码包括方向修饰符(例如 META_SHIFT_LEFT_ON),则此方法可确保在该侧按下修饰符。如果指定的修饰符掩码包括非方向修饰符(例如 META_SHIFT_ON),则此方法可确保在任一侧按下修饰符。如果指定的修饰符掩码包括同一类型键的方向修饰符和非方向修饰符(例如 META_SHIFT_ON 和 META_SHIFT_LEFT_ON),则此方法将引发非法参数异常。
4168    返回:如果仅按下了指定的修饰键,则为 True。
4169    抛出:IllegalArgumentException – 如果 modifiers 参数包含无效修饰键
4170    `modifiers` 要检查的修饰键的元状态。可能是 getModifierMetaStateMask() 定义的修饰键元状态的组合。可能为 0,以确保未按下任何修饰键。
4171    */
4172    #[java_method]
4173    pub fn has_modifiers(&self, modifiers: i32) -> Result<bool, <Self as JType>::Error> {}
4174
4175    /**
4176    返回 ALT 元键的按下状态。如果按下了 ALT 键,则返回 true,否则返回 false
4177    */
4178    #[java_method]
4179    pub fn is_alt_pressed(&self) -> bool {}
4180
4181    /**
4182    返回 SHIFT 元键的按下状态。如果按下了 SHIFT 键,则返回 true,否则返回 false
4183    */
4184    #[java_method]
4185    pub fn is_shift_pressed(&self) -> bool {}
4186
4187    /**
4188    返回 SYM 元键的按下状态。
4189    返回:如果 SYM 键被按下,则返回 true,否则返回 false
4190    */
4191    #[java_method]
4192    pub fn is_sym_pressed(&self) -> bool {}
4193
4194    /**
4195    返回 CTRL 元键的按下状态。如果按下了 CTRL 键,则返回 true,否则返回 false
4196    */
4197    #[java_method]
4198    pub fn is_ctrl_pressed(&self) -> bool {}
4199
4200    /**
4201    返回 META 元键的按下状态。如果按下 META 键则返回 true,否则返回 false
4202    */
4203    #[java_method]
4204    pub fn is_meta_pressed(&self) -> bool {}
4205
4206    /**
4207    返回 FUNCTION 元键的按下状态。如果 FUNCTION 键被按下,则返回 true,否则返回 false
4208    */
4209    #[java_method]
4210    pub fn is_function_pressed(&self) -> bool {}
4211
4212    /**
4213    返回 CAPS LOCK 元键的锁定状态。如果 CAPS LOCK 键处于打开状态,则返回 true,否则返回 false
4214    */
4215    #[java_method]
4216    pub fn is_caps_lock_on(&self) -> bool {}
4217
4218    /**
4219    返回 SCROLL LOCK 元键的锁定状态。如果 SCROLL LOCK 键处于打开状态,则返回 true,否则返回 false
4220    */
4221    #[java_method]
4222    pub fn is_num_lock_on(&self) -> bool {}
4223
4224    /**
4225    查询此按键事件的操作。可能是 ACTION_DOWN、ACTION_UP 或 ACTION_MULTIPLE。
4226    返回:事件操作:ACTION_DOWN、ACTION_UP 或 ACTION_MULTIPLE。
4227    */
4228    #[java_method]
4229    pub fn get_action(&self) -> i32 {}
4230
4231    /// 对于 ACTION_UP 事件,表示事件已根据 FLAG_CANCELED 取消。
4232    #[java_method]
4233    pub fn is_canceled(&self) -> bool {}
4234
4235    /**
4236    为按键事件设置 FLAG_CANCELED 标志。
4237    */
4238    #[java_method]
4239    pub fn cancel(&self) {}
4240
4241    /// 在 KeyEvent.Callback.onKeyDown 期间调用此方法,让系统跟踪按键直至其最后按下(可能包括长按)。请注意,一次只能跟踪一个按键 - 如果在跟踪前一个按键时收到另一个按键按下事件,则跟踪前一个事件时会停止。
4242    #[java_method]
4243    pub fn start_tracking(&self) {}
4244
4245    /**
4246    对于 ACTION_UP 事件,表示该事件仍按照 FLAG_TRACKING 从其初始向下事件进行跟踪。
4247    */
4248    #[java_method]
4249    pub fn is_tracking(&self) -> bool {}
4250
4251    /// 对于 ACTION_DOWN 事件,表示该事件已根据 FLAG_LONG_PRESS 取消。
4252    #[java_method]
4253    pub fn is_long_press(&self) -> bool {}
4254
4255    /// 检索按键事件的按键代码。这是按下的物理按键,而不是 Unicode 字符。
4256    /// 返回:事件的按键代码。
4257    #[java_method]
4258    pub fn get_key_code(&self) -> i32 {}
4259
4260    /// 对于 ACTION_MULTIPLE 事件(其键代码为 KEYCODE_UNKNOWN)的特殊情况,这是与该事件关联的原始字符串。在所有其他情况下,它为空。
4261    /// 返回:返回与该事件关联的 1 个或多个字符的字符串。
4262    #[deprecated(note = "不再由输入系统使用。")]
4263    #[java_method]
4264    pub fn get_characters(&self) -> Option<String> {}
4265
4266    /// 查询此按键事件的硬件按键 ID。这些值不可靠,且因设备而异。@more 主要用于调试目的。
4267    #[java_method]
4268    pub fn get_scan_code(&self) -> i32 {}
4269
4270    /// 查询事件的重复计数。对于按键按下事件,这是按键重复的次数,第一次按下从 0 开始,然后从那里开始计数。对于按键弹起事件,此值始终等于零。对于多个按键事件,这是发生的按下/弹起对的数量。
4271    /// 返回:按键重复的次数。
4272    #[java_method]
4273    pub fn get_repeat_count(&self) -> i32 {}
4274
4275    /**
4276    修改事件的按下时间和事件时间。
4277    `down_time` 事件的新按下时间(以 android.os.SystemClock.uptimeMillis 为单位)。
4278    `event_time` 事件的新事件时间(以 android.os.SystemClock.uptimeMillis 为单位)。
4279    */
4280    #[java_method]
4281    pub fn set_time(down_time: i64, event_time: i64) {}
4282
4283    /**
4284    查询最近一次按键按下事件的时间,以 android.os.SystemClock.uptimeMillis 时间为基准。如果这是按下事件,则此方法与 getEventTime() 相同。
4285    请注意,当按下按键时,此值是最近按下的按键的按下时间,该按键可能不是此事件的同一物理按键。
4286    返回:返回最近一次按键按下时间,以 android.os.SystemClock.uptimeMillis 时间为基准
4287    */
4288    #[java_method]
4289    pub fn get_down_time(&self) -> i64 {}
4290
4291    /**
4292    以 android.os.SystemClock.uptimeMillis 时间基准检索此事件发生的时间。
4293    返回:以 android.os.SystemClock.uptimeMillis 时间基准返回此事件发生的时间。
4294    */
4295    #[java_method]
4296    pub fn get_event_time(&self) -> i64 {}
4297
4298    /**
4299    查询此事件发生的时间,以 android.os.SystemClock.uptimeMillis 时间为基础,但精度为纳秒(而不是毫秒)。该值以纳秒为精度,但可能不具有纳秒的精度。
4300    返回:返回此事件发生的时间,以 android.os.SystemClock.uptimeMillis 时间为基础,但精度为纳秒(而不是毫秒)。
4301    */
4302    #[java_method]
4303    pub fn get_event_time_nanos(&self) -> i64 {}
4304
4305    /**
4306    已重命名为 getDeviceId。
4307    */
4308    #[deprecated(note = "请改用 getDeviceId()。")]
4309    #[java_method]
4310    pub fn get_keyboard_device(&self) -> i32 {}
4311
4312    /**
4313    获取此键的主要字符。换句话说,就是实际打印在其上的标签。
4314    返回:显示标签字符,如果没有则返回 0(例如,对于非打印键)。
4315    */
4316    #[java_method]
4317    pub fn get_display_label(&self) -> char {}
4318
4319    /**
4320    获取由指定键和元键状态组合生成的 Unicode 字符。返回当指定元位(参见 MetaKeyKeyListener)处于活动状态时,指定键将生成的 Unicode 字符。
4321    如果该键不是用于键入 Unicode 字符的键,则返回 0。如果返回值已设置位 KeyCharacterMap.COMBINING_ACCENT,则该键是“死键”,在使用 KeyCharacterMap.COMBINING_ACCENT_MASK 进行屏蔽后,应将其与另一个键组合以实际生成字符(参见 KeyCharacterMap.getDeadChar)。
4322    返回:相关字符或组合重音符,如果没有,则返回 0。
4323    */
4324    #[java_method]
4325    pub fn get_unicode_char(&self) -> i32 {}
4326
4327    /**
4328    获取由指定键和元键状态组合生成的 Unicode 字符。返回当指定元位(参见 MetaKeyKeyListener)处于活动状态时,指定键将生成的 Unicode 字符。如果该键不是用于键入 Unicode 字符的键,则返回 0。
4329    如果返回值已设置 KeyCharacterMap.COMBINING_ACCENT 位,则该键是“死键”,在使用 KeyCharacterMap.COMBINING_ACCENT_MASK 屏蔽后,应与另一个键组合以实际生成字符(参见 KeyCharacterMap.getDeadChar)。
4330    返回:相关字符或组合重音符,如果没有,则返回 0。
4331    `meta_state` 元键修饰符状态。
4332    */
4333    #[java_method(overload=getUnicodeChar)]
4334    pub fn get_unicode_char_from(meta_state: i32) -> i32 {}
4335
4336    /**
4337    获取与该键关联的数字或符号。返回的是字符值,而不是数值。如果该键不是数字,而是符号,则返回该符号。
4338    此方法旨在支持键盘上的拨号盘和其他数字或符号输入,其中某些键兼具字母和符号键的功能。此方法返回与该键关联的数字或符号,与用户是否按下了所需的修饰键无关。
4339    例如,在一个特定的键盘上,按下 ALT 时,QWERTY 顶部行上的键会生成数字,因此 ALT-Q 会映射到“1”。因此,对于该键盘,当使用 KEYCODE_Q 调用 getNumber 时,它会返回“1”,以便用户可以在有意义时不按 ALT 来输入数字。
4340    返回:关联的数字或符号字符,如果没有,则返回 0。
4341    */
4342    #[java_method]
4343    pub fn get_number(&self) -> char {}
4344
4345    /**
4346    如果此键产生字形,则返回 true。
4347    如果此键是打印键,则返回 true。
4348    */
4349    #[java_method]
4350    pub fn is_printing_key(&self) -> bool {}
4351
4352    /**
4353    返回表示指定操作的符号名称的字符串,例如“ACTION_DOWN”,如果未知,则返回等效的数字常量,例如“35”。
4354    返回:指定操作的符号名称。
4355    `action` 操作。
4356    */
4357    #[java_method]
4358    pub fn action_to_string(action: i32) -> String {}
4359
4360    //noinspection SpellCheckingInspection
4361    /**
4362    返回表示指定键码的符号名称的字符串,例如“KEYCODE_A”、“KEYCODE_DPAD_UP”或等效数字常量(如“1001”(如果未知)。
4363    此函数主要用于调试、日志记录和测试。它不特定于语言环境,也不旨在以面向用户的方式使用。
4364    返回:指定键码的符号名称。
4365    `key_code` 键码。
4366    */
4367    #[java_method]
4368    pub fn key_code_to_string(key_code: i32) -> String {}
4369
4370    /**
4371    通过其符号名称(例如“KEYCODE_A”)或等效数字常量(例如“29”)获取键码。对于符号名称,从 Build.VERSION_CODES.Q 开始,前缀“KEYCODE_”是可选的。
4372    返回:键码,如果未找到,则返回 KEYCODE_UNKNOWN。
4373    `symbolic_name` 键码的符号名称。
4374    */
4375    #[java_method]
4376    pub fn key_code_from_string(symbolic_name: String) -> i32 {}
4377
4378    /**
4379    返回一个字符串,该字符串表示指定的组合元键修饰符状态标志的符号名称,例如“0”、“META_SHIFT_ON”、“META_ALT_ON|META_SHIFT_ON”或等效数字常量,例如“0x10000000”(如果未知)。
4380    返回:指定的组合元状态标志的符号名称。
4381    `meta_state` 元状态。
4382    */
4383    #[java_method]
4384    pub fn meta_state_to_string(meta_state: i32) -> String {}
4385}
4386
4387/// 当视图被点击并保持时调用的回调的接口定义。
4388#[allow(non_camel_case_types)]
4389#[java_interface(name = "android/view/View$OnLongClickListener")]
4390pub trait View_OnLongClickListener {
4391    /**
4392    当单击并按住某个视图时调用。
4393    返回:如果回调消耗了长按,则返回 true,否则返回 false。
4394    `v` 被单击并按住的视图。
4395    */
4396    fn on_long_click(&self, v: View) -> bool;
4397}
4398
4399#[doc(hidden)]
4400#[allow(non_camel_case_types)]
4401#[java_class(name = "android/view/View$OnLongClickListenerImpl")]
4402pub struct View_OnLongClickListenerImpl(Box<dyn Fn(View) -> bool + Send + Sync>);
4403
4404impl Default for View_OnLongClickListenerImplDefault {
4405    fn default() -> Self {
4406        Self(Box::new(|v| unimplemented!("{:?}", v)))
4407    }
4408}
4409
4410#[java_implement]
4411impl View_OnLongClickListener for View_OnLongClickListenerImpl {
4412    fn on_long_click(&self, v: View) -> bool {
4413        self.0(v)
4414    }
4415}
4416
4417/**
4418当硬件按键事件被分派到此视图时,要调用的回调的接口定义。回调将在按键事件被提供给视图之前被调用。
4419这仅适用于硬件键盘;软件输入法没有义务触发此侦听器。
4420*/
4421#[allow(non_camel_case_types)]
4422#[java_interface(name = "android/view/View$OnKeyListener")]
4423pub trait View_OnKeyListener {
4424    /**
4425    当硬件按键被分派到视图时调用。这允许侦听器有机会在目标视图之前做出响应。软件键盘中的按键通常不会触发此方法,尽管有些情况下可能会选择这样做。
4426    不要假设软件输入法必须基于按键;即使如此,它也可能以不同于您预期的方式使用按键,因此无法可靠地捕获软输入按键。
4427    返回:如果侦听器已使用事件,则返回 True,否则返回 false。
4428    `v` 按键被分派到的视图。
4429    `key_code` 按下的物理按键的代码
4430    `event` 包含有关事件的完整信息的 KeyEvent 对象。
4431    */
4432    fn on_key(&self, v: View, key_code: i32, event: KeyEvent) -> bool;
4433}
4434
4435#[doc(hidden)]
4436#[allow(non_camel_case_types)]
4437#[java_class(name = "android/widget/TextView$OnEditorActionListenerImpl")]
4438pub struct View_OnKeyListenerImpl(Box<dyn Fn(View, i32, KeyEvent) -> bool + Send + Sync>);
4439
4440impl Default for View_OnKeyListenerImplDefault {
4441    fn default() -> Self {
4442        Self(Box::new(|v, key_code, event| {
4443            unimplemented!("{:?}, {}, {:?}", v, key_code, event)
4444        }))
4445    }
4446}
4447
4448impl View_OnKeyListenerImpl {
4449    pub fn from_fn(
4450        func: impl Fn(/* v */ View, /* key_code */ i32, /* event */ KeyEvent) -> bool
4451            + Send
4452            + Sync
4453            + 'static,
4454    ) -> Arc<Self> {
4455        Self::new(View_OnKeyListenerImplDefault(Box::new(func)))
4456    }
4457}
4458
4459#[java_implement]
4460impl View_OnKeyListener for View_OnKeyListenerImpl {
4461    fn on_key(&self, v: View, key_code: i32, event: KeyEvent) -> bool {
4462        self.0(v, key_code, event)
4463    }
4464}
4465
4466/**
4467顶级窗口外观和行为策略的抽象基类。该类的实例应用于添加到窗口管理器的顶级视图。
4468它提供标准 UI 策略,例如背景、标题区域、默认按键处理等。框架将代表应用程序实例化该类的实现。
4469*/
4470#[java_class(name = "android/view/Window")]
4471pub struct Window;
4472
4473impl Window {
4474    /// 标记“选项面板”功能。默认情况下启用此功能。
4475    pub const FEATURE_OPTIONS_PANEL: i32 = 0;
4476
4477    /// 标记为“无标题”功能,关闭屏幕顶部的标题。
4478    pub const FEATURE_NO_TITLE: i32 = 1;
4479
4480    /// 进度指示器功能的标志。
4481    #[deprecated(note = "从 API 21 开始不再支持。")]
4482    pub const FEATURE_PROGRESS: i32 = 2;
4483
4484    /// 标记在标题栏左侧有一个图标
4485    pub const FEATURE_LEFT_ICON: i32 = 3;
4486
4487    /// 标记在标题栏右侧有图标
4488    pub const FEATURE_RIGHT_ICON: i32 = 4;
4489
4490    /// 标记不确定的进度。
4491    #[deprecated(note = "从 API 21 开始不再支持。")]
4492    pub const FEATURE_INDETERMINATE_PROGRESS: i32 = 5;
4493
4494    /// 上下文菜单的标志。默认情况下启用该标志。
4495    pub const FEATURE_CONTEXT_MENU: i32 = 6;
4496
4497    /// 标记自定义标题。您不能将此功能与其他标题功能结合使用。
4498    pub const FEATURE_CUSTOM_TITLE: i32 = 7;
4499
4500    /// 用于启用操作栏的标志。某些设备默认启用该功能。操作栏取代了标题栏,并为某些设备上的屏幕菜单按钮提供了备用位置。
4501    pub const FEATURE_ACTION_BAR: i32 = 8;
4502
4503    /**
4504    用于请求覆盖窗口内容的操作栏的标志。通常,操作栏将位于窗口内容上方的空间中,但如果此功能与 FEATURE_ACTION_BAR 一起请求,它将覆盖在窗口内容本身上。如果您希望应用能够更好地控制操作栏的显示方式,例如让应用内容在具有透明背景的操作栏下方滚动,或者在应用内容上方显示透明/半透明的操作栏,这将非常有用。
4505    此模式与 View#SYSTEM_UI_FLAG_FULLSCREEN View.SYSTEM_UI_FLAG_FULLSCREEN 特别有用,它允许您结合其他屏幕装饰无缝隐藏操作栏。
4506    从 android.os.Build.VERSION_CODES#JELLY_BEAN 开始,当 ActionBar 处于此模式时,它将调整提供给 View#fitSystemWindows(android.graphics.Rect) View.fitSystemWindows(Rect) 的插入图以包含操作栏覆盖的内容,因此您可以在该空间内进行布局。
4507    */
4508    pub const FEATURE_ACTION_BAR_OVERLAY: i32 = 9;
4509
4510    /// 用于指定操作栏不存在时操作模式行为的标志。如果启用了覆盖,则允许操作模式 UI 覆盖现有窗口内容。
4511    pub const FEATURE_ACTION_MODE_OVERLAY: i32 = 10;
4512
4513    /// 标记用于请求无装饰窗口,该窗口可通过从左侧滑动来关闭。
4514    #[deprecated(note = "滑动关闭功能不再起作用。")]
4515    pub const FEATURE_SWIPE_TO_DISMISS: i32 = 11;
4516
4517    /**
4518    请求窗口内容更改的标志应使用 TransitionManager 进行动画处理。
4519    TransitionManager 使用 setTransitionManager(android.transition.TransitionManager) 设置。如果没有设置,则使用默认的 TransitionManager。
4520    */
4521    pub const FEATURE_CONTENT_TRANSITIONS: i32 = 12;
4522
4523    /// 通过发送或接收使用 android.app.ActivityOptions#makeSceneTransitionAnimation(android.app.Activity, android.util.Pair[]) 或 android.app.ActivityOptions#makeSceneTransitionAnimation(android.app.Activity, View, String) 创建的 ActivityOptions 包,使活动能够运行活动转换。
4524    pub const FEATURE_ACTIVITY_TRANSITIONS: i32 = 13;
4525
4526    /// 最大值用作功能ID
4527    pub const FEATURE_MAX: i32 = Self::FEATURE_ACTIVITY_TRANSITIONS;
4528
4529    /// 将进度条的可见性设置为 VISIBLE 的标志。
4530    #[deprecated(note = "从API 21开始,不再支持feature_progress和相关方法。")]
4531    pub const PROGRESS_VISIBILITY_ON: i32 = -1;
4532
4533    /// 将进度条的可见性设置为 GONE 的标志。
4534    #[deprecated(note = "从API 21开始,不再支持feature_progress和相关方法。")]
4535    pub const PROGRESS_VISIBILITY_OFF: i32 = -2;
4536
4537    /// 用于设置进度条不确定模式的标志。
4538    #[deprecated(note = "从 API 21 开始不再支持 FEATURE_INDETERMINATE_PROGRESS 和相关方法。")]
4539    pub const PROGRESS_INDETERMINATE_ON: i32 = -3;
4540
4541    /// 用于关闭进度条不确定模式的标志。
4542    #[deprecated(note = "从 API 21 开始不再支持 FEATURE_INDETERMINATE_PROGRESS 和相关方法。")]
4543    pub const PROGRESS_INDETERMINATE_OFF: i32 = -4;
4544
4545    /// (主要) 进度的起始值。
4546    #[deprecated(note = "从 API 21 开始不再支持 FEATURE_PROGRESS 和相关方法。")]
4547    pub const PROGRESS_START: i32 = 0;
4548
4549    /// (主要) 进度的结束值。
4550    #[deprecated(note = "从 API 21 开始不再支持 FEATURE_PROGRESS 和相关方法。")]
4551    pub const PROGRESS_END: i32 = 10000;
4552
4553    /// 次要进度的最低可能值。
4554    #[deprecated(note = "从 API 21 开始不再支持 FEATURE_PROGRESS 和相关方法。")]
4555    pub const PROGRESS_SECONDARY_START: i32 = 20000;
4556
4557    /// 次要进度的最高可能值。
4558    #[deprecated(note = "从 API 21 开始不再支持 FEATURE_PROGRESS 和相关方法。")]
4559    pub const PROGRESS_SECONDARY_END: i32 = 30000;
4560
4561    /// 使用自定义背景时状态栏背景视图的 transitionName。
4562    pub const STATUS_BAR_BACKGROUND_TRANSITION_NAME: &'static str = "android:status:background";
4563
4564    /// 使用自定义背景时导航栏背景视图的 transitionName。
4565    pub const NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME: &'static str =
4566        "android:navigation:background";
4567
4568    /// 标志以允许主题驱动窗口字幕控件的颜色。与setDecorCaptionShade(int)一起使用。这是默认值。
4569    pub const DECOR_CAPTION_SHADE_AUTO: i32 = 0;
4570
4571    /// 用于在窗口标题上设置浅色控件的标志。与 setDecorCaptionShade(int) 一起使用。
4572    pub const DECOR_CAPTION_SHADE_LIGHT: i32 = 1;
4573
4574    /// 用于在窗口标题上设置深色控件的标志。与 setDecorCaptionShade(int) 一起使用。
4575    pub const DECOR_CAPTION_SHADE_DARK: i32 = 2;
4576
4577    #[doc(hidden)]
4578    #[java_constructor]
4579    pub fn new(context: &Context) -> Self {}
4580
4581    /**
4582    返回此窗口策略正在运行的上下文,用于检索资源和其他信息。
4583    返回:上下文提供给构造函数的上下文。
4584    */
4585    #[java_method]
4586    pub fn get_context(&self) -> Context {}
4587
4588    /**
4589    设置此窗口的容器。如果未设置,DecorWindow 将作为顶级窗口运行;否则,它将与容器协商以适当地显示自身。
4590    `container` 所需的容器窗口。
4591    */
4592    #[java_method]
4593    pub fn set_container(&self, container: Self) {}
4594
4595    /**
4596    返回此窗口的容器。
4597    返回:窗口包含的窗口,如果这是顶级窗口,则返回 null。
4598    */
4599    #[java_method]
4600    pub fn get_container(&self) -> Self {}
4601
4602    #[doc(hidden)]
4603    #[java_method]
4604    pub fn has_children(&self) -> bool {}
4605
4606    #[doc(hidden)]
4607    #[java_method]
4608    pub fn destroy(&self) {}
4609
4610    #[doc(hidden)]
4611    #[java_method]
4612    pub fn is_destroyed(&self) -> bool {}
4613
4614    /**
4615    返回允许此窗口显示其自己的窗口的窗口管理器。
4616    返回:WindowManager ViewManager。
4617    */
4618    #[java_method]
4619    pub fn get_window_manager<WM: WindowManager>(&self) -> WM {}
4620
4621    #[doc(hidden)]
4622    #[java_method]
4623    pub fn dispatch_on_window_dismissed(
4624        &self,
4625        finish_task: bool,
4626        suppress_window_transition: bool,
4627    ) {
4628    }
4629
4630    #[doc(hidden)]
4631    #[java_method]
4632    pub fn dispatch_on_window_swipe_dismissed(&self) {}
4633
4634    #[doc(hidden)]
4635    #[java_method]
4636    pub fn get_system_bar_appearance(&self) -> i32 {}
4637
4638    #[doc(hidden)]
4639    #[java_method]
4640    pub fn dispatch_on_system_bar_appearance_changed(&self, appearance: i32) {}
4641
4642    #[doc(hidden)]
4643    #[java_method]
4644    pub fn on_draw_legacy_navigation_bar_background_changed(
4645        &self,
4646        draw_legacy_navigation_bar_background: bool,
4647    ) -> bool {
4648    }
4649
4650    /**
4651    防止非系统覆盖窗口绘制在此窗口之上。
4652    `hide` 是否应隐藏非系统覆盖窗口。
4653    */
4654    #[java_method]
4655    pub fn set_hide_overlay_windows(&self, hide: bool) {}
4656
4657    /**
4658    返回此窗口是否以浮动样式显示(基于样式/主题中的 android.R.attr.windowIsFloating 属性)。
4659    返回:如果窗口配置为浮动显示在它后面的任何内容之上,则返回 true。
4660    */
4661    #[java_method]
4662    pub fn is_floating(&self) -> bool {}
4663
4664    /**
4665    设置窗口的宽度和高度布局参数。这两个参数的默认值均为 MATCH_PARENT;您可以将其更改为 WRAP_CONTENT 或绝对值,以使窗口不全屏显示。
4666    `width` 所需的窗口布局宽度。
4667    `height` 所需的窗口布局高度。
4668    */
4669    #[java_method]
4670    pub fn set_layout(&self, width: i32, height: i32) {}
4671
4672    /**
4673    根据重力常数设置窗口的重力。这控制窗口管理器在整个窗口中的定位方式;它仅在使用 WRAP_CONTENT 作为布局宽度或高度时有用。
4674    `gravity` 所需的重力常数。
4675    */
4676    #[java_method]
4677    pub fn set_gravity(&self, gravity: i32) {}
4678
4679    /**
4680    根据 WindowManager.LayoutParams 类型设置窗口的类型。
4681    `type` 新的窗口类型(参见 WindowManager.LayoutParams)。
4682    */
4683    #[java_method]
4684    pub fn set_type(&self, r#type: i32) {}
4685
4686    /**
4687    根据 PixelFormat 类型设置窗口的格式。这将覆盖窗口根据其窗口装饰选择的默认格式。
4688    `format` 新的窗口格式(参见 PixelFormat)。使用 PixelFormat。UNKNOWN 允许窗口选择格式。
4689    */
4690    #[java_method]
4691    pub fn set_format(&self, format: i32) {}
4692
4693    /**
4694    根据 WindowManager.LayoutParams.windowAnimations 指定要用于窗口的自定义动画。此处提供除 0 之外的任何值都将覆盖窗口通常从其主题中检索的动画。
4695    */
4696    #[java_method]
4697    pub fn set_window_animations(&self, res_id: i32) {}
4698
4699    /**
4700    根据 WindowManager.LayoutParams.softInputMode 为窗口指定一个显式软输入模式。在此处提供除“未指定”之外的任何内容都将覆盖窗口通常从其主题中检索的输入模式。
4701    */
4702    #[java_method]
4703    pub fn set_soft_input_mode(&self, mode: i32) {}
4704
4705    /**
4706    按照 setFlags 的说明,使用便捷函数设置 flags 中指定的标志位。
4707    `flags` 要设置的标志位。
4708    */
4709    #[java_method]
4710    pub fn add_flags(&self, flags: i32) {}
4711
4712    /**
4713    添加私有标志位。请参阅各个标志以了解所需的权限。
4714    `flags` 要添加的标志位。
4715    */
4716    #[java_method]
4717    pub fn add_private_flags(&self, flags: i32) {}
4718
4719    /**
4720    添加系统标志位。请参阅各个标志以了解所需的权限。
4721    注意:仅适用于可更新的系统组件(又称主线模块)
4722    `flags` 要添加的标志位。
4723    */
4724    #[java_method]
4725    pub fn add_system_flags(&self, flags: i32) {}
4726
4727    /**
4728    根据 WindowManager.LayoutParams 标志设置窗口的标志。
4729    请注意,在创建窗口装饰之前必须设置一些标志(通过第一次调用 setContentView(View, ViewGroup.LayoutParams) 或 getDecorView():WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 和 WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR。
4730    这些将根据 android.R.attr.windowIsFloating 属性为您设置。
4731    `flags` 新的窗口标志(请参阅 WindowManager.LayoutParams)。
4732    `mask` 要修改的窗口标志位。
4733    */
4734    #[java_method]
4735    pub fn set_flags(&self, flags: i32, mask: i32) {}
4736
4737    /**
4738    设置窗口的请求颜色模式。请求的颜色模式可能会覆盖窗口的像素格式。
4739    请求的颜色模式必须是 ActivityInfo.COLOR_MODE_DEFAULT、ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT 或 ActivityInfo.COLOR_MODE_HDR 之一。
4740    请求的颜色模式不保证一定会被遵守。有关更多信息,请参阅 getColorMode()。
4741    */
4742    #[java_method]
4743    pub fn set_color_mode(&self, color_mode: i32) {}
4744
4745    /**
4746    如果 is_preferred 为 true,则此方法要求当此窗口在屏幕上可见时,连接的显示器进行最少的后期处理。否则,它要求显示器切换回标准图像处理。
4747    默认情况下,显示器不进行最少的后期处理,如果需要,则不应使用此方法。
4748    当低延迟比图像增强处理具有更高的优先级时(例如,对于游戏或视频会议),应将其与 is_preferred=true 一起使用。
4749    当屏幕上不再显示请求最少后期处理的窗口时,显示器将自动返回到标准图像处理模式。如果之前已为此窗口调用 setPreferMinimalPostProcessing(true) 并且不再需要最少的后期处理,则可以使用 setPreferMinimalPostProcessing(false)。
4750    如果显示器接收器通过 HDMI 连接,设备将开始发送启用了自动低延迟模式和游戏内容类型的信息帧。这会将连接的显示器切换到最小图像处理模式(如果可用),从而减少延迟,改善游戏或视频会议应用程序的用户体验。
4751    有关更多信息,请参阅 HDMI 2.1 规范。如果显示接收器具有内部连接或使用 HDMI 以外的其他协议,效果可能类似但由实现定义。
4752    可以通过系统设置菜单中的用户设置禁用切换到具有最少后期处理模式的功能。在这种情况下,此方法不执行任何操作。
4753    `is_preferred` 指示此窗口是否优先使用最少后期处理(is_preferred=true)或不优先使用(is_preferred=false)。
4754    */
4755    #[java_method]
4756    pub fn set_prefer_minimal_post_processing(&self, is_preferred: bool) {}
4757
4758    /**
4759    返回窗口所请求的颜色模式,可以是 ActivityInfo.COLOR_MODE_DEFAULT、ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT 或 ActivityInfo.COLOR_MODE_HDR 之一。
4760    如果请求的是 ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT,则窗口可能不会处于广色域模式,具体取决于设备和显示器对该模式的支持。使用 isWideColorGamut 确定窗口当前是否处于广色域模式。
4761    */
4762    #[java_method]
4763    pub fn get_color_mode(&self) -> i32 {}
4764
4765    /**
4766    如果此窗口的颜色模式为 ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT、显示器具有宽色域且此设备支持宽色域渲染,则返回 true。
4767    */
4768    #[java_method]
4769    pub fn is_wide_color_gamut(&self) -> bool {}
4770
4771    /**
4772    使用 WindowManager.LayoutParams.FLAG_DIM_BEHIND 时设置窗口后面的暗淡量。这将覆盖窗口根据其主题选择的默认暗淡量。
4773    `amount` 新的暗淡量,从 0(无暗淡)到 1(完全暗淡)。
4774    */
4775    #[java_method]
4776    pub fn set_dim_amount(&self, amount: f32) {}
4777
4778    /**
4779    设置装饰视图是否应适合 WindowInsets 的根级内容视图。如果设置为 true,框架将检查现已弃用的 View.SYSTEM_UI_LAYOUT_FLAGS 以及 WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE 标志,并根据这些标志调整内容。
4780    如果设置为 false,框架将不会将内容视图调整到插图中,而只会将 WindowInsets 传递到内容视图。
4781    `decor_fits_system_windows` 装饰视图是否应适合插图的根级内容视图。
4782    */
4783    #[java_method]
4784    pub fn set_decor_fits_system_windows(&self, decor_fits_system_windows: bool) {}
4785
4786    #[doc(hidden)]
4787    #[java_method]
4788    pub fn decor_fits_system_windows(&self) -> bool {}
4789
4790    /**
4791    指定自定义窗口属性。请注意:您在此处提供的布局参数通常应来自之前使用 getAttributes() 检索的值;您可能不想盲目地创建和应用自己的值,因为这会抹去框架设置的任何您不感兴趣的值。
4792    `a` 新的窗口属性,它将完全覆盖任何当前值。
4793    */
4794    #[java_method]
4795    pub fn set_attributes(&self, a: &WindowManager_LayoutParams) {}
4796
4797    /**
4798    查询与此面板关联的当前窗口属性。
4799    返回:WindowManager.LayoutParams 要么是现有的窗口属性对象,要么是新创建的对象(如果没有)。
4800    */
4801    #[java_method]
4802    pub fn get_attributes(&self) -> WindowManager_LayoutParams {}
4803
4804    #[doc(hidden)]
4805    #[java_method]
4806    pub fn set_close_on_touch_outside(&self, close: bool) {}
4807
4808    #[doc(hidden)]
4809    #[java_method]
4810    pub fn set_close_on_touch_outside_if_not_set(&self, close: bool) {}
4811
4812    #[doc(hidden)]
4813    #[java_method]
4814    pub fn always_read_close_on_touch_attr(&self) {}
4815
4816    /**
4817    设置调用窗口的持续性能要求。
4818    `enable` 禁用或启用该模式。
4819    */
4820    #[java_method]
4821    pub fn set_sustained_performance_mode(&self, enable: bool) {}
4822
4823    /**
4824    启用扩展屏幕功能。必须在setContentView()之前调用。只要在setContentView()之前,就可以根据需要多次调用。
4825    如果未调用,则不会提供扩展功能。一旦要求,您就无法关闭功能。您可以使用feature_custom_title使用其他标题功能。
4826    返回:现在设置的功能。
4827    `feature_id` 所需的功能,定义为Window的常数。
4828    */
4829    #[java_method]
4830    pub fn request_feature(&self, feature_id: i32) -> bool {}
4831
4832    #[doc(hidden)]
4833    #[java_method]
4834    pub fn make_active(&self) {}
4835
4836    #[doc(hidden)]
4837    #[java_method]
4838    pub fn is_active(&self) -> bool {}
4839
4840    /**
4841    查找由 android.app.Activity.onCreate 中处理的 android:id XML 属性标识的视图。这将隐式调用 getDecorView 并产生所有相关副作用。
4842    注意:在大多数情况下(取决于编译器支持情况),结果视图会自动转换为目标类类型。如果目标类类型不受约束,则可能需要显式转换。
4843    返回:如果找到,则返回具有给定 ID 的视图,否则返回 null
4844    `id` 要搜索的 ID
4845    */
4846    #[java_method]
4847    pub fn find_view_by_id(&self, id: i32) -> Option<View> {}
4848
4849    /**
4850    查找由 android.app.Activity.onCreate 中处理的 android:id XML 属性标识的视图,如果 ID 无效或层次结构中没有匹配的视图,则抛出 IllegalArgumentException。
4851    注意:在大多数情况下 - 取决于编译器支持 - 生成的视图会自动转换为目标类类型。如果目标类类型不受约束,则可能需要显式转换。
4852    `id` 要搜索的 ID 返回:具有给定 ID 的视图。
4853    */
4854    #[java_method]
4855    pub fn require_view_by_id(&self, id: i32) -> Result<View, <Self as JType>::Error> {}
4856
4857    /**
4858    方便使用 setContentView(View, ViewGroup.LayoutParams) 将屏幕内容设置为显式视图。此视图直接放置在屏幕的视图层次结构中。它本身可以是一个复杂的视图层次结构。
4859    `layout_res_id` 要显示的内容视图资源ID。
4860    */
4861    #[java_method(overload = setContentView)]
4862    pub fn set_content_view_by_id(&self, layout_res_id: i32) {}
4863
4864    /**
4865    方便使用 setContentView(View, ViewGroup.LayoutParams) 将屏幕内容设置为显式视图。此视图直接放入屏幕的视图层次结构中。它本身可以是一个复杂的视图层次结构。
4866    `view` 要显示的所需内容。
4867    */
4868    #[java_method(overload = setContentView)]
4869    pub fn set_content_view_convenience(&self, view: &View) {}
4870
4871    /**
4872    将屏幕内容设置为显式视图。此视图直接放入屏幕的视图层次结构中。它本身可以是一个复杂的视图层次结构。
4873    请注意,调用此函数会“锁定”窗口的各种特性,从此时起,这些特性将无法更改:使用 requestFeature(int) 请求的功能,以及 setFlags(int, int) 中描述的某些窗口标志。如果设置了 FEATURE_CONTENT_TRANSITIONS,则将使用窗口的 TransitionManager 将内容从当前内容视图动画化为视图。
4874    `view` 需要显示的内容。
4875    `params` 视图的布局参数。
4876    */
4877    #[java_method]
4878    pub fn set_content_view(&self, view: &View, params: &ViewGroup_LayoutParams) {}
4879
4880    /**
4881    setContentView(View, ViewGroup.LayoutParams) 的变体,用于向屏幕添加额外的内容视图。在屏幕中任何现有视图之后添加 - 现有视图不会被删除。
4882    `view` 要显示的内容。
4883    `params` 视图的布局参数。
4884    */
4885    #[java_method]
4886    pub fn add_content_view(&self, view: &View, params: &ViewGroup_LayoutParams) {}
4887
4888    /// 删除用作屏幕内容的视图。
4889    #[java_method]
4890    pub fn clear_content_view(&self) {}
4891
4892    /**
4893    返回此窗口中当前具有焦点的视图,如果没有,则返回 null。
4894    请注意,这不会在任何包含窗口中查找。
4895    返回:View 具有焦点的当前视图或 null。
4896    */
4897    #[java_method]
4898    pub fn get_current_focus(&self) -> Option<View> {}
4899
4900    #[doc(hidden)]
4901    #[java_method]
4902    pub fn set_title<CS: CharSequence>(&self, title: Option<CS>) {}
4903
4904    #[doc(hidden)]
4905    #[java_method]
4906    pub fn set_title_color(&self, text_color: i32) {}
4907
4908    #[doc(hidden)]
4909    #[java_method]
4910    pub fn open_panel(&self, feature_id: i32, event: &KeyEvent) {}
4911
4912    #[doc(hidden)]
4913    #[java_method]
4914    pub fn close_panel(&self, feature_id: i32) {}
4915
4916    #[doc(hidden)]
4917    #[java_method]
4918    pub fn toggle_panel(&self, feature_id: i32, event: &KeyEvent) {}
4919
4920    #[doc(hidden)]
4921    #[java_method]
4922    pub fn invalidate_panel_menu(&self, feature_id: i32) {}
4923
4924    #[doc(hidden)]
4925    #[java_method]
4926    pub fn perform_panel_shortcut(
4927        &self,
4928        feature_id: i32,
4929        key_code: i32,
4930        event: &KeyEvent,
4931        flags: i32,
4932    ) -> bool {
4933    }
4934
4935    #[doc(hidden)]
4936    #[java_method]
4937    pub fn perform_panel_identifier_action(&self, feature_id: i32, id: i32, flags: i32) -> bool {}
4938
4939    #[doc(hidden)]
4940    #[java_method]
4941    pub fn close_all_panels(&self) {}
4942
4943    #[doc(hidden)]
4944    #[java_method]
4945    pub fn perform_context_menu_identifier_action(&self, id: i32, flags: i32) -> bool {}
4946
4947    /**
4948    设置窗口高度。对此属性的更改会立即生效,并将导致重新创建窗口表面。
4949    这是一项昂贵的操作,因此不应对此属性进行动画处理。
4950    `elevation` 窗口高度。
4951    */
4952    #[java_method]
4953    pub fn set_elevation(&self, elevation: f32) {}
4954
4955    /**
4956    获取窗口高度。
4957    */
4958    #[java_method]
4959    pub fn get_elevation(&self) -> f32 {}
4960
4961    /**
4962    设置是否应将窗口内容剪裁到窗口背景的轮廓。
4963    `clip_to_outline` 是否应将窗口内容剪裁到窗口背景的轮廓。
4964    */
4965    #[java_method]
4966    pub fn set_clip_to_outline(&self, clip_to_outline: bool) {}
4967
4968    /**
4969    将此窗口的背景更改为可绘制资源。将背景设置为 null 将使窗口不透明。要使窗口透明,您可以使用空的 可绘制资源(例如颜色为 0 的 ColorDrawable 或系统可绘制资源 android:drawable/empty。)
4970    `res_id` 将作为新背景安装的可绘制资源的资源标识符。
4971    */
4972    #[java_method]
4973    pub fn set_background_drawable_resource(&self, res_id: i32) {}
4974
4975    /**
4976    在窗口边界内模糊窗口后面的屏幕。模糊的密度由模糊半径设置。半径定义邻近区域的大小,从中对像素进行平均以形成每个像素的最终颜色。
4977    该操作近似于高斯模糊。半径为 0 表示无模糊。半径越大,模糊越密集。
4978    窗口背景可绘制对象绘制在模糊区域的顶部。模糊区域边界和圆角将模仿背景可绘制对象的边界和圆角。
4979    要使模糊区域可见,窗口必须是半透明的(请参阅 android.R.attr.windowIsTranslucent)和浮动的(请参阅 android.R.attr.windowIsFloating)。
4980    请注意与 WindowManager.LayoutParams.setBlurBehindRadius 的区别,它模糊了窗口后面的整个屏幕。背景模糊仅在窗口边界内模糊后面的屏幕。
4981    由于 GPU 限制,某些设备可能不支持跨窗口模糊。它也可以在运行时禁用,例如在省电模式下、使用多媒体隧道时或请求最少的后期处理时。
4982    在这种情况下,不会计算或绘制模糊,从而导致窗口背景透明。为了避免这种情况,应用程序可能需要将其主题更改为不使用模糊的主题。
4983    要监听跨窗口模糊启用/禁用事件,请使用 WindowManager.addCrossWindowBlurEnabledListener。
4984    `blur_radius` 用于窗口背景模糊的模糊半径(以像素为单位)
4985    */
4986    #[java_method]
4987    pub fn set_background_blur_radius(&self, blur_radius: i32) {}
4988
4989    /**
4990    根据资源标识符设置此窗口的可绘制功能的值。在调用此函数之前,您必须已调用 requestFeature(featureId)。
4991    `feature_id` 要更改的所需可绘制功能,由 Window 定义为常量。
4992    `res_id` 所需图像的资源标识符。
4993    */
4994    #[java_method]
4995    pub fn set_feature_drawable_resource(&self, feature_id: i32, res_id: i32) {}
4996
4997    /**
4998    为给定的可绘制功能设置自定义 alpha 值,控制背景透过该功能可见的程度。
4999    `feature_id` 需要更改的可绘制功能。功能是Window定义的常量。
5000    `alpha` – alpha 量,0 表示完全透明,255 表示完全不透明。
5001    */
5002    #[java_method]
5003    pub fn set_feature_drawable_alpha(&self, feature_id: i32, alpha: i32) {}
5004
5005    /**
5006    设置特征的整数值。值的范围取决于所设置的特征。对于 FEATURE_PROGRESS,它应该从 0 到 10000。当值为 10000 时,进度完成,指示器隐藏。
5007    `feature_id` 需要更改的特征。特征是由 Window 定义的常量。
5008    `value` 特征的值。此值的解释特定于特征。
5009    */
5010    #[java_method]
5011    pub fn set_feature_int(&self, feature_id: i32, value: i32) {}
5012
5013    /**
5014    请求关键事件到达此活动。如果您的活动没有焦点视图,但活动仍需要处理关键事件,请使用此选项。
5015    */
5016    #[java_method]
5017    pub fn take_key_events(&self, get: bool) {}
5018
5019    /**
5020    由自定义窗口(如对话框)使用,将按键事件传递到视图层次结构中。应用程序开发人员不需要实现或调用此功能。
5021    */
5022    #[java_method]
5023    pub fn super_dispatch_key_event(&self, event: &KeyEvent) -> bool {}
5024
5025    /**
5026    查询顶层窗口装饰视图(包含标准窗口框架/装饰以及其中的客户端内容),可将其作为窗口添加到窗口管理器。
5027    请注意,首次调用此函数会“锁定”各种窗口特性,如 setContentView(View, ViewGroup.LayoutParams) 中所述。
5028    返回:返回顶层窗口装饰视图。
5029    */
5030    #[java_method]
5031    pub fn get_decor_view(&self) -> View {}
5032
5033    /**
5034    返回状态栏背景视图或null。
5035    */
5036    #[java_method]
5037    pub fn get_status_bar_background_view(&self) -> Option<View> {}
5038
5039    /// 导航栏背景视图或空。
5040    #[java_method]
5041    pub fn get_navigation_bar_background_view(&self) -> Option<View> {}
5042
5043    /**
5044    查询当前装饰视图,但前提是它已经创建;否则返回 null。
5045    返回:返回顶级窗口装饰或 null。
5046    */
5047    #[java_method]
5048    pub fn peek_decor_view(&self) -> Option<View> {}
5049
5050    #[doc(hidden)]
5051    #[java_method]
5052    pub fn save_hierarchy_state(&self) -> Bundle {}
5053
5054    #[doc(hidden)]
5055    #[java_method]
5056    pub fn restore_hierarchy_state(&self, saved_instance_state: &Bundle) {}
5057
5058    /**
5059    返回窗口上默认设置的功能位。
5060    `context` 用于访问资源的上下文
5061    */
5062    #[java_method]
5063    pub fn get_default_features(context: &Context) -> i32 {}
5064
5065    /**
5066    查询特定功能的可用性。
5067    如果该功能已启用,则返回 true,否则返回 false。
5068    `feature` 要检查的功能 ID
5069    */
5070    #[java_method]
5071    pub fn has_feature(&self, feature: i32) -> bool {}
5072
5073    #[doc(hidden)]
5074    #[java_method]
5075    pub fn set_child_int(&self, feature_id: i32, value: i32) {}
5076
5077    /**
5078    是此窗口的定义快捷键之一。
5079    `key_code` 从KeyEvent到检查的密钥代码。
5080    `event` 用于帮助检查的键。
5081    */
5082    #[java_method]
5083    pub fn is_shortcut_key(&self, key_code: i32, event: &KeyEvent) -> bool {}
5084
5085    #[doc(hidden)]
5086    #[java_method]
5087    pub fn set_volume_control_stream(&self, stream_type: i32) {}
5088
5089    #[doc(hidden)]
5090    #[java_method]
5091    pub fn get_volume_control_stream(&self) -> i32 {}
5092
5093    /**
5094    设置将影响此窗口 UI 的额外选项。
5095    `ui_options` 指定此窗口额外选项的标志。
5096    */
5097    #[java_method(overload = setUiOptions)]
5098    pub fn set_ui_options_convenience(&self, ui_options: i32) {}
5099
5100    /**
5101    设置将影响此窗口 UI 的额外选项。只有经过 mask 过滤的位才会被修改。
5102    `ui_options` 指定此窗口额外选项的标志。
5103    `mask` 指定应修改哪些选项的标志。其他选项将保持不变。
5104    */
5105    #[java_method]
5106    pub fn set_ui_options(&self, ui_options: i32, mask: i32) {}
5107
5108    /**
5109    设置此窗口的主图标。
5110    `res_id` 要设置的可绘制对象的资源 ID
5111    */
5112    #[java_method]
5113    pub fn set_icon(&self, res_id: i32) {}
5114
5115    /**
5116    设置此窗口的默认图标。这将被来自主题或其他显式设置的任何其他图标设置操作覆盖。
5117    */
5118    #[java_method]
5119    pub fn set_default_icon(&self, res_id: i32) {}
5120
5121    /**
5122    设置此窗口的徽标。徽标通常代替图标显示,但通常更宽,并且还传达窗口标题信息。
5123    `res_id` 要设置的可绘制对象的资源 ID
5124    */
5125    #[java_method]
5126    pub fn set_logo(&self, res_id: i32) {}
5127
5128    /**
5129    设置此窗口的默认徽标。这将被来自主题或其他明确设置的任何其他徽标设置操作覆盖。
5130    */
5131    #[java_method]
5132    pub fn set_default_logo(&self, res_id: i32) {}
5133
5134    /**
5135    在本地设置焦点。窗口应该已经设置了 WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE 标志。
5136    `has_focus` 此窗口是否具有焦点。
5137    `in_touch_mode` 此窗口是否处于触摸模式。
5138    */
5139    #[java_method]
5140    pub fn set_local_focus(&self, has_focus: bool, in_touch_mode: bool) {}
5141
5142    /**
5143    控制 setEnterTransition(Transition) 中设置的过渡如何与调用 Activity 的退出过渡重叠。如果为 true,过渡将尽快开始。如果为 false,过渡将等到远程退出过渡完成后再开始。默认值为 true。
5144    `allow` 如果为 true,则在可能时启动进入过渡;如果为 false,则等到退出过渡完成。
5145    */
5146    #[java_method]
5147    pub fn set_allow_enter_transition_overlap(&self, allow: bool) {}
5148
5149    /**
5150    返回 setEnterTransition(Transition) 中设置的过渡与调用 Activity 的退出过渡如何重叠。如果为 true,过渡将尽快开始。如果为 false,过渡将等到远程退出过渡完成后再开始。默认值为 true。
5151    返回:如果进入过渡应尽快开始,则返回 true;如果应等到退出过渡完成,则返回 false。
5152    */
5153    #[java_method]
5154    pub fn get_allow_enter_transition_overlap(&self) -> bool {}
5155
5156    /**
5157    控制在完成之后重新进入时,setExitTransition(Transition) 中设置的过渡如何与被调用 Activity 的退出过渡重叠。
5158    如果为 true,过渡将尽快开始。如果为 false,过渡将等到被调用 Activity 的退出过渡完成后再开始。默认值为 true。
5159    `allow` 如果为 true,则在可能时启动过渡;如果为 false,则等到被调用 Activity 的退出过渡完成。
5160    */
5161    #[java_method]
5162    pub fn set_allow_return_transition_overlap(&self, allow: bool) {}
5163
5164    /**
5165    返回setExitTransition(Transition)中的过渡设置如何与在完成后重新输入时的退出活动的退出过渡。如果是true,过渡将尽快开始。当false时,过渡将等到呼叫活动的退出过渡完成之前。默认值是true。
5166    返回:true当过渡应在可能的情况下启动或何时等待时,直到被调用活动的退出过渡完成为止。
5167    */
5168    #[java_method]
5169    pub fn get_allow_return_transition_overlap(&self) -> bool {}
5170
5171    /**
5172    返回使用 Activity Transition 调用时进入或离开 Activity 时窗口背景淡入淡出的持续时间(以毫秒为单位)。
5173    执行进入 过渡时,背景开始透明并淡入。这需要 FEATURE_ACTIVITY_TRANSITIONS。默认值为 300 毫秒。
5174    返回:进入 过渡期间窗口背景淡入不透明的持续时间。
5175    */
5176    #[java_method]
5177    pub fn get_transition_background_fade_duration(&self) -> i64 {}
5178
5179    /**
5180    设置在使用 Activity Transition 调用时进入或离开 Activity 时窗口背景淡入淡出的持续时间(以毫秒为单位)。
5181    执行进入过渡时,背景开始透明并淡入。这需要 FEATURE_ACTIVITY_TRANSITIONS。默认值为 300 毫秒。
5182    `fade_duration_millis` 进入过渡期间窗口背景淡入或淡出不透明的持续时间。
5183    */
5184    #[java_method]
5185    pub fn set_transition_background_fade_duration(&self, fade_duration_millis: i64) {}
5186
5187    /**
5188    如果共享元素在共享元素转换期间应使用 Overlay,则返回 true;如果共享元素应作为正常 View 层次结构的一部分进行动画处理,则返回 false。默认值为 true。
5189    返回:如果共享元素在共享元素转换期间应使用 Overlay,则返回 true;如果共享元素应作为正常 View 层次结构的一部分进行动画处理,则返回 false。
5190    */
5191    #[java_method]
5192    pub fn get_shared_elements_use_overlay(&self) -> bool {}
5193
5194    /**
5195    设置共享元素在共享元素转换期间是否应使用 Overlay。默认值为 true。
5196    `shared_elements_use_overlay` true 表示共享元素应使用 Overlay 进行转换,false 表示在正常视图层次结构内进行转换。
5197    */
5198    #[java_method]
5199    pub fn set_shared_elements_use_overlay(&self, shared_elements_use_overlay: bool) {}
5200
5201    /// 状态栏的颜色。
5202    #[java_method]
5203    pub fn get_status_bar_color(&self) -> i32 {}
5204
5205    /**
5206    将状态栏的颜色设置为彩色。要使此功能生效,窗口必须使用 WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 绘制系统栏背景,并且不得设置 WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS。
5207    如果颜色不是不透明的,请考虑设置 View.SYSTEM_UI_FLAG_LAYOUT_STABLE 和 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN。视图背景的 transitionName 将是“android:status:background”。
5208    */
5209    #[java_method]
5210    pub fn set_status_bar_color(&self, color: i32) {}
5211
5212    /// 导航栏的颜色。
5213    #[java_method]
5214    pub fn get_navigation_bar_color(&self) -> i32 {}
5215
5216    /**
5217    将导航栏的颜色设置为`color`。要使此功能生效,窗口必须使用 WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 绘制系统栏背景,并且不得设置 WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION。
5218    如果`color` 不透明,请考虑设置 View.SYSTEM_UI_FLAG_LAYOUT_STABLE 和 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION。视图背景的 transitionName 将是“android:navigation:background”。
5219    */
5220    #[java_method]
5221    pub fn set_navigation_bar_color(&self, color: i32) {}
5222
5223    /**
5224    在导航栏和应用内容之间显示指定颜色的分隔线。要使此功能生效,窗口必须使用 WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 绘制系统栏背景,并且不得设置 WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION。
5225    `divider_color` 细线的颜色。
5226    */
5227    #[java_method]
5228    pub fn set_navigation_bar_divider_color(&self, divider_color: i32) {}
5229
5230    /**
5231    查询导航栏分隔线的颜色。
5232    返回:导航栏分隔线的颜色。
5233    */
5234    #[java_method]
5235    pub fn get_navigation_bar_divider_color(&self) -> i32 {}
5236
5237    /**
5238    设置系统是否应在请求完全透明背景时确保状态栏具有足够的对比度。如果设置为此值,系统将确定是否需要使用纱布来确保状态栏与此应用的内容具有足够的对比度,并相应地设置适当的有效栏背景颜色。
5239    当状态栏颜色具有非零 alpha 值时,此属性的值无效。
5240    */
5241    #[java_method]
5242    pub fn set_status_bar_contrast_enforced(&self, ensure_contrast: bool) {}
5243
5244    /**
5245    返回系统是否在请求完全透明背景时确保状态栏具有足够的对比度。当状态栏颜色具有非零 alpha 值时,此属性的值无效。
5246    如果系统确保对比度,则返回 true,否则返回 false。
5247    */
5248    #[java_method]
5249    pub fn is_status_bar_contrast_enforced(&self) -> bool {}
5250
5251    /**
5252    设置系统是否应在请求完全透明背景时确保导航栏具有足够的对比度。如果设置为此值,系统将确定是否需要使用纱布来确保导航栏与此应用的内容具有足够的对比度,并相应地设置适当的有效栏背景颜色。
5253    当导航栏颜色具有非零 alpha 值时,此属性的值无效。
5254    */
5255    #[java_method]
5256    pub fn set_navigation_bar_contrast_enforced(&self, enforce_contrast: bool) {}
5257
5258    /**
5259    返回系统是否在请求完全透明背景时确保导航栏具有足够的对比度。当导航栏颜色具有非零 alpha 值时,此属性的值无效。
5260    如果系统确保对比度,则返回 true,否则返回 false。
5261    */
5262    #[java_method]
5263    pub fn is_navigation_bar_contrast_enforced(&self) -> bool {}
5264
5265    #[doc(hidden)]
5266    #[java_method]
5267    pub fn set_theme(&self, res_id: i32) {}
5268
5269    /**
5270    是否应将标题直接显示在内容上,而不是将内容向下推。这只会影响自由格式窗口,因为它们会显示标题。
5271    */
5272    #[java_method]
5273    pub fn set_overlay_with_decor_caption_enabled(&self, enabled: bool) {}
5274
5275    #[doc(hidden)]
5276    #[java_method]
5277    pub fn is_overlay_with_decor_caption_enabled(&self) -> bool {}
5278
5279    #[doc(hidden)]
5280    #[java_method]
5281    pub fn notify_restricted_caption_area_callback(
5282        &self,
5283        left: i32,
5284        top: i32,
5285        right: i32,
5286        bottom: i32,
5287    ) {
5288    }
5289
5290    /**
5291    设置标题控件的颜色。默认情况下,系统将尝试从主题中确定颜色。
5292    您可以使用 DECOR_CAPTION_SHADE_DARK、DECOR_CAPTION_SHADE_LIGHT 或 DECOR_CAPTION_SHADE_AUTO 覆盖此颜色。
5293    */
5294    #[java_method]
5295    pub fn set_decor_caption_shade(&self, decor_caption_shade: i32) {}
5296
5297    /**
5298    当活动从全屏模式变为多窗口模式或反之时调用。
5299    */
5300    #[java_method]
5301    pub fn on_multi_window_mode_changed(&self) {}
5302
5303    /**
5304    当活动转换为画中画模式或从画中画模式转换时调用。
5305    */
5306    #[java_method]
5307    pub fn on_picture_in_picture_mode_changed(&self, is_in_picture_in_picture_mode: bool) {}
5308}
5309
5310/// 上下文包装器允许您修改或替换包装上下文的主题。
5311#[java_class(name = "android/view/ContextThemeWrapper", extends = ContextWrapper)]
5312pub struct ContextThemeWrapper;
5313
5314/**
5315持有显示表面的人员的抽象接口。允许您控制表面大小和格式、编辑表面中的像素以及监视表面的变化。
5316此接口通常可通过 SurfaceView 类获得。当从运行其 SurfaceView 的线程以外的线程使用此接口时,您需要仔细阅读 lockCanvas 和 Callback.surfaceCreated() 方法。
5317*/
5318#[java_interface(name = "android/view/SurfaceHolder")]
5319pub trait SurfaceHolder {
5320    #[doc(hidden)]
5321    #[deprecated(note = "这将被忽略,该值在需要时自动设置。")]
5322    const SURFACE_TYPE_NORMAL: i32 = 0;
5323
5324    #[doc(hidden)]
5325    #[deprecated(note = "这将被忽略,该值在需要时自动设置。")]
5326    const SURFACE_TYPE_HARDWARE: i32 = 1;
5327
5328    #[doc(hidden)]
5329    #[deprecated(note = "这将被忽略,该值在需要时自动设置。")]
5330    const SURFACE_TYPE_GPU: i32 = 2;
5331
5332    #[doc(hidden)]
5333    #[deprecated(note = "这将被忽略,该值在需要时自动设置。")]
5334    const SURFACE_TYPE_PUSH_BUFFERS: i32 = 3;
5335
5336    /**
5337    为该持有者添加一个回调接口。一个持有者可以关联多个回调接口。
5338    `callback` 新的 回调接口。
5339    */
5340    fn add_callback<C: SurfaceHolder_Callback>(&self, callback: &C);
5341
5342    /**
5343    从此持有者中移除先前添加的回调接口。
5344    `callback` 要移除的回调接口。
5345    */
5346    fn remove_callback<C: SurfaceHolder_Callback>(&self, callback: &C);
5347
5348    /**
5349    使用此方法可查明表面是否正在通过回调方法创建。此方法旨在与 SurfaceHolder.Callback.surfaceChanged 一起使用。
5350    如果表面正在创建,则返回 true。
5351    */
5352    fn is_creating(&self) -> bool;
5353
5354    /**
5355    设置表面的类型。
5356    */
5357    #[deprecated(note = "此项将被忽略,需要时会自动设置此值。")]
5358    fn set_type(&self, r#type: i32);
5359
5360    /**
5361    使表面具有固定大小。它永远不会改变此大小。使用 SurfaceView 时,必须从运行 SurfaceView 窗口的同一线程调用此方法。
5362    `width` 表面的宽度。
5363    `height` – 表面的高度。
5364    */
5365    fn set_fixed_size(&self, width: i32, height: i32);
5366
5367    /**
5368    允许表面根据其容器的布局调整大小(这是默认设置)。启用此功能后,您应该监视 SurfaceHolder.Callback.surfaceChanged 以了解表面大小的变化。
5369    使用 SurfaceView 时,必须从运行 SurfaceView 窗口的同一线程调用此功能。
5370    */
5371    fn set_size_from_layout(&self);
5372
5373    /**
5374    设置表面所需的 PixelFormat。默认值为 OPAQUE。
5375    使用 SurfaceView 时,必须从运行 SurfaceView 窗口的同一线程调用此方法。 `format` 来自 PixelFormat 的常量。
5376    */
5377    fn set_format(&self, format: i32);
5378
5379    /**
5380    启用或禁用选项以在显示此表面时保持屏幕打开。默认值为 false,允许其关闭。可从任何线程安全地调用此功能。
5381    `screen_on` 设置为 true 以强制屏幕保持打开状态,设置为 false 以允许其关闭。
5382    */
5383    fn set_keep_screen_on(&self, screen_on: bool);
5384
5385    /**
5386    开始编辑表面中的像素。返回的 Canvas 可用于绘制到表面的位图中。如果表面尚未创建或无法编辑,则返回 null。
5387    您通常需要实现 Callback.surfaceCreated 以查明 Surface 何时可用。 Surface 的内容永远不会在 unlockCanvas() 和 lockCanvas() 之间保留,因此,必须写入 Surface 区域内的每个像素。
5388    此规则的唯一例外是指定脏矩形时,在这种情况下,将保留非脏像素。如果在 Surface 未准备好时(在 Callback.surfaceCreated 之前或 Callback.surfaceDestroyed 之后)反复调用此函数,您的调用将被限制到较慢的速率,以避免消耗 CPU。
5389    如果没有返回 null,此函数会在内部保持锁定,直到相应的 unlockCanvasAndPost 调用,从而防止 SurfaceView 在绘制表面时创建、销毁或修改表面。
5390    这比直接访问 Surface 更方便,因为您不需要在 Callback.surfaceDestroyed 中与绘图线程进行特殊同步。
5391    返回:Canvas 用于绘制到表面。
5392    */
5393    fn lock_canvas(&self) -> Option<Canvas>;
5394
5395    /**
5396    与 lockCanvas() 类似,但允许指定脏矩形。必须写入该矩形内的每个像素;但是脏矩形之外的像素将在下次调用 lockCanvas() 时保留。
5397    返回:Canvas 用于绘制到 Surface 中。
5398    `dirty` 将被修改的表面区域。
5399    */
5400    fn lock_canvas_dirty(&self, dirty: &Rect);
5401
5402    /**
5403    完成编辑表面中的像素。调用此方法后,表面的当前像素将显示在屏幕上,但其内容将丢失,特别是无法保证再次调用 lockCanvas() 时 Surface 的内容保持不变。
5404    `canvas` 先前由 lockCanvas() 返回的 Canvas。
5405    */
5406    fn unlock_canvas_and_post(&self, canvas: &Canvas);
5407
5408    /**
5409    查询表面的当前大小。注意:不要修改返回的 Rect。
5410    这只能从 SurfaceView 窗口的线程或在 lockCanvas() 内部调用才安全。
5411    返回:Rect 表面的尺寸。左侧和顶部始终为 0。
5412    */
5413    fn get_surface_frame(&self) -> Rect;
5414
5415    /**
5416    直接访问表面对象。Surface 可能并非始终可用 - 例如,当使用 SurfaceView 时,持有者的 Surface 直到视图连接到窗口管理器并执行布局以确定 Surface 的尺寸和屏幕位置时才会创建。
5417    因此,您通常需要实现 Callback.surfaceCreated 以查明 Surface 何时可用。
5418    请注意,如果您直接从另一个线程访问 Surface,则必须正确实现 Callback.surfaceCreated 和 Callback.surfaceDestroyed 以确保线程仅在 Surface 有效时访问它,并且 Surface 不会在线程使用时被破坏。此方法旨在供经常需要直接访问 Surface 对象(通常将其传递给本机代码)的框架使用。
5419    返回:Surface 表面。
5420    */
5421    fn get_surface(&self) -> Surface;
5422}
5423
5424/**
5425客户端可以实现此接口来接收有关表面更改的信息。与 SurfaceView 一起使用时,被保留的 Surface 仅在调用 surfaceCreated(SurfaceHolder) 和 surfaceDestroyed(SurfaceHolder) 之间可用。
5426回调使用 SurfaceHolder.addCallback 方法设置。
5427*/
5428#[allow(non_camel_case_types)]
5429#[java_interface(name = "android/view/SurfaceHolder$Callback")]
5430pub trait SurfaceHolder_Callback {
5431    type SH: SurfaceHolder;
5432
5433    /**
5434    首次创建表面后会立即调用此方法。此方法的实现应启动所需的任何渲染代码。
5435    请注意,只有一个线程可以绘制到 Surface 中,因此如果您的正常渲染将在另一个线程中进行,则不应在此处绘制到 Surface 中。
5436    `holder` – 正在创建其表面的 SurfaceHolder。
5437    */
5438    fn surface_created(&self, holder: Self::SH);
5439
5440    /**
5441    在对表面进行任何结构更改(格式或大小)后,会立即调用此方法。此时,您应该更新表面中的图像。在 SurfaceCreated 之后,此方法始终至少调用一次。
5442    `holder` 表面已更改的 SurfaceHolder。
5443    `format` 表面的新 PixelFormat。
5444    `width` 表面的新宽度。
5445    `height` 表面的新高度。
5446    */
5447    fn surface_changed(&self, holder: Self::SH, format: i32, width: i32, height: i32);
5448
5449    /**
5450    在表面被销毁之前立即调用此函数。从此调用返回后,您不应再尝试访问此表面。
5451    如果您有一个直接访问表面的渲染线程,则必须确保在从此函数返回之前该线程不再接触表面。
5452    `holder` – 正在销毁其表面的 SurfaceHolder。
5453    */
5454    fn surface_destroyed(&self, holder: Self::SH);
5455}
5456
5457/**
5458客户端可以实现此接口来接收有关表面更改的信息。与 SurfaceView 一起使用时,被保留的 Surface 仅在调用 surfaceCreated(SurfaceHolder) 和 surfaceDestroyed(SurfaceHolder) 之间可用。
5459回调使用 SurfaceHolder.addCallback 方法设置。
5460*/
5461#[allow(non_camel_case_types)]
5462#[java_interface(name = "android/view/SurfaceHolder$Callback2")]
5463pub trait SurfaceHolder_Callback2: SurfaceHolder_Callback {
5464    /**
5465    当应用程序需要重绘其表面的内容时调用,在调整其大小后或出于其他原因。通过在重绘完成之前不从此处返回,您可以确保用户不会看到处于不良状态的表面(在以新大小正确绘制之前)。
5466    这通常会先调用surfaceChanged。从O开始,可以实现surfaceRedrawNeededAsync以提供非阻塞实现。如果未实现surfaceRedrawNeededAsync,则将改为调用此方法。
5467    `holder` 其表面已更改的SurfaceHolder。
5468    */
5469    fn surface_redraw_needed(&self, holder: &Self::SH);
5470}
5471
5472//noinspection SpellCheckingInspection
5473/**
5474处理由屏幕合成器管理的原始缓冲区。 Surface 通常由图像缓冲区的使用者(例如 SurfaceTexture、android.media.MediaRecorder 或 android.renderscript.Allocation)创建或从其创建,并交给某种生产者(例如 OpenGL、MediaPlayer 或 CameraDevice)进行绘制。
5475注意:Surface 就像与其关联的使用者的弱引用。它本身不会阻止其父级使用者被回收。
5476*/
5477#[java_class(name = "android/view/Surface")]
5478pub struct Surface;
5479
5480/// 测试android.view
5481#[cfg(feature = "test_android_view")]
5482pub fn test() {
5483    use crate::{
5484        android::app::Activity,
5485        java::lang::{CharSequenceExt, CharSequenceImpl},
5486    };
5487    let act = Activity::fetch();
5488    let view = View::new(&act);
5489    assert!(view.to_string().starts_with("android.view.View"));
5490    view.announce_for_accessibility(&"通知".to_char_sequence::<CharSequenceImpl>());
5491    view.request_focus();
5492    view.clear_focus();
5493    assert_eq!(None, view.find_focus());
5494    view.set_activated(true);
5495    assert_eq!(true, view.is_activated());
5496    view.set_x(20f32);
5497    assert_eq!(20f32, view.get_x());
5498    view.set_y(30f32);
5499    assert_eq!(30f32, view.get_y());
5500    assert_eq!(None, view.find_view_by_id(0));
5501    view.set_content_description(Some("测试".to_char_sequence::<CharSequenceImpl>()));
5502    assert_eq!(
5503        Some("测试".to_char_sequence()),
5504        view.get_content_description::<CharSequenceImpl>()
5505    );
5506    view.set_id(3);
5507    assert_eq!(3, view.get_id());
5508    let l = View_OnClickListenerImpl::from_fn(|_| {
5509        println!("View is clicked.");
5510    });
5511    view.set_on_click_listener(l.as_ref());
5512    view.set_visibility(View::GONE);
5513    assert_eq!(View::GONE, view.get_visibility());
5514    view.set_context_clickable(true);
5515    assert_eq!(true, view.is_context_clickable());
5516    view.set_clickable(true);
5517    assert_eq!(true, view.is_clickable());
5518    view.set_long_clickable(true);
5519    assert_eq!(true, view.is_long_clickable());
5520    view.set_allow_click_when_disabled(true);
5521    view.perform_click();
5522    assert_eq!(None, view.get_parent::<ViewGroup>());
5523
5524    let params = ViewGroup_LayoutParams::new(
5525        ViewGroup_LayoutParams::MATCH_PARENT,
5526        ViewGroup_LayoutParams::MATCH_PARENT,
5527    );
5528    params.set_width(40);
5529    assert_eq!(40, params.get_width());
5530    params.set_height(50);
5531    assert_eq!(50, params.get_height());
5532    let params = ViewGroup_MarginLayoutParams::from_layout_params(&params);
5533    params.set_left_margin(20);
5534    assert_eq!(20, params.get_left_margin());
5535    params.set_top_margin(10);
5536    assert_eq!(10, params.get_top_margin());
5537    params.set_right_margin(30);
5538    assert_eq!(30, params.get_right_margin());
5539    params.set_bottom_margin(40);
5540    assert_eq!(40, params.get_bottom_margin());
5541    view.set_layout_params(&params);
5542    assert!(view.get_layout_params().is_some());
5543    let params = WindowManager_LayoutParams::new();
5544    params.set_flags(WindowManager_LayoutParams::FLAG_ALT_FOCUSABLE_IM);
5545    assert_eq!(
5546        WindowManager_LayoutParams::FLAG_ALT_FOCUSABLE_IM,
5547        params.get_flags()
5548    );
5549    let key_event = KeyEvent::new(KeyEvent::ACTION_DOWN, KeyEvent::KEYCODE_0);
5550    assert_eq!(KeyEvent::ACTION_DOWN, key_event.get_action());
5551    assert_eq!(KeyEvent::KEYCODE_0, key_event.get_key_code());
5552}