导航栏添加控件实现点击和长按事件
来源:互联网 发布:微信撞库软件 编辑:程序博客网 时间:2024/06/16 03:02
1.导航栏添加控件:
这个对于Android开发的小菜一碟,这里直接上代码略过,
重点放在后期各种事件的处理。
添加控件
diff --git a/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml b/packages/SystemUI/res/layout-sw600dp/navigation_bar.xmlindex b576dfa..e275fb1 100755--- a/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml+++ b/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml@@ -108,6 +108,18 @@ android:visibility="invisible" systemui:keyCode="24" />++ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/hide"+ android:layout_width="120dp"+ android:layout_height="match_parent"+ android:layout_weight="0"+ android:paddingLeft="0dp"+ android:paddingRight="0dp"+ android:scaleType="centerInside"+ android:src="@drawable/ic_sysbar_hide_down"+ android:clickable="true"+ />+ <Space android:layout_width="match_parent" android:layout_height="match_parent"@@ -288,6 +300,18 @@ android:visibility="invisible" systemui:keyCode="24" />++ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/hide"+ android:layout_width="84dp"+ android:layout_height="match_parent"+ android:layout_weight="0"+ android:paddingLeft="0dp"+ android:paddingRight="0dp"+ android:scaleType="centerInside"+ android:src="@drawable/ic_sysbar_hide_down"+ android:clickable="true"+ />+ <Space android:layout_width="match_parent" android:layout_height="match_parent"
初始化控件
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/Navindex 68973e6..84cc3b4 100755--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java@@ -77,7 +77,7 @@ public class NavigationBarView extends LinearLayout { int mDisabledFlags = 0; int mNavigationIconHints = 0;- private Drawable mBackIcon, mBackLandIcon, mBackAltIcon, mBackAltLandIcon;+ private Drawable mBackIcon, mBackLandIcon, mBackAltIcon, mBackAltLandIcon,down; private Drawable mRecentIcon; private Drawable mRecentLandIcon;@@ -269,6 +269,10 @@ public class NavigationBarView extends LinearLayout { public View getScreenshotButton(){ return mCurrentView.findViewById(R.id.screenshot); }+ //by lxs+ public View gethideButton() {+ return mCurrentView.findViewById(R.id.hide);+ } private void getIcons(Resources res) { mBackIcon = res.getDrawable(R.drawable.ic_sysbar_back);@@ -278,6 +282,13 @@ public class NavigationBarView extends LinearLayout { mRecentIcon = res.getDrawable(R.drawable.ic_sysbar_recent); mRecentLandIcon = mRecentIcon; }+ //by lxs+ public void downIcons(Resources res) {+ ((ImageView)gethideButton()).setImageDrawable(res.getDrawable(R.drawable.ic_sysbar_hide_down));+ }+ public void upIcons(Resources res) {+ ((ImageView)gethideButton()).setImageDrawable(res.getDrawable(R.drawable.ic_sysbar_hide_up));+ }
上面downIcons()和upIcons()只是对外提供一个接口来改变本控件图片状态,这是我做其他项目时对于该控件的状态处理,可忽略,后面略过
2.事件处理
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.javaindex 0c47736..80ad395 100755--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java@@ -1651,13 +1651,13 @@ final Object mScreenshotLock = new Object(); + mNavigationBarView.gethideButton().setOnTouchListener(mHideTouchListener); mNavigationBarView.getRecentsButton().setOnTouchListener(mRecentsPreloadOnTouchListener); mNavigationBarView.getRecentsButton().setLongClickable(true); mNavigationBarView.getRecentsButton().setOnLongClickListener(mLongPressBackRecentsListener);@@ -2700,9 +2700,21 @@ private String popupAppName = null; dialog.dismiss(); } };--- + //by lxs stsrt+ private View.OnClickListener ClickListener = new View.OnClickListener() {+ public void onClick(View v) {+ Log.d("lxs","短按事件");+ }+ };+ private View.OnLongClickListener LongListener =new View.OnLongClickListener() {+ @Override+ public boolean onLongClick(View v) {+ Log.d("lxs","长按事件");+ return true;+ }+ };@@ -2710,8 +2722,10 @@ + private long mLastLockToAppLongPresslxs;+ private long time = System.currentTimeMillis(); + private View.OnTouchListener mHideTouchListener = new View.OnTouchListener() {+ private String popupAppName = null;+ public boolean onTouch(View v, MotionEvent event) {+ int action = event.getAction() & MotionEvent.ACTION_MASK;+ if (action == MotionEvent.ACTION_DOWN) {+ Log.d("lxs","onTouch screenshot ACTION_DOWN");+ mLastLockToAppLongPresslxs=System.currentTimeMillis(); //此处可添加手指一触摸按键就响应的事件+ } else if (action == MotionEvent.ACTION_CANCEL) {+ } else if (action == MotionEvent.ACTION_UP) {+ //此处来判断是否是长按还是短按事件+ time = System.currentTimeMillis();+ if ((time - mLastLockToAppLongPresslxs) < 1000) {+ if(mContext.getResources().getConfiguration().enableMultiWindow()){+ //add by huangjc for Multi ScreenShot+ if(dialog!=null)+ dialog.dismiss();+ showSingleChoiceButton();+ }else {+ Intent intent = new Intent("rk.android.screenshot.action");+ mContext.sendBroadcast(intent);+ }+ Log.d("lxs","onTouch screenshot ACTION_UP=======短按");+ }else{+ Intent intent1 = new Intent(Intent.ACTION_MAIN);+ intent1.setClassName("com.android.settings", "com.android.settings.Settings"); + intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent1);+ Log.d("lxs","onTouch screenshot ACTION_UP=======长按");+ }+ }+ return false;+ }+ }; //$_rbox_$_modify_$_huangjc,add add/remove bar button private View.OnTouchListener mHidebarPreloadOnTouchListener = new View.OnTouchListener() {
如上,我原先是想添加3个方法(OnClickListener,OnLongClickListener和OnTouchListener)来做处理,后来发现OnLongClickListener被上层拦截了,处理比较麻烦,所以我就用OnTouchListener来用按键时长来判断长按短按,这样两个时间相减得的时间就是按键时长通过按键时长来控制是否长按还是短按,如上代码是实现了短按截图,长按1S以上进入Setting,此处还可以做音量短按加减一格和长按快速加减以及其他。注意按键事件后retrun的返回值,具体了解事件分发,这个很有趣,有兴趣的可以交流。这个只是在导航栏添做的处理,如需其他地方处理事件用OnClickListener和OnLongClickListener也是可以的。
0 0
- 导航栏添加控件实现点击和长按事件
- RecyclerView添加点击和长按事件的简单实现
- Recyclerview添加点击事件和长按事件
- ListView同时实现点击和长按事件
- RecyclerView实现点击和长按事件的监听方法
- Android实现点击事件和长点击事件共存
- swift下给控件添加点击事件(双击、捏、旋转、拖动、划动、长按)
- 给控件添加长按事件
- Android中Recyclerview使用3----添加条目得到点击事件和长按事件
- 为RecyclerView添加点击事件、长按事件
- 为RecyclerView添加优雅的点击事件、长按事件
- RecyclerView 使用 点击事件和长按
- RecyclerView的item点击事件(点击和长按)的两种实现
- Android开发之RecyclerView实现点击事件和长按事件
- Android中Recyclerview使用6----添加条目得到点击事件和长按事件(另一种写法,较简单)
- ListView长按事件和点击事件监听
- ListView的长按事件和点击事件
- ListView的item的点击事件和长按事件
- Unity3D研究院之与Android相互传递消息
- 部署到linux线上服务器webSocket链接失败404
- 人生的第一步
- Android Bitmap内存计算
- 统计学习方法笔记(1)
- 导航栏添加控件实现点击和长按事件
- Matplotlib输出中文显示问题
- 关于const与函数重载问题
- 进程相关
- Linux中字符串转整形数字的函数
- 二叉树的非递归遍历
- Java从来不死 PYTHON活跃上升
- 资源块RB,RE,相关介绍
- Java核心技术点之注解