セットアップは次のとおりです。
中央のダイアログとしてスタイル設定されたアクティビティを構築して表示しています。これは、デバイスで全画面表示にすべきではない階層コンテンツを表示するためです。
コンテンツの 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 までのサポートが必要なので、サポート ライブラリに行き詰まっています。
助けてくれてありがとう。私の説明で意味をなさないものがある場合はお知らせください。