当前位置:首页 » 《随便一记》 » 正文

Android Launcher 在底部导航栏添加一个“☰”按钮,点击弹出全部应用_王睿丶的博客

21 人参与  2022年04月19日 16:32  分类 : 《随便一记》  评论

点击全文阅读


相关文件
frameworks/base/packages/SystemUI/res/layout/all_app.xml
frameworks/base/packages/SystemUI/res/values-sw400dp/config.xml
frameworks/base/packages/SystemUI/res/values-sw600dp/config.xml
frameworks/base/packages/SystemUI/res/values-sw720dp/config.xml
frameworks/base/packages/SystemUI/res/values-sw900dp/config.xml
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
packages / apps/Launcher3/src/com/android/launcher3/Launcher.java

思路

  • 1、 创建allApp布局
  • 2、 控制导航键显示位置
  • 3、 在Java代码中拿到它的xml资源文件
  • 4、 在Java代码中设置allApp图标
  • 5、 给allApp设置监听事件
  • 6、 实现弹出全部应用

实现

  • 第一步:创建allApp布局
    frameworks/base/packages/SystemUI/res/layout/all_app.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 The Android Open Source Project
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
          http://www.apache.org/licenses/LICENSE-2.0
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<com.android.systemui.statusbar.policy.KeyButtonView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res-auto"
    android:id="@+id/all_app"
    android:layout_width="@dimen/navigation_key_width"
    android:layout_height="match_parent"
    android:layout_weight="0"
    android:scaleType="center"
    android:contentDescription="@string/accessibility_home"
    android:paddingStart="@dimen/navigation_key_padding"
    android:paddingEnd="@dimen/navigation_key_padding"
    />
  • 第二步:控制导航键显示位置
    frameworks/base/packages/SystemUI/res/values-sw400dp/config.xml
    frameworks/base/packages/SystemUI/res/values-sw600dp/config.xml
    frameworks/base/packages/SystemUI/res/values-sw720dp/config.xml
    frameworks/base/packages/SystemUI/res/values-sw900dp/config.xml
<resources>
    <!-- Nav bar button default ordering/layout -->
    <string name="config_navBarLayout" translatable="false">all_app;back,home,recent;right</string>
</resources>
  • 第三步:在Java代码中拿到它的xml资源文件
    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
public static final String ALL_APP = "all_app";    //声明
private View createView(String buttonSpec, ViewGroup parent, LayoutInflater inflater) {
        if (HOME.equals(button)) {
            v = inflater.inflate(R.layout.home, parent, false);
        } else if(ALL_APP.equals(button)) {
            v = inflater.inflate(R.layout.all_app, parent, false);  /* 获取布局 */
        } else if (BACK.equals(button)) {
            v = inflater.inflate(R.layout.back, parent, false);
        } 
} 
  • 第四步:在Java代码中设置allApp图标
    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
  private KeyButtonDrawable mAllAppIcon;      /* 创建图标对象 */
 public NavigationBarView(Context context, AttributeSet attrs) {
  /* 添加allApp给mButtonDispatchers */
        mButtonDispatchers.put(R.id.all_app, new ButtonDispatcher(R.id.all_app));
        mButtonDispatchers.put(R.id.back, new ButtonDispatcher(R.id.back));
        mButtonDispatchers.put(R.id.home, new ButtonDispatcher(R.id.home));
}
    /* 根据id拿到准确目标 */
    public ButtonDispatcher getAllAppButton() {
        return mButtonDispatchers.get(R.id.all_app);
    }
 private void updateIcons(Configuration oldConfig) {
        mVolumeSubIcon = getDrawable(R.drawable.ic_sysbar_volume_sub_button);
        mAllAppIcon = getDrawable(R.drawable.ic_menu);  /*获取资源文件 */
        mScreenshotIcon = getDrawable(R.drawable.ic_sysbar_capture_button);
}
    public void updateNavButtonIcons() {
        getVolumeSubButton().setImageDrawable(mVolumeSubIcon);
        getAllAppButton().setImageDrawable(mAllAppIcon);    /* 设置图标 */
        getScreenshotButton().setImageDrawable(mScreenshotIcon);
}
  • 第五步:给allApp设置监听事件
    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
 private void prepareNavigationBarView() {
 	/* 王睿-设置监听 */
        ButtonDispatcher allAppButton = mNavigationBarView.getAllAppButton();
        allAppButton.setOnClickListener(this:: allAppClick);
}
   /* 王睿-点击事件 */
    private void allAppClick(View v) {
        Intent intent=new Intent("com.xxx.allApp");
        getContext().sendBroadcast(intent);
    }
  • 第六步:实现弹出全部应用
    packages / apps/Launcher3/src/com/android/launcher3/Launcher.java
@Override
    protected void onCreate(Bundle savedInstanceState) {
        registerReceiver(myReceiver, new IntentFilter("com.xxx.allApp"));	//动态注册广播
  }
 @Override
    public void onDestroy() {
  		unregisterReceiver(mScreenOffReceiver);
        unregisterReceiver(myReceiver);	//取消广播
        mWorkspace.removeFolderListeners();
  }
         /* 创建广播接收器 */
    private final BroadcastReceiver myReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            getStateManager().goToState(ALL_APPS);
        }
    };

Launcher 开发系列:
Launcher 在底部导航栏添加一个“☰”按钮,点击弹出全部应用
Launcher 修改底部导航虚拟按键的位置
Launcher 隐藏和开启底部虚拟按键(动态更改)
Launcher 去掉全部应用界面的搜索框
Launcher 点击鼠标右键时,显示菜单栏
Launcher 自定义一个虚拟按键实现返回主页和打开全部应用两个功能


点击全文阅读


本文链接:http://zhangshiyu.com/post/38464.html

设置  图标  弹出  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 家宴过后,我捉奸了庶妹和我老公无广告_庶妹老公侍卫TOP10_小说后续在线阅读_无删减免费完结_
  • 寝室六个人,她们背着我建五人群必读文_太天真申请书冷笑最新阅读_小说后续在线阅读_无删减免费完结_
  • 开局获得狐仙传承结局+番外_江帆赵雪隐藏剧情_小说后续在线阅读_无删减免费完结_
  • 刀锈春根生,白骨犹温完结全文_卫舟棠棠知意一口气完结_小说后续在线阅读_无删减免费完结_
  • 夫君立筷子定我灾星罪名,我改嫁冷宫皇子后他追悔莫及好评_赵荀孟如安青瑶精心编著_小说后续在线阅读_无删减免费完结_
  • 邻居低素质,而我没素质独家番外_老太太赖皮欣欣超长版_小说后续在线阅读_无删减免费完结_
  • 重生后我转嫁首富瘸腿独子,总裁前夫却疯了一口气看完_妹妹傅云琛沈明辉独家番外_小说后续在线阅读_无删减免费完结_
  • 我拒绝给系花捐款后,全系同学悔疯了在线阅读_小说后续在线阅读_无删减免费完结_
  • 我让位给女友的透视眼竹马,他却说如果能重生再也不来了。虐心反转_玉石林若女友推荐_小说后续在线阅读_无删减免费完结_
  • 相国独子的丫鬟砸坏我的玉佩后,我当场拒婚阅读_玉佩陈郡谢氏全新_小说后续在线阅读_无删减免费完结_
  • 手术时,我看着病人惨死最新试读_淼淼陆知衍姜颜全本完结_小说后续在线阅读_无删减免费完结_
  • 男友霸道给我开黑卡,转头却骂我是捞女最新章节_肖年顾客黑卡热文_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1