

Androidで常に最前面に表示させるようなOverlay表示をするために、ServiceのonStartCommandに次のような実装をしています。

[code]

    // Viewからインフレータを作成する
    LayoutInflater layoutInflater = LayoutInflater.from(this);
    
    // 重ね合わせするViewの設定を行う
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
        PixelFormat.TRANSLUCENT);
    
    // WindowManagerを取得する
    mWm = (WindowManager) getSystemService( Context.WINDOW_SERVICE );
    
    // レイアウトファイルから重ね合わせするViewを作成する
    mView = layoutInflater.inflate( R.layout.service_overlay, null);
    
    // Viewを画面上に重ね合わせする
    mWm.addView(mView, params);
    
[/code]

この時、`service_overlay.xml`に

[code]

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="stack overflow" />
    
    </RelativeLayout>
    
[/code]

のように全画面を覆い尽くす`TextView`を配置すると、`TextView`の下にある`Button`にはタッチイベントは渡りますが、`Button`の範囲外をタッチしても通常のレイヤーにあるアプリにタッチイベントが渡りません。

`TextView`を削除して、`Button`の範囲外をタッチすれば、通常のレイヤーにあるアプリにタッチイベントは渡ります。  
このことから、ルート要素である`RelativeLayout`自体はタッチイベントを消費していないと予想しています。  
そうだとすると、`TextView`がタッチイベントを消費していることになるのですが、その下の`Button`にはイベントが渡っているので、`TextView`もタッチイベントを消費していないということになります。  
ですが実際はタッチイベントは渡っていません。

オーバーレイ表示のViewがタッチイベントを消費せず、通常レイヤーのアプリにタッチイベントを渡すにはどのようにすれば良いでしょうか？


CC BY-SA 3.0
2015-08-17T17:35:57.663
14544
2015-08-17T19:23:27.967
2015-08-17T19:23:27.967
10963
10963
question
android android-layout
Androidでoverlay表示させたViewにタッチイベントを消費させないようにする