0

GUI での画面クリックの検出に問題があります。縦向きでは機能しますが、横向きでは機能しません。以下を参照してください。

いくつかの説明と画像を含むGUI ( Fragment) があります。続行するには、ユーザーは画面上の任意の場所をタップする必要があります。クリック/タップイベントをキャプチャするためViewに、画面全体を埋めて他の要素の上に座る (トップビュー) を配置し、このビューでクリックをリッスンすると正常に動作します。

問題は、横向きモードの場合、テキストと画像が多くのスペースを占めることです。そのため、全体が でラップされていScrollViewます。ここから問題が始まります。がアクティブな場合ScrollView(つまり、スクロールできる/スクロール バーが表示されている場合)、上部のビュー (topview) が消えます。ランドスケープ モードの場合、a 内のコンテンツの高さScrollViewが変更されているようです。実験として、 を に置き換えたViewところ、 が使用可能になったときにButton、がButton縦向きの画面いっぱいから横向きモードの通常の高さに変わりましたScrollView

ユーザーが画面をタップしていることを検出する方法はありますか?これは、ScrollViewコントロールを一番上の要素として機能させます。いくつかの方法で GUI を再配置しようとしましたが、成功しませんでした。また、onClickイベント ハンドラを に追加しようとしましたがScrollView、これも成功しませんでした。

私のレイアウトは下にあります。私のトップビューは半透明の赤なので、それがカバーする領域を見ることができました.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:clickable="true" >

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/txtInstructions"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal|center_vertical"
            android:padding="10dp"
            android:text="@string/instructions"
            android:textColor="@color/blue"
            android:textSize="20sp" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:adjustViewBounds="true"
            android:maxWidth="250dp"
            android:padding="20dp"
            android:src="@drawable/main_camera" />
    </LinearLayout>


    <View
        android:id="@+id/view_to_listen_for_touch"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#88FF0000"
        android:clickable="true" />

</RelativeLayout>

4

1 に答える 1

1

機能することの1つは(ハックのように見えますが(かなり醜い))View、コードにスペシャルを(メソッド内に)プログラムで追加し、親の正確な寸法onCreateに基づいてその寸法を設定することです。RelativeLayoutコードのスニペットを次に示します。

//...
        final RelativeLayout parent = (RelativeLayout) findViewById(R.id.ff);
        final View layer = new View(this);
        layer.setBackgroundColor(Color.parseColor("#88FF0000"));
        // the ScrollView really doesn't like this View ,using this without the
        // runnable will not work
        layer.setLayoutParams(new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.MATCH_PARENT));
        layer.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "SDFD",
                        Toast.LENGTH_SHORT).show();
            }
        });
        parent.addView(layer);
        // this is required because if we use directly the getWidth/getHeight we
        // will get 0/0
        layer.post(new Runnable() {

            @Override
            public void run() {
                layer.setLayoutParams(new RelativeLayout.LayoutParams(parent
                        .getWidth(), parent.getHeight()));
            }
        });
//...
于 2012-06-03T19:57:55.837 に答える