众所周知,在Android应用中使用Google地图的用户MapActivity每个进程只能使用一个.有一个错误详细讨论了这个问题以及将每个MapActivity放在一个单独的进程中的解决方法.我不想在我的应用程序中出于某些原因这样做,并开发了另一种似乎有用的解决方法.
对于Activity包含地图的每一个,我将它扩展ActivityGroup并创建/销毁MapActivityin onResume/ onPause作为子活动.这样可以确保一次只有一个实例MapActivity(假设您一次只显示一个实例Activity ).以下是我的实现的简化版本:
public class MyMapActivityGroup extends ActivityGroup {
@Override
protected void onResume() {
super.onResume();
addMapView();
}
@Override
protected void onPause() {
super.onPause();
removeMapView();
}
private void addMapView() {
Intent intent = new Intent(this, MyMapActivity.class);
Window window = getLocalActivityManager().startActivity("map", intent);
setContentView(window.getDecorView());
}
private void removeMapView() {
setContentView(new FrameLayout(this));
getLocalActivityManager().removeAllActivities();
}
}
Run Code Online (Sandbox Code Playgroud)
在MapActivity我使用的是没有什么特别的,不需要任何修改.它只是设置一个MapView内容视图.
这对我来说似乎很好.但这样做有什么不利之处吗?我主要担心的是在包含地图的活动之间创建的内存泄漏.
我想使用主题和样式设置动作栏(Honeycomb)的背景.你可以在代码中使用ActionBar.setBackgroundDrawable(Drawable),但我找不到相应的样式属性.
我尝试过使用这个主题和风格Activity:
<style name="Theme.MyApp" parent="android:style/Theme.Holo">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar">
<item name="android:background">@drawable/action_bar_background</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但这会将背景放在左侧的应用程序图标和标题上.右边的菜单图标很好,背景在它下面.
那么反正这样做呢?
根据Android屏幕尺寸和密度统计,3.3%的设备是小屏幕尺寸和高密度(hdpi).这些设备是什么?我一直认为大多数小屏幕设备都是低密度(ldpi).
只要看看摩托罗拉开发者网站,他们所有的小屏幕设备都是低密度的.我错过了(某种程度上)流行的设备类或数据是否错误?
Android Honeycomb中的UI非常不同.我正在寻找开发人员感兴趣的事情.Google还没有更新它的UI指南,所以我试图通过检查布局来找到这些东西.我主要对图标的尺寸和新的视图类型感兴趣.
操作栏高度为56dp(?android:attr/actionBarSize).现在菜单图标似乎是32 x 32 dp,它们之前是48 x 48 dp.由于它们位于操作栏中,因此它们周围有很多填充物.带填充的菜单图标大小为64 x 56 dp.我需要这个,因为我试图把ProgressBar一个菜单项.
还有什么改变吗?此外,我对一些常见UI模式的大小感兴趣,例如邮件客户端等列表/详细布局的宽度.