简单实现音量对话框小尝试
需求分析
工作需要实现一个在播放音乐时,音量键按下后弹出程序自己的音量控制界面,由于对android还不太熟悉,就当写个小Demo练练手吧。
根据要求的话,需要实现如下功能点的要求
1、 拦截系统音量键
2、 用SeekBar简单实现音量控制界面(采用对话框的形式来实现)
3、 点击对话框外内容,对话框自动消失
4、 对话框内一定时间内无事件(3s),对话框自动消失
下面分步来实现这个小Demo程序。
拦截系统音量键
本来想在View中拦截音量键的,但是不知道为什么在View中onKeyDown事件拦截不到,后来查了下网上的说法,如果需要让一个View响应按键事件,必须按键的时候焦点位于这个View上面,我尝试了下,假设这个View类实例为test,则可以通过下列方式设置焦点
//test.setFocusable(true);
test.setFocusableInTouchMode(true);
test.requestFocus();
网上也有人说通过SetFocusable设置的就可以了,但是我试了下不行,必须得用setFocusableInTouchMode然后调用requestFocus,我在测试时放在OnCreate方法中调用,也有人说放在OnCreate中有时候也不行,因为此时View还没有被显示出来。后来问了下同事,说是这种在View中拦截OnKeyDown的方式是并不推荐的方法,有违面向对象的原则,OnKeyDown这种事件本身就应该交由Activity等类来拦截,然后需要处理的操作,就通过给View类配备set和get方法的形式来设置,想想也是很有道理的。
系统音量键的拦截网上代码很多,在这里也不多说,直接上代码吧,其中的VolumeSetDialog就是自己的音量控制对话框类。
@Override