【问题标题】:Open Side bar app launcher from any activity从任何活动打开侧栏应用程序启动器
【发布时间】:2015-03-23 07:45:58
【问题描述】:
我是 Android 开发的新手。我正在考虑创建一个示例启动器应用程序来替换 android 默认启动器。我已经创建了这个启动器。但我面临几个问题:
1.点击应用程序按钮,我将显示设备上安装的所有应用程序。但是应用程序图标的大小不同。我尝试为它们设置最大高度和宽度,但问题仍然存在。
2.此启动器还包括侧栏。如果我在主屏幕上,我可以从左向右滑动来获得这个侧边栏。但是,当我单击应用程序按钮时,它会启动新活动以显示设备上安装的应用程序,现在如果我尝试在此屏幕上恢复侧边栏,它将无法正常工作。这意味着,侧栏与主屏幕相关联。如何从任何地方、从应用列表屏幕或任何其他应用屏幕访问它。
我想这些是常见问题,但我在谷歌上找不到这方面的帮助。有人可以帮忙吗?
谢谢,
凯拉斯
【问题讨论】:
标签:
android
user-interface
【解决方案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"
-
侧边栏:我不确定这是一种 hack 还是正确的做法。我遵循了这种方法:
我使用窗口管理器来托管侧边栏布局。并且使用窗口布局参数来保持此窗口将始终位于任何其他应用程序的顶部。侧边栏布局不过是一种绘图布局,可以将其滑入和滑出,默认情况下带有此布局。
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);
这按预期对我有用。但我仍然不确定正确的解决方案。如果您有更好的方法,请告诉我。谢谢!!