22

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>
4

3 に答える 3

25
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);
于 2012-04-11T14:03:31.793 に答える
-1

これをチェックしてください

AndroidManifest.xmlファイルにそのことを記載してください

<activity android:name=".MyActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />

アクティビティをフルスクリーンで透明にしたい場合も

これをチェックしてください

<activity android:name=".MyActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
于 2012-04-11T09:38:31.253 に答える