20

これがシナリオです。ボタン B があり、引き出したときに画面全体を覆うスライドドロワーがあります。画面を引き出して、B が表示されていた画面をタッチすると、そのアクションが引き続き実行されます。

どうすればこれを回避できますか?

まったく同じ問題を説明しているこのスレッドを見つけましたが、回答は受け入れられず、与えられたものはうまく機能しませんでした。

更新: 以下に示すように、Report.java という名前のファイルと、対応する report.xml ファイルがあります。

    <SlidingDrawer
     android:id="@+id/drawer"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:handle="@+id/reportSlideButton"
     android:content="@+id/reportContent"
     android:orientation="horizontal">

    <LinearLayout 
        android:id="@id/reportContent" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:orientation="vertical" 
        android:layout_weight="1"
        android:padding="10dp"
        android:background="@color/bg_color">
            <TextView android:id="@+id/garbageTypeTextView" 
                android:layout_height="wrap_content" 
                android:textColor="@color/text" 
                android:layout_width="fill_parent" 
                android:text="@string/garbageTypeString" 
                android:textStyle="bold"/>
            <Spinner android:id="@+id/garbageTypeSpinner"
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent"/>
            <TextView android:id="@+id/textViewForDateTitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:text="@string/dateString"
                android:textColor="@color/text" 
                android:textStyle="bold" />
            <TextView android:id="@+id/dateTextView"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:textColor="@color/text" />
            <TextView android:id="@+id/textViewForAddressTitle"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content" 
                android:text="@string/addressString"
                android:textColor="@color/text" 
                android:textStyle="bold" />
            <TextView android:id="@+id/addressTextView"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:textColor="@color/text" />
            <TextView  android:id="@+id/textViewForPositionTitle"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" 
                android:text="@string/positionString"
                android:textColor="@color/text" 
                android:textStyle="bold" />
            <TextView android:id="@+id/positionTextView"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:textColor="@color/text" />
            <TextView android:id="@+id/textViewForCommentTitle"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content" 
                android:text="@string/commentString"
                android:textColor="@color/text" 
                android:textStyle="bold" />
            <EditText android:id="@+id/commentTextBox"
                android:layout_height="fill_parent"
                android:layout_width="fill_parent" 
                android:layout_weight="1"/>
            <Button android:id="@+id/sendCrapportButton" 
                android:onClick="sendCrapport"
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent"
                android:text="Skicka rapport" />

    </LinearLayout>
        <Button android:id="@id/reportSlideButton"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:text=">"/>
</SlidingDrawer>

コンポーネントの追加:

protected void addComponents() {
    takePictureButton = (ImageButton) findViewById(R.id.takePictureButton);
    slidingDrawer = (SlidingDrawer) findViewById(R.id.drawer);
}
4

7 に答える 7

45

android:clickable="true" をスライダー コンテンツ タグ (id reportContent) に追加できます。そうすれば、「クリックスルー」しません。スライダー内のボタンは引き続き機能するはずです..願っています;)

于 2011-03-28T16:49:22.250 に答える
13

@ f-horn の回答に追加するだけです:

SlidingDrawer の別のファイルからレイアウトを含める場合 (私のように)、include タグではなく、含まれているレイアウト ファイルに 'android:clickable="true"' を配置する必要があります。むしろ例を使用しましょう:

これは機能しません:

main.xml

<SlidingDrawer  android:handle="@+id/handle"
       android:content="@+id/content">

        <ImageView android:id="@id/handle" />
        <include android:id="@+id/content" layout="@layout/some_other_layout" 
        android:clickable="true"/>
</SlidingDrawer>'

この意志:

main.xml

<SlidingDrawer  android:handle="@+id/handle"
        android:content="@+id/content">

        <ImageView android:id="@id/handle" />
        <include android:id="@+id/content" layout="@layout/some_other_layout"/>
</SlidingDrawer>'

some_other_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:clickable="true"> ............
<LinearLayout/>
于 2011-10-02T14:01:16.880 に答える
2

ねえ、私は何日もこのエラーに固執していたので、簡単な答えがあります

あなたはすでにあなたのクラスでslidedrawerを作成しています。クラスに実装するだけで、OnDrawerOpenListener、onDrawerCloseListener

次に、クラスに実装されていないメソッドを追加させ、ondraweropenlistener{ slidingdrawer.setclickable(true); }

そしてdrawercloselistener{ slidingdrawer.setclickable(false); }

これは、引き出しが開いたときに設定され、クリック可能になり、後ろのビューでクリックするのを防ぎ、閉じるとすべてがデフォルトに戻ります

これが最も簡単な解決策です。試してみてください:D

于 2012-10-17T18:04:27.403 に答える
2

スライダーにタッチ リスナーを追加し、true を返す必要があると思います。このようにして、タッチ イベントが消費されたことをシステムに伝えます。

于 2011-03-22T15:12:00.663 に答える
1

私は同じ問題を抱えていました。スライド ドロワーのアイテムにフォーカスを合わせることができませんでした。いくつかの異なることを試した後、タグと contentLayout を持つ Linear Layout の間のスライド ドロワーに配置されていることがわかりました。

削除すると、すべて正常に動作します。

<SlidingDrawer ....>
    <FrameLayout android:id="@+id/slideHandle" ... />

        **MOVED** <ScrollView> **TO**
    <LinearLayout android:id="@+id/contentLayout" ... >
        <ScrollView> **HERE**

これが誰かに役立つことを願っています。

于 2011-07-21T21:05:56.610 に答える
0

SlidingDrawer で onTouch(View v, MotionEvent event) をオーバーライドし、true を返します。

私が確信していないことの 1 つは、フレームワークが、ドロワーが閉じられている場合でもビューをオーバーレイすると見なすかどうかです。その場合は、いくつかのチェックを追加してドロワーの状態を確認し、isOpened() を返す必要があります。これは、ドロワーが開いている場合は true ですが、閉じている場合は false になります。

于 2011-03-22T15:15:43.770 に答える
0
This is My main layout and where i introduce sliding drawer inside this. 

 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/Beige"
    android:clickable="true"
    android:orientation="vertical" >

    <Button
    android:id="@+id/DoneStart"
    android:layout_width="100dp"
    android:layout_height="40dp"
    android:textSize="14sp" />

    <SlidingDrawer
    android:id="@+id/SlidingDrawer"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:content="@+id/contentLayout"
    android:handle="@+id/handle_image"
    android:padding="1dp"
    android:rotation="180" >

    <LinearLayout
    android:id="@+id/contentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
    android:id="@+id/TextView01"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_weight="8"
    android:text="Hello Slider" />
    </LinearLayout>
    </SlidingDrawer>

その android:clickable="true" を追加する場所に少し不満を感じた後の私のサンプル

于 2015-05-05T10:21:22.177 に答える