首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android视图焦点Focus详细介绍

在非触摸屏设备中接收事件和处理响应控件是具有焦点(Focused)控件。一个窗口中一个时间内只能有一个具有焦点控件。...在早期具有滚轮设备android系统中以及现在智能TV电视应用中视图焦点控制就非常重要了。...下面是几个关于焦点特性描述: ViewGroup中有一个mFocued成员来保存子视图中哪个子视图具有焦点视图,并且这样一直会递归下去。...因为清除某个视图焦点属性时,系统为了保证拥有一个具有焦点视图,就会再次遍历整个视图树来重新设置具有焦点视图。...下面的函数用来查找具有焦点视图,如果是View则判断自己是否有焦点,如果是ViewGroup则自己就是焦点返回自己,否则返回儿子视图里面的焦点视图

2.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    笔记59 | Android管理音频焦点学习

    为了防止多个音乐播放应用同时播放音频,Android使用音频焦点(Audio Focus)来控制音频播放——即只有获取到音频焦点应用才能够播放音频。...在我们应用开始播放音频之前,它需要先请求音频焦点,然后再获取到音频焦点。另外,它还需要知道如何监听失去音频焦点事件并对此做出合适响应。...请求获取音频焦点(Request the Audio Focus) 在我们应用开始播放音频之前,它需要获取将要使用音频流音频焦点。...如何响应失去焦点事件,取决于失去焦点方式。 在音频焦点监听器里面,当接受到描述焦点改变事件时会触发onAudioFocusChange()回调方法。...在下面的代码片段当中,如果焦点失去是短暂型,我们将音频播放对象暂停,并在重新获取到焦点后进行恢复。如果是永久型焦点失去事件,那么我们媒体按钮监听器会被注销,并且不再监听音频焦点改变。

    2K90

    Android TV 焦点框移动实现方法

    Tv开发,最重要的当然是焦点移动,有了焦点框我们才能知道当前选中是哪一个,我们来看下效果图: ? 那它是怎么实现呢,我们一起来看下。...原理 布局上使用一个view,背景是.9图片做焦点框,选中一个控件时候把这个view移动选中控件位置。怎么样,是不是很简单,行动起来。先看下布局 codeing 布局: <?...@drawable/settings_selector" android:visibility="gone" / </FrameLayout 最底下View就是我们要用到焦点框 代码...View v, boolean hasFocus) { if (hasFocus){ Log.i(TAG,"onFocusChange"+v.getId()); //设置焦点位置和动画...、高,以及x ,y 坐标,在得到获取焦点view宽、高,以及x ,y 坐标,最会设置动画。

    1.5K10

    实测Android音频焦点获取和归还

    实测Android音频焦点获取和归还 前言 最近老板想在产品中短视频后者直播播放时候对于手机中音乐播放器进行暂停播放,并且退出视频播放后手机音乐播放器还能继续播放之前音乐。...Android官网:管理音频焦点 官网管理音频焦点准则: 在即将开始播放之前调用 requestAudioFocus(),并验证调用是否返回 AUDIOFOCUS_REQUEST_GRANTED。...不同版本音频焦点处理方式不太相同: 从 Android 2.2(API 级别 8)开始,应用通过调用 requestAudioFocus() 和 abandonAudioFocus() 来管理音频焦点...对于以 Android 5.0(API 级别 21)及更高版本为目标平台应用,音频应用应使用 AudioAttributes 来描述应用正在播放音频类型。...AudioFocusRequest 包含有关应用音频上下文和功能信息。系统使用这些信息来自动管理音频焦点得到和失去。

    3.7K30

    Android视图绑定ViewBinding使用

    前言 后台读者留言:能否写一篇视图绑定ViewBinding相关内容? 首先感谢这位读者提议,让我抽出时间细看视图绑定内容,也打算在项目中使用该功能。...目前,谷歌在 Android Studio 3.6 Canary 11 及更高版本中加入了新视图绑定方式ViewBinding。...所以其主要解决如何安全优雅地从代码中引用到XML layout文件中view控件问题。直到目前为止,Android构建用户界面的主流方式仍然是使用XML格式layout文件。...enabled = true } …………… } 如果在使用过程中开发者不想为某个布局文件生成binding类,则可以使用如下属性添加到布局视图中即可: <androidx.constraintlayout.widget.ConstraintLayout...目前Android开发中完成View映射方法主要有 findViewById、 ButterKnife, 如果使用kotlin的话还可以使用Kotlin Android Extensions。

    2.6K10

    Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上兼容问题 | 触摸获取焦点 | 按键获取焦点 )

    Android TV 开发系列文章目录 【Android TV 开发】安卓电视调试 ( 开启网络远程调试 ) 【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上兼容问题..., 推荐如下做法 : ① 设置可获取焦点 : 给 需要获取焦点组件 , 统一添加 android:focusable="true" 属性 ; ② 设置不可获取焦点 : 凡是 不需要获取焦点组件 ,...统一添加 android:focusable="false" 属性 ; ③ 设置组件兼容 : 凡是涉及到 父容器 与 子组件 之间焦点获取情况 , 统一使用 android:descendantFocusability..., 控制焦点改变 ; 如果该 android:focusable 属性设置为 true , 则说明该组件可以获取焦点 , 按照不同方向按键 , 焦点跳转到本组件设定对应方向上件 id 对应组件...; 四、触摸获取焦点 ---- 触摸获取焦点 : 目前触摸屏手机控制焦点主流操作 ; 在 xml 布局文件中 , 在组件节点上设置如下属性 , 取值 true 或 false ; android:

    3.2K40

    Android NestedScrolling嵌套滚动示例代码

    Android在Lollipop版本中引入了NestedScrolling——嵌套滚动机制。在Android事件处理机制中,事件序列只能由父View和子View中一个处理。...从Lollipop起View都已经实现了NestedScrollingChild方法。嵌套滚动过程如下: 开始滚动前,子View调用startNestedScroll方法。...Android为NestedScrollingChild提供了一个代理类NestedScrollingChildHelper。所以,NestedScrollingChild最简单实现如下。...Android为NestedScrollingParent提供了一个代理类NestedScrollingParentHelper。NestedScrollingParent最简单实现如下。...View) p; } p = p.getParent(); } } return false; } startNestedScroll方法从NestedScrollingChild向上查找愿意接收嵌套滚动事件

    83520

    Android视图绑定ViewBinding使用

    前言 后台读者留言:能否写一篇视图绑定ViewBinding相关内容? 首先感谢这位读者提议,让我抽出时间细看视图绑定内容,也打算在项目中使用该功能。...目前,谷歌在 Android Studio 3.6 Canary 11 及更高版本中加入了新视图绑定方式ViewBinding。...所以其主要解决如何安全优雅地从代码中引用到XML layout文件中view控件问题。直到目前为止,Android构建用户界面的主流方式仍然是使用XML格式layout文件。...enabled = true } …………… } 如果在使用过程中开发者不想为某个布局文件生成binding类,则可以使用如下属性添加到布局视图中即可: <androidx.constraintlayout.widget.ConstraintLayout...目前Android开发中完成View映射方法主要有 findViewById、 ButterKnife, 如果使用kotlin的话还可以使用Kotlin Android Extensions。

    2.7K20

    Android EditText 获得输入焦点 以及requestfocus()失效问题

    最近做公司项目的时候,经常会遇到一个问题,就是我为某个控件如EditText设置requestfocus()时候不管用,比如说登陆时候,我判断下用户输入密码,如果正确就登陆,错误就提示密码错误,...并且输入框获取焦点,但是实际中确不起作用 package com.example.hfs.requestfocusdemo; import android.content.Intent; import...android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import...android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity...加载刷新UI时候,是从左到右,从上到下顺序,正在加载过程中,如果此时requestFocus(),的话,有可能此时还没把整个界面刷新好,导致requestFocus无效。

    3K60

    揭开Android视图绘制神秘面纱

    AndroidUI中,View是至关重要一个组件,它是用户界面的基本构建块。在View绘制过程中,涉及到很多重要概念和技术。...本文将详细介绍Android View绘制过程,让你能够更好地理解和掌握AndroidUI开发。 什么是View?...View是Android系统中一个基本组件,它是用户界面上一个矩形区域,可以用来展示文本、图片、按钮等等。View可以响应用户交互事件,比如点击、滑动等等。...在Android中,所有的UI组件都是继承自View类。 View绘制过程 View绘制过程可以分为三个阶段:测量、布局和绘制。下面我们将逐一介绍这三个阶段。...同时,我们还在代码实现角度,详细说明了Android ViewGroup绘制流程,帮助你更好地理解和掌握AndroidUI开发。

    25620

    Android嵌套滑动冲突解决方法

    android嵌套滑动时候会产生滑动冲突。之前我也碰到,但是以前笔记本丢失了,所以只能重新再写一章。 一.会产生滑动冲突情况 那么什么时候会产生滑动冲突呢?...它能够很好帮我们解决滑动冲突,接下来我会尽我所能分析所有可能出现情况。 1.布局只嵌套RecyclerView情况 就是如下图情况: ?...2.布局嵌套其它可滚动控件情况 就是在第一种情况下把RecyclerView换成其它可滑动控件。...3.布局嵌套ViewPager,ViewPager嵌套RecyclerView等可滑动控件情况 这种情况处理起来比较麻烦,而很多人都是碰到这种情况。如下图: ?...3.记得设android:fillViewport=”true” 如果你嵌套布局没有显示,那有可能你忘了给父布局NestedScrollView设置android:fillViewport属性。

    3.2K21

    Android单个RecyclerView实现列表嵌套效果

    很多时候会遇到一种需求,列表里面有列表,像这种需求之前一般都是用多个列表控件互相嵌套来实现,但是这样很容易出现一些问题,例如滚动冲突、数据显示不全、多余逻辑处理等。...后来发现,一个recyclerview就可以实现列表嵌套效果,这里需要用到recyclerview多布局功能。 效果图: ?...recyclerview多布局涉及到主要方法是getItemViewType,作用是设置每个item要显示布局类型。...,所以自己进行数据拆分处理,数据处理方式很大程度上决定了代码编写难易度。...这边数据处理是把简单地需要显示数据按顺序依次放入到数据集合list中,然后给每个对象设置type,定义它所需要布局类型,数据处理方式比较简单,但是能应付很多场景。

    2.2K31

    从源码出发浅析 Android TV 焦点移动原理(下篇)

    接从源码出发浅析 Android TV 焦点移动原理 (上篇) 2.2 findNextFocus 如果开发者没有指定nextFocusId,则用findNextFocus找指定方向上最近视图 看一下这里用法...,进行一次遍历比较,得到最“近”视图作为下一个焦点视图。...小结 经过对源码分析,系统本身寻找下一个焦点视图过程是: 首先寻找用户指定了id视图,从当前焦点视图节点开始遍历,直到找到匹配该id视图。...也许存在多个相同id视图,但是只会找到视图节点树中最近一个。 如果没有指定id,则遍历找出所有isFocusable视图,统一坐标系,然后计算出指定方向上离当前焦点视图最近一个视图。...指定nextFocusId 系统自动从所有isFocusable视图中找下一个焦点视图 以上任一处都可以指定焦点,一旦使用了就不再往下走。

    3.5K10

    AndroidTV小窥及keyEvent事件传递流程

    //由dispatchKeyEvent进行焦点分发,如果dispatchKeyEvent方法返回true,那么下面的焦点查找步骤就不会继续了。...focus视图 ,就是在xml或者代码中指定NextFocusDirection Id视图 其次,根据算法去找,原理就是找在方向上最近视图 根据用户指定xml去找焦点 FocusFinder.findNextUserSpecifiedFocus...将focused视图坐标系,转换到root坐标系中,统一坐标,以便进行下一步计算 进行一次遍历比较,得到最“近”视图作为下一个焦点视图 KeyEvent小结 ViewRootImplprocessKeyEvent...开始计算记录按键方向 direction 触发查找焦点查找当前当前持有焦点View,DecorView会从顶部一层一层往下调用findFocus方法找到当前获取焦点View 如果是View,...从内到外层层寻找下一个焦点view 持有焦点View不会查找,而是通过parent查找,直到顶层为止,具体算法在FocusFinder 查找分为两种 优先找用户在xml指定view 系统根据算法找view

    1.5K10

    android scrollview嵌套listview计算高度问题

    但是为啥在scrollview中嵌套listview会出现只显示第一条listitem高度呢,原因是:scrollviewontach方法滚动事件消费处理,ListView控件高度设定问题 从谷歌那里找到...ScrollView嵌套ListView只显示一行解决办法相信很多人都遇到过,然后大部分都是用这位博主办法解决吧 刚开始我也是用这个办法解决,首先感谢这位哥大私奉献,贴上地址 http:/...;          }      这个代码让控件去计算Listview自己高度然后设置这个Listview高度 但是这个代码里面有一个问题,就是这个当你ListView里面有多行TextView.../getmeasuredheight-of-textview-with-wrapped-text 3、终极解决办法 这个问题头疼了一阵后,查找了一下,应该重写一个TextViewonMeasure...方法,我们就可以测量字体总宽度除与去掉边距屏幕大小,就可以算出文字要几行来显示,然后测量字体高度*行数可以得到字体总高度,然后在加上上下边距就是TextView真正高度,然后setMeasuredDimension

    2.3K60
    领券