Android で常に最前面に表示されるフルスクリーン オーバーレイ アクティビティを作成する方法 質問する

Android で常に最前面に表示されるフルスクリーン オーバーレイ アクティビティを作成する方法 質問する

Android のディスプレイの前面に常に表示されるアクティビティを作成できるようにしたいと思います。入力は受け取らず、その下にあるアプリケーションに渡すだけです。HUD のようなものです。

基礎となるウィンドウ タイプを TYPE_SYSTEM_ALERT に設定する必要があることを調査できましたが、Android が私のコードを無視しているようです。マニフェストから android.permission.SYSTEM_ALERT_WINDOW 権限を削除しても例外はスローされません。(このウィンドウ タイプを使用するために必要です)。ダイアログで ALERT タイプを使用しようとしたところ、正常に動作しましたが、ダイアログを全画面の透明なエンティティにすることはできません。これが私のコードですが、何か簡単なものが欠けているのかもしれません。

public void onCreate(Bundle savedInstanceState) {       
     super.onCreate(savedInstanceState);        

     requestWindowFeature(Window.FEATURE_NO_TITLE);
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
     getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);             
     getWindow().setBackgroundDrawableResource(android.R.color.transparent);
     getWindow().setFormat(PixelFormat.TRANSLUCENT);
     setContentView(R.layout.main);
}

半透明設定は、XML マニフェストで外部的に有効にする必要があります。そうしないと、機能しません。

 <item name="android:windowIsTranslucent">true</item>

ベストアンサー1

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT);

WindowManager wm = (WindowManager) getApplicationContext()
    .getSystemService(Context.WINDOW_SERVICE);

ViewGroup mTopView = (ViewGroup) App.inflater.inflate(R.layout.main, null);
getWindow().setAttributes(params);
wm.addView(mTopView, params);

おすすめ記事