0

有趣的这一点。

所以我们有一个显示在 GoogleMap 上的“详细信息”视图,而对于平板电脑,这个活动被强制设置为像对话框一样的样式。

此详细信息视图中有一个 GoogleMap。

这在我们的 Nexus 10 中运行良好,但是 Galaxy Note 10 2 (4.0.1) 在这种方法上存在一些实际问题。

从图形上看,ActionBar 标题和 Home Icon 变得透明,而且 Details 视图中的 Map 也变暗了一些。

有没有人遇到过这种类型的问题?我似乎找不到任何东西。

谢谢

将活动变成“对话”代码

    @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();


             }

基本上第二个我将谷歌地图片段添加到操作栏的视图中。

4

1 回答 1

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;
        }
    } 
}
于 2013-10-09T13:25:08.030 回答