有趣的一个。
因此,我们在Google地图上显示了一个“详细信息”视图,对于平板电脑,此活动被强制设置为对话框。
此详细信息视图中包含Google地图。
这在我们的Nexus 10中运行良好,但是Galaxy Note 10 2(4.0.1)在使用这种方法时遇到了一些实际问题。
图形化地将ActionBar标题和主页图标变为透明,并且“详细信息”视图中的“地图”在某种程度上变暗。
之前有没有人遇到过这类问题?我似乎无法找到任何相关内容。
由于
将活动设为“对话框”代码
@SuppressLint("InlinedApi")
private static void makeActivityIntoDialog(Activity activity) {
//To show activity as dialog and dim the background, you need to declare android:theme="@style/PopupTheme" on for the chosen activity on the manifest
//This will only be called for tablets over v11 so we are ok to ignore this warning
activity.requestWindowFeature(Window.FEATURE_ACTION_BAR);
activity.setFinishOnTouchOutside(true);
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND,
WindowManager.LayoutParams.FLAG_DIM_BEHIND);
LayoutParams params = activity.getWindow().getAttributes();
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
if (dm.heightPixels < dm.widthPixels){
params.height = (4 * dm.heightPixels)/ 5 ; //relative height
params.width = (4 * dm.widthPixels)/ 7 ; //relative width
}else{
params.height = (3 * dm.heightPixels)/ 5 ; //relative height
params.width = (5 * dm.widthPixels)/ 7 ; //relative width
}
params.alpha = 1.0f;
params.dimAmount = 0.5f;
activity.getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
}
我已将其归结为导致操作栏图形错误的这些代码行。
mMapFragment = new SupportMapFragment();
if (mMapFragment.isAdded()){
getFragmentManager().beginTransaction().attach(mMapFragment);
}else{
getFragmentManager().beginTransaction().add(R.id.google_map_fragment_container, mMapFragment).commit();
}
基本上第二个我将GoogleMap片段添加到视图中,操作栏会出现问题。
答案 0 :(得分:0)
答案是将地图放在透明的框架布局中 - 不知道为什么,但它现在没有从标题栏中删除那个奇怪的透明方块。
static public class WorkaroundMapFragment extends SupportMapFragment {
public WorkaroundMapFragment() {
super();
}
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle savedInstance) {
View layout = super.onCreateView(layoutInflater, viewGroup, savedInstance);
layout.requestFocus();
FrameLayout frameLayout = new FrameLayout(getActivity());
frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent));
((ViewGroup) layout).addView(frameLayout,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
return layout;
}
}
}