2011-09-20 7 views
2

내 응용 프로그램의 주요 활동은 환경 설정 페이지입니다. 사용자가 응용 프로그램 아이콘을 클릭하면 표시됩니다. 또한 사용자 상태 표시 줄 알림을 보내고 화면에 반투명 오버레이를 표시 할 수있는 서비스가 있습니다. 나는 투명한 활동을 만들기 위해 this 게시물을 따라 갔다. 그리고이 모든 것은 작동한다.Android 독립 실행 형 투명한 활동

문제는 반투명 활동을 표시 할 때 응용 프로그램의 기본 창 (환경 설정 페이지)이 그 뒤에 표시된다는 것입니다. 즉, 현재 실행중인 다른 응용 프로그램의 상단에 반투명 오버레이가 나타납니다.

반투명 활동이 나타날 때 응용 프로그램의 다른 활동이 보이지 않도록하려면 어떻게해야합니까?

는 AndroidManifest.xml에 내 주요 활동의 정의이된다 Theme.Translucent에서 파생되는 사용자 정의 테마 사용

<activity android:name=".AppPreferences" android:label="@string/app_name"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

나는 또한 투명 오버레이가 : 여기

<activity android:name=".AppPopupActivity" android:theme="@style/Theme.SemiTransparent"> 
    <intent-filter> 
     <action android:name="com.app.HIDE_POPUP"></action> 
    </intent-filter> 
</activity> 

레이아웃입니다 반투명 오버레이 :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <RelativeLayout android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentBottom="true" > 

     <Button android:text="@string/button_done" 
       android:id="@+id/doneButton" 
       android:layout_alignParentRight="true" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 
     </Button> 
    </RelativeLayout> 
</RelativeLayout> 

및 서비스 :

<service android:name="AppService"> 
    <intent-filter> 
    <action android:name="com.app.AppService" /> 
    </intent-filter> 
</service> 

이 서비스에서 다음 내가 실행 투명 활동을 표시하려면 : 당신의 도움이

+2

투명하지 않습니까? 그 뒤에 어떤 것도 볼 수 있습니다. – nhaarman

+3

니크 (Niek)에 동의합니다. 무슨 일이 일어 났는지 언급하지 않았습니다. – dmon

+0

당신은 두 가지 모두 틀 렸습니다. (나는 짐작할 수 있습니다.)이 녀석은 그의 활동 스택에 문제가 있으며 모든 스택을 없애고 자신의 투명한 물건을 시작해야합니다 .-) 답변보기. –

답변

5

을 Profete162 울부 짖는 소리로 대답이 작동하지 않았지만, 그것은 올바른 방향으로 나를 이끌었다. 더 많은 독서와 실험을 마친 후에는 다음과 같이 주 활동의 launchMode를 "singleInstance"로 변경하는 것이 가장 좋습니다.

<activity android:name=".AppPreferences" android:label="@string/app_name" 
      android:launchMode="singleInstance"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
+1

나를 위해 일했습니다. 고마워요! – Shatazone

0

에 대한

Intent intent = new Intent(this, AppPopupActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
this.startActivity(intent); 

감사를 "문제는 지금 시간 내 반투명 활동을 표시하는 것입니다, 응용 프로그램의 기본 창 (기본 설정 페이지)이 그 뒤에 표시됩니다. "

귀하의 설정 활동이 있고 그 위에 투명성 (TransparentACtivity)이 있습니다. 그들은이 "스택"당신이 당신의 통지를 호출 할 때

에서, transparentActivity가 활동 스택의 앞에 온다 (= 설정)는 "뒤에"어떻게됩니까 transparentACtivity를보고 싶다면

에, 당신은에 있습니다

를 추가해보십시오 FLAG_ACTIVITY_CLEAR_TOP :

이 발사 모드도 FLAG_ACTIVITY_NEW_TASK와 함께 좋은 효과를 사용할 수 있습니다 태스크의 루트 액티비티를 시작하는 데 사용하는 경우,이처럼 스택을 제거은 현재 실행중인 작업의 인스턴스를 포 그라운드로 가져 와서 루트 상태로 지 웁니다. 특히, 통지에서 활동을 시작할 때 유용합니다 ( ).

그래서 당신의 코드가 될 것입니다 시작합니다 :

Intent intent = new Intent(this, A.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
+0

답변 해 주셔서 대단히 감사합니다. 그것은 그것이 그대로 작동하지 않았지만, 나는 그것이 올바른 방향으로 나를 이끌 것으로 믿습니다. – oneself