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

时间:2015-03-23 07:45:58

标签: android user-interface

我是Android开发的新手。我正在寻找创建一个示例启动器应用程序来替换Android默认启动器。我创建了这个启动器。但我面临几个问题:  1.点击“应用”按钮,我将显示设备上安装的所有应用。但应用程序图标大小不同。我尝试为它们设置最大高度和宽度但仍然存在问题。  这个发射器还包括侧杆。如果我在主屏幕上,我可以从左向右滑动以获得此侧栏。但是,当我点击应用程序按钮,它启动新活动以显示设备上安装的应用程序时,现在如果我尝试在此屏幕上带回侧栏,它将无法正常工作。这意味着,侧栏被绑在主屏幕上。如何从应用程序列表屏幕或任何其他应用程序屏幕中随时随地访问它。

我猜这些是常见问题,但我无法在谷歌上找到帮助。有人可以帮忙吗?

谢谢, 凯拉斯

1 个答案:

答案 0 :(得分:1)

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

  1. 应用图标大小

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

    ImageView的         机器人:ID = “@ + ID / item_app_icon”         机器人:layout_width = “@安卓扪/ app_icon_size”         机器人:layout_height = “@安卓扪/ app_icon_size”         机器人:layout_alignParentLeft = “真”

  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);
    
  3. 这对我有用。但我仍然不确定正确解决这个问题。如果您有更好的方法,请告诉我。谢谢!