音频焦点管理的行为准则 在即将开始播放之前调用 requestAudioFocus(),并验证调用是否返回 AUDIOFOCUS_REQUEST_GRANTED。...首先,对音频焦点变化的管理的变化体现在两个方面,延迟获取焦点和自动降低音量。...But, 从Android 8.0开始,这个降低音量的工作,就是系统默认行为了,可以说是一个良心的优化。 如果我不希望系统自动给我降低音量,而是想自己暂停音频相关的工作,那咋办?...这个可以通过AudioFocusRequest.Builder.setWillPauseWhenDucked(true)方法取消系统的默认行为,然后通过监听音频焦点变化 音频焦点请求方式 从 Android...setWillPauseWhenDucked(): 这个前面说过,是为了覆盖系统默认降低音量的行为,但是必须要设置AudioManager.OnAudioFocusChangeListener才能自己处理这类情况
下面是几个关于焦点特性的描述: ViewGroup中有一个mFocued成员来保存子视图中哪个子视图是具有焦点的视图,并且这样一直会递归下去。...ViewGroup没有焦点并不代表其子视图也没有焦点,这里没有父子制约关系。 任何时候一个窗口内都只有一个视图具有焦点,或者所有视图都无焦点。 并不是所有视图都可以获取焦点。...如果调用的对象是View则可能返回自身,如果调用的对象是ViewGroup则返回自身和下面所有子视图中可获取焦点的子视图。 //这里的direction参数貌似没有什么作用。...如果是ViewGroup则根据setDescendantFocusability中的规则进行:如果是阻止子视图则自己进行焦点的获取,否则就按规则先子节点或者后子节点。...FOCUS_AFTER_DESCENDANTS: 当ViewGroup调用requestFocus时优先让里面的子视图成为焦点,只有子视图无法成为焦点时才让自己成为焦点视图。这个特性也是默认特性。
LayoutAnimation 指定 ViewGroup 的子元素出场动画,作用在每个子元素上的动画是补间动画。...控制的顺序,第一个子元素得 60 ms 后出现,第二个子元素 120ms 后出现,第三个子元素 180ms 后出现...... android:animation 子元素所要执行的动画 然后对有子 View...的 ViewGroup 添加这个属性,比如 RecyclerView: <android.support.v7.widget.RecyclerView android:id="@+id/recycler...,例如调整大小,但不包括添加或者移除视图 CHANGE_APPEARING:其他视图的出现导致某个视图改变 CHANGE_DISAPPEARING:其他视图的消失导致某个视图改变 视图滑动进入并短暂地缩小一半,具有平滑和缩放的效果 val pvhSlide = PropertyValuesHolder.ofFloat("y", 0f, 1f)
https://blog.csdn.net/u010105969/article/details/50970367 当在父视图上添加一个手势后发现,子视图也会响应父视图的手势事件,于是想去解决,...于是乎发现了: 在子视图上添加一个手势可以让子视图不再去响应父视图的手势事件。
四、公共方法 public void addView (View child) 添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。...如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。...参数 child 所添加的子视图 index 添加子视图的位置 public void addView (View child, int index, ViewGroup.LayoutParams...参数 child 要获得焦点的父视图的子视图。此视图包含了焦点视图。如果没有特殊徐要求,此视图实际上就是焦点视图。...此方法会比执行缺省的ViewGroup代价高,否则此行为也会设置为缺省 参数 direction 指定下列常量之一:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT
一个视图(View)在屏幕上占据了一块矩形区域,它负责渲染这块矩形区域(如将这块矩形区域变成其他颜色),也可以处理这块矩形区域发生的事件(如用户单击事件),并且可以设置这块区域是否可见、是否可以获取焦点等...1.2视图容器组件ViewGroup View类有一个非常重要的子类ViewGroup,其为View的一个扩展,可以容纳多个 View,通过ViewGroup类可以创建有联系的子View组成的复合控件...从上图可以看出,多个视图组件(View)可以存放在一个视图容器(ViewGroup)中,该容器可以与其他视图组件共同存放在另一个容器中,但是一个界面文件中必须有且只有一个容器作为根结点。...ViewGroup容器控制其子组件的分布依赖于ViewGroup.LayoutParams、ViewGroup. MarginLayoutParams两个内部类。...这两个内部类中都提供了一些XML属性,ViewGroup容器中的子组件可以指定这些XML属性。
https://blog.csdn.net/u010105969/article/details/80521257 之前的一篇文章(https://www.jianshu.com/p/9563f5b646d9...)讲过使用Masonry布局让Cell的高度实现自适应,其实这就是通过子视图撑起了父视图Cell的高度。...今天再通过简单的代码来看下子视图如何通过Masonry的布局来撑起父视图的(让父视图的大小实现自适应)。 代码: ?...对于这样的高度根据文字内容变化的视图我们就能很好地实现了。
alpha属性是用来设置视图的透明度的,可如果直接使用alpha属性,并且使用此属性的视图有子视图,那么其子视图的透明度也会跟着受影响。...以上效果图是直接使用alpha属性的效果。...看客根据所需要的效果选择相应的代码吧!
焦点: 焦点(Focus)可以理解为选中态,在Android TV上起很重要的作用。一个视图控件只有在获得焦点的状态下,才能响应按键的Click事件。...[1509606458283_7143_1509606506359.jpg] 上图中,外面有一个绿色光圈的视图,就是当前有焦点的视图。...之间流转 ViewGroup的角色,此时keyEvent需要在自己的子View之间流转 当作View的时候,会调用自己View的dispatchKeyEvent。...其实,从概念上来看,都是调用当前有焦点View的dispatchKeyEvent,只不过有时是自己本身,有时是他的子View。...focusId,但实际上焦点却丢失的原因,因为焦点跑到了另一个“意想不到”的相同id的视图上。
ViewGroup是View的子类,所以它也具有View的特性,但它主要用来充当View的容器,将其中的View视作自己的孩子,对它的子View进行管理,当然它的孩子也可以是ViewGroup类型。...而ViewGroup顾名思义就是一组View的管理,于是在ViewGroup构建了焦点管理和子View节点数组。...视图绘制时会先绘制子控件。如果视图的背景可见,视图会在调用onDraw函数之前绘制背景。强制重绘,可以使用invalidate()。...跨线程的操作必须使用句柄Handler。 焦点处理: 框架处理焦点的转移,来响应用户输入。isFocusable()函数表示视图是否能接受焦点。...setFocusable(boolean)函数可以改变视图能否接受焦点。
| 触摸获取焦点 | 按键获取焦点 ) 文章目录 Android TV 开发系列文章目录 一、父容器与子组件焦点获取关系处理 二、不同电视设备上的兼容问题 三、按键获取焦点 四、触摸获取焦点 一、父容器与子组件焦点获取关系处理...: 只有 父容器 能获取焦点 , 子组件不能获取焦点 ; 二、不同电视设备上的兼容问题 ---- 在开发时遇到这样一种情况 , 布局的样式是 ScrollView 中嵌入一个 ConstraintLayout...布局 , 在 ConstraintLayout 布局中设置了很多需要获取焦点的子组件 ; 运行正常的情况 : 在 Google 提供的模拟器上运行时 , 正常运行 , ScrollView 的子组件中可以正常获取焦点...” , 子组件也无法获取焦点 ; 最终的解决方案 : 在子组件中 , 将需要获取焦点的组件都添加 android:focusable=“true” 属性 , 这样就解决了上述问题 ; 由此可见 , 相同的代码..., 在不同型号 , 版本 , 厂家 的电视设备上 , 焦点的获取 , 移动 , 表现是不一样的 , 因此这里就涉及到了焦点的兼容问题 ; 本次在 康佳 电视盒子中 , ScrollView 会阻断子组件的焦点获取
现在在用的很多控件都是直接或者间接继承自View的,如下图。 ? ViewGroup是什么? 一个ViewGroup是一个可以包含子View的容器,是布局文件和View容器的基类。...ViewParent主要提供了一系列操作子View的方法例如焦点的切换,显示区域的控制等等。 View的层级结构是什么? 为什么Google产生ViewGroup?...ViewGroup和View最大的不同是可以组合多个View,那么多个View在一起,该如何摆放,这就是ViewGroup需要解决的问题。 View的层级结构是什么?...我们看到的界面,都是以一个ViewGroup作为根View,通过往ViewGroup中添加子View(可以是View,也可以是ViewGroup),来组合出各具特色的界面。...绘制从根视图开始,从上至下遍历整棵视图树,每一个ViewGroup负责让自己的子View被绘制,每一个View负责绘制自己,通过draw()方法.绘制过程分三步走。
,Android 原生封装好了,支持子视图焦点动效及行标题展示 Presenter 提供视图创建及数据绑定,类似 RecyclerView.Adapter 的功能,注意是类似,下面的 ItemBridgeAdapter...中 ObjectAdapter 的自定义 Presenter 创建每一个子 Item 的视图,onBindRowViewHolder 会将数据绑定 vh.mGridView.setAdapter...,其实内部子 Item 的视图创建和数据绑定是沿用 ItemBridgeAdapter 方式。...,让每个有不同样式的 CustomPresenter 自身去实现具体视图和数据行为,这样当需要增加新的样式和数据时,只需要往桥接类中添加对应的 Presenter 实现即可(往 ArrayObjectAdapter...,焦点的监听回调中会通过 Helper 的方法实现缩放效果。
isFocused() 当前视图是否获得焦点 通常情况下有两种方法可以让视图获得焦点,即通过键盘的上下左右键切换视图,以及调用requestFocus()方法。...而现在的Android手机几乎都没有键盘了,因此基本上只可以使用requestFocus()这个办法来让视图获得焦点了。...而requestFocus()方法也不能保证一定可以让视图获得焦点,它会有一个布尔值的返回值,如果返回true说明获得焦点成功,返回false说明获得焦点失败。...一般只有视图在focusable和focusable in touch mode同时成立的情况下才能成功获取焦点,比如说EditText。...和他的子View的相对位置没变,所以他的子View的边界也跟着变化了。
来说,遍历并添加自己的所有isFocusable的child 这里有个descendantFocusability变量,有三个取值 FOCUS_BEFORE_DESCENDANTS:在所有子视图之前获取焦点...FOCUS_AFTER_DESCENDANTS: 在所有子视图之后获取焦点 FOCUS_BLOCK_DESCENDANTS: 阻止所有子视图获取焦点,即使他们是focusable的 2.2.2 FocusFinder.findNextFocus...,进行一次遍历比较,得到最“近”的视图作为下一个焦点视图。...小结 经过对源码的分析,系统本身寻找下一个焦点视图的过程是: 首先寻找用户指定了id的视图,从当前焦点视图的节点开始遍历,直到找到匹配该id的视图。...也许存在多个相同id的视图,但是只会找到视图节点树中最近的一个。 如果没有指定id,则遍历找出所有isFocusable的视图,统一坐标系,然后计算出指定方向上离当前焦点视图最近的一个视图。
最终会调用viewGroup的FocusFinder来找计算下一个获得焦点的view。...//focused是当前焦点视图 private View findNextFocus(ViewGroup root, View focused, Rect focusedRect, int direction...focus的视图 ,就是在xml或者代码中指定NextFocusDirection Id的视图 其次,根据算法去找,原理就是找在方向上最近的视图 根据用户指定xml去找焦点 FocusFinder.findNextUserSpecifiedFocus...将focused视图的坐标系,转换到root的坐标系中,统一坐标,以便进行下一步的计算 进行一次遍历比较,得到最“近”的视图作为下一个焦点视图 KeyEvent小结 ViewRootImpl的processKeyEvent...则直接判断是否持有焦点 是则返回自己 不是返回null 如果是ViewGroup,先判断自己是否持有焦点 是则返回自己 不是则直接返回当前持有焦点的子View(mFocused 具体看代码分析) 通过focusSearch
中都有一个 mFocus 变量,该变量的作用就是保存着当前 ViewGroup 下的焦点,并非直接焦点。...由于第 1 步中清除了自己的焦点状态,失焦之后自然需要刷新视图状态,这里会调用 refreshDrawableState 进行 drawableState 的刷新,也就是我们通常在 xml 中设置的 selector...也就是说某一个子 View 如果聚焦了,它会将自己赋值给 parent 的 mFocus 变量,这样下次查找焦点,就可以通过顶层的 parent 一级一级通过 mFocus 变量进行 findFocus...FOCUS_BEFORE_DESCENDANTS:自身优先子 View 获得焦点,先对自己进行 requestFocus 调用去请求焦点,如果失败再遍历子 View 让子 View 进行聚焦; FOCUS_AFTER_DESCENDANTS...主要功能就是遍历该 ViewGroup 下所有子 View,然后对可见的子 View 调用 requestFocus,如果请求焦点成功,则直接返回 true,至此,ViewGroup.requestFocus
简介 ScrollView称为滚动视图,当在一个屏幕的像素显示不下绘制的UI控件时,可以采用滑动的方式,使控件显示。...注意: ScrollView的子元素只能有一个,可以是一个 View(如 ImageView、 TextView等) 也可以是一个 ViewGroup(如 LinearLayout、 RelativeLayout...这时就需要使用水平方向的滚动视图 HorizontalScrollView。...4. android:descendantFocusability="" 该属性是当一个为view获取焦点时,定义 ViewGroup和其子控件两者之间的关系。...属性的值有三种: beforeDescendants //viewgroup会优先其子类控件而获取到焦点 afterDescendants //viewgroup只有当其子类控件不需要获取焦点时才获取焦点
语法如下: CREATE VIEW view_name AS SELECT column1, column2, … FROM table_name WHERE condition; 视图是一个虚拟的表...与实际的表不同,视图并不存储数据,而是在查询时动态生成。视图可以根据现有表中的数据创建,并且可以对其进行查询、插入、更新和删除操作。...视图的作用和优势如下: 数据安全性:视图可以限制用户只能查询特定的列和行,从而保护敏感数据的安全性。 数据简化:通过创建视图,可以隐藏底层表的复杂性,并提供简化的数据访问方式。...数据一致性:视图可以将多个表结合起来,使数据在逻辑上保持一致性,方便进行查询和分析。 数据抽象:视图可以将复杂的查询逻辑封装起来,为用户提供简单、易懂的接口。...性能优化:视图可以提前计算和缓存结果,加快查询速度,并且可以对视图进行索引优化,提升查询性能。 总之,视图提供了一种更灵活、安全、简化和高效的数据访问方式,可以方便地满足用户的不同查询需求。
if (mView instanceof ViewGroup) {// 平移视图让焦点区域在当前视图中完全可见...FOCUS_RIGHT, FOCUS_DOWN ,接着通过 findFocus 查找到当前视图中的焦点。...这里有个关键方法:addFocusables ,这个方法在平时定制化开发中可以用于焦点记忆,例如 leanback 视图中每一行 recyclerView 中的焦点记忆。...的话,递归调用继续查找该 child viewGroup下的子 View,直到查找所有最下层的子 view,最终调用 View.addFocusables 判断是否可聚焦,可聚焦则添加进集合...null,先获取当前焦点的 rect 视图区域,考虑到 scroll 状态,将当前焦点的 rect 坐标系进行转换。
领取专属 10元无门槛券
手把手带您无忧上云