2

画面に別のフラグメントを追加しています。この画面にはすでにSupportMapFragmentにenMapViewがあるため、追加されたフラグメントはMapViewの上にあるはずです。この新しいビューは、画面の2/3とマップの大部分のようにカバーされていますが、ビューをスクロールすると、その下のMapViewがスクロールされます。新しいビューがMapViewの上に追加されるため、これは私が期待したものではありません。新しいビューは、コンテンツをラップするImageViewを含む相対レイアウトで存在します。したがって、imageview(まったく機能がない)をスクロールすると、MapViewがスクロールします。誰かがこれが起こる理由を説明でき、可能であれば、私に解決策を提供できますか?

編集:

基本的に私は画面全体を埋めるMapViewを持っています。このコードは私のマップビューを設定します:

public void setUpMapIfNeeded(int satelliteMode, LatLng startPoint, float zoomLevel) {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mapView == null) {
            // Try to obtain the map from the SupportMapFragment.
            mapView = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapview))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mapView != null) {
                setUpMap(satelliteMode, startPoint, zoomLevel);
            }
        }
    }

    private void setUpMap(int satelliteMode, LatLng startPoint, float zoomLevel) {
        // more settings
        }

次に、ユーザーがマーカーをクリックすると、マップビューの上部にフラグメントが表示される必要があります。

public void createDetailView() {
        detailView = new DetailViewFragment();
        android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
        android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.viewLayout, detailView).commit();
        fragmentManager.executePendingTransactions();
    }

これはすべて正常に機能します。ビューが表示されます(これは画面全体の約2/3です)が、ユーザーは詳細ビューをスワイプするときにマップをスクロールできます。詳細ビューは、多くのテキストとボタンを含む相対レイアウトで構成されています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:layout_marginTop="45sp">


<!-- a lot of text and buttons here -->

</RelativeLayout>
4

3 に答える 3

0

だから私はまだこれに対処するための適切な方法を見つけていません。代わりに、別のビューがマップビューの上にあるときに、マップビューのすべてのタッチとクリックを無効にしました。これは問題なく機能します。

于 2013-03-27T11:42:39.123 に答える
0

それでも関連がある場合に備えて、この種のレイアウト(1つのビューが別のビューの上に表示される)を処理する方法は、次の方法のLinearLayout代わりに使用することです。RelativeLayout

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <SomeView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <PopOutView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:visibility="gone" />

</LinearLayout>

あなたの場合、マップはそれSomeViewと相対的なレイアウトになりPopOutViewます。次に、コードでpopOutView.setVisibility = View.VISIBLE、表示したいときにいつでも呼び出すだけです。上に描画されるのではなく、最初のビューを縮小します(したがって、視覚効果が少し異なります)が、少なくともこの方法では、タッチイベントは正しいビューに移動する必要があります。

于 2013-06-14T08:32:21.810 に答える
0

フラグメントのレイアウトのクリック可能なプロパティをtrueに設定します。タッチイベントの伝播を停止します。

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#FFF"
    android:clickable="true">
</FrameLayout>
于 2016-07-28T03:20:26.593 に答える