1.在导航栏中添加音量加减button

一些Android音量调节button。或者从保护实体按键的角度考虑,就须要在导航栏的虚拟按键中加入音量加减调节按键。

效果例如以下图所看到的:

实现步骤例如以下:

1.首先在SystemUI中加入音量加减的资源文件。路径例如以下:

frameworks/base/packages/SystemUI/res/

将图片放入相应的drawable目录,包含音量+。和音量-,见上图。

2.改动导航栏的布局文件。路径:

frameworks/base/packages/SystemUI/res/

在相应的layout目录中找到navigation_bar.xml文件进行改动:

在返回键前面加入“音量减”。返回键的布局:

<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp"
android:layout_height="match_parent"
android:src="@drawable/ic_sysbar_back"
systemui:keyCode="4"
android:layout_weight="0"
systemui:glowBackground="@drawable/ic_sysbar_highlight"
android:contentDescription="@string/accessibility_back"
/>

音量减的布局例如以下。这里先把Visibility定义为Gone,然后在代码中控制是否显示:

<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/sub"
android:src="@drawable/sub_normal"
android:layout_width="@dimen/navigation_key_width"
android:layout_height="match_parent"
android:layout_weight="0"
systemui:keyCode="302"
systemui:glowBackground="@drawable/ic_sysbar_highlight"
android:visibility="gone"/>

“音量加”加入到“近期应用”之后,近期应用的布局:

<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp"
android:layout_height="match_parent"
android:src="@drawable/ic_sysbar_recent"
android:layout_weight="0"
systemui:glowBackground="@drawable/ic_sysbar_highlight"
android:contentDescription="@string/accessibility_recent"
/>

音量加的布局:

<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/add"
android:src="@drawable/add_normal"
android:layout_width="@dimen/navigation_key_width"
android:layout_height="match_parent"
android:layout_weight="0"
systemui:keyCode="301"
systemui:glowBackground="@drawable/ic_sysbar_highlight"
android:visibility="gone"/>

3.接着改动代码逻辑,文件路径:

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

在private void prepareNavigationBarView() {……}函数中加入显示音量加减的代码:

mNavigationBarView.getAddVolume().setVisibility(View.VISIBLE);
mNavigationBarView.getSubVolume().setVisibility(View.VISIBLE);

相应的函数getAddVolume()和getAddVolume()要在

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java

中实现:

public View getAddVolume(){
return mCurrentView.findViewById(R.id.add);
} public View getSubVolume(){
return mCurrentView.findViewById(R.id.sub);
}

最后就是功能实现了。在

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

中加入监听函数:

private View.OnTouchListener mAddVolumeOnTouchListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent ev) {
final int action = ev.getAction();
switch(action) {
case MotionEvent.ACTION_DOWN:
is_down = true;
Adjust_Volume(true);
maddHandler.postDelayed(maddRun, ADJUST_VOLUME_DELAY * 2);
break;
case MotionEvent.ACTION_MOVE:
is_down = true;
maddHandler.postDelayed(maddRun, ADJUST_VOLUME_DELAY * 2);
// maddHandler.removeCallbacks(maddRun);
break;
case MotionEvent.ACTION_UP:
is_down = false;
maddHandler.removeCallbacks(maddRun);
break; }
return true;
}
}; private View.OnTouchListener mSubVolumeOnTouchListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent ev) {
final int action = ev.getAction();
int x, y;
//int mCode = ev.getAction(); switch (action) {
case MotionEvent.ACTION_DOWN:
is_down = true;
Adjust_Volume(false);
msubHandler.postDelayed(msubRun, ADJUST_VOLUME_DELAY * 2);
break;
case MotionEvent.ACTION_MOVE: is_down = true;
msubHandler.postDelayed(msubRun, ADJUST_VOLUME_DELAY * 2);
//msubHandler.removeCallbacks(msubRun);
break;
case MotionEvent.ACTION_UP:
is_down = false;
msubHandler.removeCallbacks(msubRun);
break;
}
return true;
}
}; public void Adjust_Volume(boolean opition){
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
//
// Adjust the volume in on key down since it is more
// responsive to the user.
//
if(opition){
audioManager.adjustSuggestedStreamVolume(
AudioManager.ADJUST_RAISE,
AudioManager.USE_DEFAULT_STREAM_TYPE,
AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}else{
audioManager.adjustSuggestedStreamVolume(
AudioManager.ADJUST_LOWER,
AudioManager.USE_DEFAULT_STREAM_TYPE,
AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
}
}

转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui


版权声明:原创文章,转载请注明出处:http://blog.csdn.net/zhoumushui

Android SystemUI源代码分析和修改的更多相关文章

  1. Android 消息处理源代码分析(1)

    Android 消息处理源代码分析(1) 在Android中,通常被使用的消息队列的代码在文件夹\sources\android-22\android\os下,涉及到下面几个类文件 Handler.j ...

  2. Android HandlerThread 源代码分析

    HandlerThread 简单介绍: 我们知道Thread线程是一次性消费品,当Thread线程运行完一个耗时的任务之后.线程就会被自己主动销毁了.假设此时我又有一 个耗时任务须要运行,我们不得不又 ...

  3. Android HttpURLConnection源代码分析

    Android HttpURLConnection源代码分析 之前写过HttpURLConnection与HttpClient的差别及选择.后来又分析了Volley的源代码. 近期又遇到了问题,想在V ...

  4. Android KLog源代码分析

    Android KLog源代码分析 Android KLog源代码分析 代码结构 详细分析 BaseLog FileLog JsonLog XmlLog 核心文件KLogjava分析 遇到的问题 一直 ...

  5. android开发源代码分析--多个activity调用多个jni库的方法

    android开发源代码分析--多个activity调用多个jni库的方法 有时候,我们在开发android项目时会遇到须要调用多个native c/jni库文件,下面是本人以前实现过的方法,假设有知 ...

  6. Android 消息处理源代码分析(2)

    Android 消息处理源代码分析(1)点击打开链接 继续接着分析剩下的类文件 Looper.java public final class Looper { final MessageQueue m ...

  7. Appium Android Bootstrap源代码分析之启动执行

    通过前面的两篇文章<Appium Android Bootstrap源代码分析之控件AndroidElement>和<Appium Android Bootstrap源代码分析之命令 ...

  8. 【转】android SystemUI 流程分析

    android4 SystemUI 流程分析 什么是SystemUI? 对于Phone来说SystemUI指的是:StatusBar(状态栏).NavigationBar(导航栏).而对于Tablet ...

  9. Android AsyncTask 源代码分析

    AsyncTask源代码分析 public abstract class AsyncTask<Params, Progress, Result> { //日志TAG private sta ...

随机推荐

  1. wordpress博客近期变慢之解决(fonts.google.com)

    近期发现站点訪问速度变慢.博客文章打开速度特慢,也没改动过东西. 并且近期发现google的服务非常多訪问都打不开或是变慢. 于是知道可能是那"伟大东西"在作坏事了. 症状: 网页 ...

  2. Socket开发

    Socket开发框架之消息的回调处理 伍华聪 2016-03-31 20:16 阅读:152 评论:0     Socket开发框架之数据加密及完整性检查 伍华聪 2016-03-29 22:39 阅 ...

  3. slider使用TickPlacement获得游标效果

    <Slider Name="slider游标效果" Maximum="3" SmallChange="0.25" TickPlacem ...

  4. Connecting Docker for Cloud Services using SDN and Network Virtualization

     Abstract The explosive scale of container CPUs needs highly efficient network virtualization Chal ...

  5. Ubuntu 13.10 安装 Unity 8 试用截图

    关于 Unity 8 有很多报道,Unity 8 相对于 Unity 7 变化相当大,这是 Ubuntu 团队打造的一款通用于 PC.手机.平板的桌面. Unity 8 已经登陆 ubuntu 13. ...

  6. W5500 keep-alive的用途及使用

    大家是否遇到过这种问题,W5500作为server已经建立连接,突然网线掉了,然后再去连接W5500.就连不上了. 为什么?以下对这个问题进行解释说明,并提出解决的方法. 图1中的上位机程序作为cli ...

  7. C++学习笔记33 转换操作符

    有时候,我们要转换为类类型和类类型,同时,这两个类继承关系不存在,这时候我们就需要一些所谓的转换操作符运营商. 一个简单的例子.类别A转换为int种类 #include <iostream> ...

  8. 小米2S twrp 中文,支持双系统

    更新日志: 更新日志: 汉化了要使用的功能 修改语言选择方式,修改为下拉方式 TDB(TrueDualBoot) 功能完美实现 **adb**功能,完美实现,无需特别操作(比CWM强大) 修改双系统切 ...

  9. Win32 Windows编程 九

    资源的使用 1 资源文件 图标 光标 字符串 菜单  加速键 对话框资源位图等等 资源脚本文件 - 扩展名为RC文件 定义了资源和相关文件等信息 资源编译器 - RC.exe 2 图标资源 ICON ...

  10. 在borland c++ builder 中使用 google test (gtest)

    google test version: 1.6 c++ builder version: xe6 1 download google test 1.6 2 unzip the zip file. T ...