2013-08-22 7 views
7

W mojej aplikacji chcę pokazać zawsze widoczny, półprzezroczysty status, ale mam problem z ustaleniem, jak to się robi.Jak utworzyć przezroczyste działanie, które może nakładać się na ekran główny, ale nie jest zwalniane po naciśnięciu przycisku powrotu lub powrotu?

Facebook Messenger i kilka innych aplikacji, które widziałem, robię to, więc wiem, że to możliwe. Korzystają z uprawnienia SYSTEM_ALERT_WINDOW, aby pokazać przeważnie przejrzyste działanie lub dialog "zawsze na wierzchu".

Ale nie rozumiem, jak to się robi, że nie są zamykane po naciśnięciu przycisku powrotu lub przycisku Home? Innymi słowy, nie wydaje się, aby zachowywały się jak działania w ogóle, ale nie widzę, co jeszcze mogłyby być?

Każda pomoc tutaj będzie bardzo mile widziane :-)

Odpowiedz

14

Można utworzyć przejrzystą działalność z pomocą

1.Make tle układu w pliku XML za pomocą przezroczystej

android:background="@android:color/transparent" 

2.and także sprawiają, że temat w pliku manifestu przezroczysty dla danej acitivity

<activity 
     android:name="Your activity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" > 
    </activity> 

3.And do tyłu prasy na przejażdżkę OnBackPressed() Metoda i usunąć super.onBackPressed()

@Override 
    public void onBackPressed() 
     { 
     // TODO Auto-generated method stub 
     } 
+0

Możesz także użyć paska menu lub akcji do wykonania tego widoku zamiast aktywności – Meenal

+0

Witam. Dzięki za odpowiedź :-) Niestety nie mogę uzyskać nawet motywu do pracy - to po prostu komunikat błędu nie znaleziono zasobu ... Mój min sdk wynosi 8, a mój cel to 17, jeśli to robi jakąkolwiek różnicę. Jeśli zmienię nadrzędny domyślny AppBaseTheme, nie ma błędu, ale on również nie działa. –

+0

, jeśli możesz podać swój kod lub dziennik błędów, będzie to dla mnie o wiele bardziej pomocne w rozwiązaniu problemu. – Meenal

3

Można użyć poniższego codes..it pracował dla mnie oprócz tego, że nie pozwalają na instalowanie aplikacji z wewnętrznego magazynu ..

LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
View oView = layoutInflater.inflate(R.layout.activity_transperant, null); 
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
     0 | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
     PixelFormat.TRANSLUCENT);   
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
wm.addView(oView, params);