1

ユーザーが長押し以外の通常のタッチを妨げない、常に画面上の長押しを検出するための新しい透過的なアクティビティ/サービスを作成しようとしています。これまでのところ、私はこれを行うことができました:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    this.getWindow().setFlags(
            WindowManager.LayoutParams.TYPE_INPUT_METHOD
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,PixelFormat.TRANSPARENT);
    //this.getWindow().setFormat(PixelFormat.TRANSLUCENT);

    View myview = GestureOverlayView.inflate(getApplicationContext(),
            R.layout.traslucent, null);
    setContentView(myview);
    myview.setOnTouchListener(this);
}

これはテスト用であり、実際の長押しではありません。

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Click", Toast.LENGTH_LONG).show();
    finish();
    return true;
}

アクティビティの背後にあるタッチを検出することができましたが (希望どおり)、トーストが表示されませんでした。しかし、そこに置いた雲を除いて、画面は黒です。透明にしたいのですが、どうすればいいですか?

4

1 に答える 1

0

styles.xml ファイルに透明なアクティビティ テーマが必要です。このようなもの:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>
</resources>

次に、AndroidManifest.xml ファイルで、

<activity
  android:name=".MyActivity"
  android:theme="Theme.Transparent"
  ... />
于 2013-10-19T20:08:42.340 に答える