2013-04-16 4 views
4

Я создал одно прозрачное действие A. В этом я использую поверхностный вид для воспроизведения видео. Я могу прикоснуться к приложениям и действиям, стоящим за этой деятельностью. Но когда я нажимаю другое приложение, действие A переходит на задний план и закрывается ненадлежащим образом. Я хочу делать активность. Всегда держись на экране, если вы нажмете на другие приложения. Я пробовал много флагов, но никто не работает правильно. Если вы хотите знать, как сделать окно активности, всегда оставаться на вершине?Как сделать прозрачное окно активности всегда сверху на Android?

Пожалуйста, поделитесь своими идеями и предложениями. Любая помощь будет высоко оценен.

+0

Вы говорите о .. диалоге? – deadfish

+2

Очень хороший пост, почему вы не должны делать то, что вы пытаетесь: [Пожалуйста, прекратите использование окон/диалогов в общесистемных оверлеях в ваших приложениях!] (Https://plus.google.com/u/0/115395645419924848353/posts/eMD11HFjrCs) – WarrenFaith

ответ

3

Вы можете использовать WindowManager.addView(), чтобы добавить свой индивидуальный вид в окно, и вы можете установить атрибуты WindowManager.LayoutParams для вашего вида.

Вот пример:

private WindowManager wm=null; 
private WindowManager.LayoutParams wmParams=null; 

private MyCustomView myView=null; 

private void createView(){ 
    myView = new MyCustomView(getApplicationContext()); 
    wm = (WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
    wmParams = new WindowManager.LayoutParams(); 

    /** 
    * Window type: phone. These are non-application windows providing 
    * user interaction with the phone (in particular incoming calls). 
    * These windows are normally placed above all applications, but behind 
    * the status bar. 
    */ 
    wmParams.type=LayoutParams.TYPE_PHONE; 
    wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE; 
    wmParams.gravity=Gravity.LEFT|Gravity.TOP; 
    wmParams.x=0; 
    wmParams.y=0; 
    wmParams.width=40; 
    wmParams.height=40; 
    wm.addView(myView, wmParams); 
} 

Не забудьте добавить разрешение в AndroidManifest.xml:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

Затем вы можете сделать все, что вы хотите в MyCustomView из всех приложений.

+0

Вы можете показать это, когда входящий вызов находится в состоянии блокировки экрана? Для меня это не видно (HTC m7 4.4.2) – snowdragon

+0

@snowdragon, вы можете найти порядок, в котором различные типы окон отображаются в коде для [PhoneWindowManager.windowTypeToLayerLw] (http://grepcode.com/file/repository .grepcode.com/Java/внутр/com.google.android/Android/5.0.2_r1/ком/Android/внутренний/политика/осущ/PhoneWindowManager.java # PhoneWindowManager.windowTypeToLayerLw% 28int% 29). Попробуйте 'TYPE_SYSTEM_OVERLAY', если вы не хотите, чтобы ваше окно было интерактивным. Если вы хотите, чтобы он был интерактивным, попробуйте 'SYSTEM_SYSTEM_ALERT' или' TYPE_SYSTEM_ERROR'. – Sam