2

セットアップは次のとおりです。

中央のダイアログとしてスタイル設定されたアクティビティを構築して表示しています。これは、デバイスで全画面表示にすべきではない階層コンテンツを表示するためです。

コンテンツの 1 つのタイプはマップです。これで、MapFragment をダイアログ スタイルの FragmentActivity に正常にロードできました。これは本当にうまくいきます。

問題は、マップの上に新しい TextView (カスタム タイトル バーとして機能する) を配置しようとしたときです。問題は、TextView のコンテンツが透明になったように見え、前のアクティビティのコンテンツがにじみ出ることです。

まったく同じ「デザイン」は、マップのアクティビティでマップを全画面表示できる場合に問題なく機能します。問題は、マップをカスタム サイズ (および別のビューと共に表示) にしようとした場合のみです。

アクティビティは次のとおりです。

public class MapViewActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            requestWindowFeature(Window.FEATURE_NO_TITLE);

            setContentView(R.layout.activity_map_view);

            Window window = this.getWindow();
            window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
            window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

            WindowManager.LayoutParams wmlp = window.getAttributes();
            wmlp.y -= 10;
            window.setAttributes(wmlp);

            Intent i = getIntent();
            String lat = i.getExtras().getString("lat");
            String lng = i.getExtras().getString("lng");
            String title = i.getExtras().getString("title");
            String snippet = i.getExtras().getString("address");

            TextView tv = (TextView)this.findViewById(R.id.mapTitle);
            tv.setText(title);

            SupportMapFragment mf = (SupportMapFragment)this.getSupportFragmentManager().findFragmentById(R.id.map);

            MarkerOptions mo = new MarkerOptions();
            mo.position(new LatLng( Double.valueOf(lat), Double.valueOf(lng) ));
            mo.title(title);
            mo.snippet(snippet);

            GoogleMap gm = mf.getMap();

            gm.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng( Double.valueOf(lat), Double.valueOf(lng) ), 14));
            gm.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            gm.setMyLocationEnabled(true);
            gm.addMarker(mo);

    }
}

レイアウトxmlは次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="300dp"
    android:layout_height="365dp" 
    tools:context=".MapViewActivity" >

    <TextView 
        android:id="@+id/mapTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:textSize="18sp"
        android:textColor="@color/white"
        android:background="@color/blue"
        android:text="TEST TITLE LABEL"
    >
    </TextView>

    <fragment
      android:id="@+id/map"
      android:layout_width="match_parent"
      android:layout_height="280dp"
      android:layout_below="@id/mapTitle"
      class="com.google.android.gms.maps.SupportMapFragment" />

</RelativeLayout>

マニフェストでアクティビティを定義するときに使用するスタイルは次のとおりです。

    <style name="SubViewTheme" parent="android:Theme.Dialog">
    <item name="android:windowAnimationStyle">@style/MainViewAnimation</item>
        <item name="android:windowBackground">@color/white</item>
        <item name="android:background">@null</item>
    </style>

アクティビティを表示するために行っているのは、標準の開始を使用することだけですstartActivity(i);

そして、これが結果のスクリーン キャップです。画質が悪くてすみません。Nexus1 のスクリーン キャップを取得するのは面倒です。

マップ ダイアログのスクリーン ショット「マップダイアログのスクリーンショット」

スクリーン ショットでは、マップを使用した "ダイアログ" アクティビティが表示されます。TextView が表示されます。TextView は、マップの右上にある小さな濃い青色の長方形です。次に、混乱したラベルの左側に、前のダイアログのテキストが TextView のあるべき場所に流れ込んでいます。

私が間違っていることは明らかですか?たぶん、私は新しい MapFragment サポートに野心的すぎるかもしれません:)。

このプロジェクトには 2.3.3 までのサポートが必要なので、サポート ライブラリに行き詰まっています。

助けてくれてありがとう。私の説明で意味をなさないものがある場合はお知らせください。

4

2 に答える 2

2

マップの上に透明なビューを配置します。

<RelativeLayout
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true" />

<View
    android:id="@+id/MyView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent" />
于 2013-06-06T08:27:38.977 に答える
1

なんてこった、これが私が見つけた唯一の答えだとは信じられない....

別のフラグメントを作成し、作成時にfragmentTransactionを実行してマップフラグメントを非表示にし、これをしばらく実行させます(Googleルートの呼び出し/関数が戻るのを待ちました)。次に、別のFTを実行してmapFragmentを表示し、これにより透明性の問題が修正されました.

onCreateで

final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.hide(mDirMapFrag);
ft.commit();
getSupportFragmentManager().executePendingTransactions();

// マップを非表示にします。デフォルトではリスト フラグメントが表示されます。

// Google のルート メソッドから返される私のメソッドでは、簡単な Handler h = new Handler(); を実行できます。h.postDelayed(new Runnable() {} など

final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.show(mDirMapFrag);
ft.commit();
getSupportFragmentManager().executePendingTransactions();

誰かがこれよりも良い解決策を持っていますか?

于 2013-02-14T14:26:01.280 に答える