从任何活动中打开侧栏应用程序启动器

2024-01-22

我是 Android 开发新手。我正在考虑创建一个示例启动器应用程序来替换 Android 默认启动器。我已经创建了这个启动器。但我面临几个问题: 1. 单击“应用程序”按钮后,我将显示设备上安装的所有应用程序。但应用程序图标的大小不同。我尝试为它们设置最大高度和宽度,但问题仍然存在。 2. 该启动器还包括侧栏。如果我在主屏幕上,我可以从左向右滑动以获取此侧边栏。但是,当我单击“应用程序”按钮时(该按钮会启动新活动以显示设备上安装的应用程序),现在如果我尝试在该屏幕上恢复侧边栏,它将无法工作。这意味着,侧边栏与主屏幕绑定。如何使其可以从任何地方、从应用程序列表屏幕或任何其他应用程序屏幕进行访问。

我想这些都是常见问题,但我在谷歌上找不到这方面的帮助。有人可以帮忙吗?

谢谢, 凯拉斯


最后我能够解决这个问题。

  1. 应用程序图标大小

    • 在定义ImageView的xml中,将layout_width和layout_height指定为app_icon_size。

    图像视图 android:id="@+id/item_app_icon" android:layout_width="@android:dimen/app_icon_size" android:layout_height="@android:dimen/app_icon_size" android:layout_alignParentLeft="true"

  2. 侧边栏:我不确定这是一种黑客行为还是正确的方法。我遵循了这种方法: 我使用窗口管理器来托管侧边栏布局。并使用窗口布局参数来保持该窗口始终位于任何其他应用程序之上。侧边栏布局只不过是一个绘图布局,默认情况下将其滑入和滑出。

    WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
           // Shrink the window to wrap the content rather than filling the screen
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            // Display it on top of other application windows, but only for the current user
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            // Dont let it grab input focus
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            // Make underlying application window visible through any transparent parts
            PixelFormat.TRANSLUCENT
    ); drawingLayout = (CustomDrawerLayout) inflater.inflate(R.layout.activity_sidebar, null);
    listView = (ListView) drawingLayout.findViewById(R.id.left_drawer);
    drawingLayout.setDrawerShadow(R.mipmap.drawer_shadow, GravityCompat.START);
    drawingLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {
        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            WindowManager.LayoutParams newParams = new WindowManager.LayoutParams();
            newParams.copyFrom(params);
            newParams.width = 150;
            windowManager.updateViewLayout(drawingLayout, newParams);
        }
    
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                windowManager.updateViewLayout(drawingLayout, params);
            }
    
        });
    
        loadApps(((View) drawingLayout).getContext());
        loadListView(((View) drawingLayout).getContext());
        addClickListener(((View) drawingLayout).getContext());
        windowManager.addView(drawingLayout, params);
    

这正如预期的那样对我有用。但我仍然不确定正确的解决方案。如果您有更好的方法,请告诉我。谢谢!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从任何活动中打开侧栏应用程序启动器 的相关文章

随机推荐