首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PopupWindow 点击外部和返回键无法消失背后的真相(setBackgroundDrawable(Drawable background))

    下面从源码(我看的是android-22)上看看到底发生了什么事情导致返回键不能消失弹出框: 先看看弹出框显示的时候代码showAsDropDown,里面有个preparePopup方法。...(KeyEvent event) {  // 这个方法里面实现了返回键处理逻辑,会调用dismiss if (event.getKeyCode() == KeyEvent.KEYCODE_BACK...-1 : animStyle; a.recycle(); setBackgroundDrawable(bg); } 有些版本没有,android6.0版本preparePopup...View.LAYOUT_DIRECTION_INHERIT); mPopupWidth = p.width; mPopupHeight = p.height; } 这里实现返回键监听的代码是...mDecorView = createDecorView(mBackgroundView),这个并没有受到那个mBackground变量的控制,所以这个版本应该没有我们所描述的问题,感兴趣的可以自己去尝试一下

    1.9K70

    一起撸个简单粗暴的Tv应用主界面的网格布局控件(下)

    上一篇中我们已经一起学了怎么简单粗暴的撸个支持动态布局的网格控件出来,但在上一篇的介绍中,并没有学习实现网格控件的滑动效果,所以本篇就来讲讲,要如何让我们的网格控件可以支持自定义滑动策略。 效果 ?...那么下面就开始我们今天的内容了: 第六步:内嵌 OverScroller 自定义滑动策略 首先,我们的网格控件是继承自 FrameLayout,那么它本身就是没有支持滑动的效果的,但是我们的网格控件又需要支持多屏显示...而 Tv 应用由于都是通过遥控器事件即 KeyEvent 来进行 ui 的交互,那么,理所当然,要查看 HorizontalScrollView 的滑动原理的话,就需要跟着 dispatchKeyEvent...//HorizontalScrollView#dispatchKeyEvent() public boolean dispatchKeyEvent(KeyEvent event) { // 1....由于 Tv 应用都是通过遥控器控制,因此滑动的时机就在 dispatchKeyEvent()中进行检测就行了: @Override public boolean dispatchKeyEvent(KeyEvent

    95580

    从 Android 开发到读懂源码 第06期:焦点移动源码解析

    文能静坐弹吉他,武能通宵写代码 这一节内容,我们来聊聊 dispatchKeyEvent。...中的 ViewPostImeInputStage ,这个内部类的代码稍长,因为不论是触屏还是按键,都是在这里进行初始的分发处理,在此,我们只重点关注按键事件以及焦点的处理: android中,InputEvent 只有两个子类,一个是 KeyEvent 按键事件,另一个是 MotionEvent 触摸事件。...event = (KeyEvent)q.mEvent;// 获取到该按键事件信息,我们常见的 KeyCode,Acton,RepeatCount 等信息都包含在里面 // Deliver...if (mView.dispatchKeyEvent(event)) {// mView 实际上就是 DecorView,这里看到如果 dispatchKeyEvent 返回 true,会直接返回,这里的按键事件分发后面单独一篇讲解

    1.3K20

    Android系统线控和歌曲信息屏显的那点事

    目前Android系统中主流的音乐播放器都支持线控的功能,线控设备包括有线耳机和蓝牙耳机或蓝牙车机,当不方便操作手机的时候可以通过线控来控制音乐的播放暂停以及切歌。 ? ?...实现线控很简单,通过下面代码即可。...、KeyEvent.KEY_MEDIA_PAUSE等等;通过event.getAction()取出按键操作进行判断是何种行为,如KeyEvent.ACTION_UP、KeyEvent.ACTION_DOWN...PendingIntent.getBroadcast(mContext, 0, mediaButtonIntent, PendingIntent.FLAG_CANCEL_CURRENT); //由于非线程安全,这里要把所有的事件都放到主线程中处理...原来MediaSession本来就是存在的,并非是Android5.0后新出来的API,只不过之前都是通过RemoteControlClient进行了封装,了解了这一点后看到了一线希望,两种方法的屏显信息结构体

    2.9K90

    是时候为各式设备适配完善的输入支持了

    △ 多种 Android 设备 要知道并非所有的用户都使用手机触摸屏与您的应用交互,一部分用户可能使用的是键盘和触控笔等,甚至一部分用户有 无障碍 需求。...如果您的应用中有聊天功能、反馈表单、简报注册或任何需要发送文本的功能,那么默认的换行行为肯定不是您所期望的,不用担心的是您所预期的发送功能很容易实现。...完整代码如下所示: override fun onKeyUp(keyCode: Int, event: KeyEvent?)...完整代码如下所示: override fun onKeyDown(keyCode: Int, event: KeyEvent?)...而且这些模拟器更新的不仅是只支持使用两个手指,如果您的硬件允许,可以支持多达 10 个触摸点。 您看到的所有这些变化都不是 Surface Duo 模拟器所特有的,它们也适用于其他可折叠模拟器。

    1.1K20

    浅谈Android自定义锁屏页的发车姿势

    此外,SCREEN_OFF广播监听必须是动态注册的,如果在AndroidManifest.xml中静态注册将无法接收到SCREEN_OFF广播,这点在Android官方文档中有明确说明,即需要通过如下代码注册...(keyCode, event); } Home键与Recent键(调出最近打开应用的按键)的点击事件是在framework层进行处理的,因此onKeyDown与dispatchKeyEvent都捕获不到点击事件...关于这两个按键的屏蔽方法,网上相关的资料有很多,有的用到了反射,有的通过改变Window的标志位和Type等,总的来说这些方法只对部分android版本有效,有的则完全无法编译通过。...Android 4.4 之后加入的Immersive Full-Screen Mode 允许用户在应用全屏的情况下,通过在原有的状态栏/导航栏区域内做向内滑动的手势来实现短暂调出状态栏和导航栏的操作,且不会影响应用的正常全屏...这个“半透明化”包括了状态栏和通知栏,当开发者让应用支持这个新特性的时候,状态栏和导航栏可以单独/同时变为渐变的半透明样式,如下图: ?

    2.3K80

    Android中的绘图

    在我们平时的软件开发中,仅靠系统提供的那些组件来实现界面是远远不够的,在很多情况下我们都需要自己来绘制软件界面。在本章中我们就将学习Android中和绘制图形及位图显示和效果有关的知识。 ​...Android SDK提供了对基本图形以及位图的绘制,所有的绘图操作通常都是在View类的onDraw()方法中进行的。...一般情况下,应用程序的组件都是在相同的GUI线程中绘制的,这个主应用程序线程同时也用来处理所有的用户交互(例如,按钮单击或者文本输入)操作。...程序运行效果如下图1.1.6所示。 1.2.2 改变图像透明度 Android系统支持的颜色由RGB三原色(红、绿、蓝)再加上一个Alpha四个值组成。...SurfaceView封装的Surface支持使用所有标准Canvas方法进行绘图,同时也完全支持的OpenGL ES库。

    4800
    领券