Android에서 투명한 활동을 만들려면 어떻게해야합니까?


답변:


1392

res/values/styles.xml파일에 다음 스타일을 추가 하십시오 (없는 스타일은 작성하십시오). 완전한 파일은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>
</resources>

(값 @color/transparent은 파일에 #00000000넣은 색상 값 입니다 res/values/color.xml. @android:color/transparent이후 Android 버전 에서도 사용할 수 있습니다 .)

그런 다음 스타일을 활동에 적용하십시오 (예 :

<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>

13
내가 사용<item name="android:windowBackground">@android:color/transparent</item>
누군가 어딘가에

33
큰! 한 가지 개선 사항 : parent = "@ android : style / Theme.Dialog"를 사용하면 대화 상자의 정확한 동작이 나타납니다. 즉, 액티비티처럼 슬라이딩 인 / 아웃이 아닌 페이드 인 / 아웃이됩니다.
PakitoV

73
@Emilio가 언급했듯이 이것은 주로 android:windowIsFloatingtrue 로 설정되어 있기 때문에 대화 상자처럼 작동 합니다. 정상적인 활동처럼 동작하려면이 속성을 제거하십시오 (이 경우 일치 android:style/Theme.Translucent.NoTitleBar)
aromero

38
전체 화면 및 투명 활동해야 할 사실 </ 항목> : 나는 <항목 이름 = "windowIsFloating 안드로이드를"> 제거
키엠 두옹

12
내 활동은에서 파생되었습니다 AppCompatActivity. 그래서 parent="android:Theme"내 앱이 충돌했습니다. 방금 그것을 제거하고 매력처럼 작동했습니다. 감사!
Atul

193

다음과 같이 진행됩니다.

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />

3
alex가 매니페스트에서 액티비티 선언에 게시 한 테마를 추가하면됩니다.이 비트 android : theme = "@ android : style / Theme.Translucent.NoTitleBar, 각 액티비티에 대해 반투명 테마
Donal Rafferty를

12
@UMMA : 하나의 물음표 만 사용하면 충분합니다. 여러 개의 물음표를 사용하면 시간을내어 질문에 대답하는 사람들이 자신의 얼굴을보고 있다고 생각합니다.
Matthias

7
@Matthias는 보통 사장들이 자신의 위치에 뛰어 들기 때문에 보통 있습니다.
Reno

16
@ user1129443 : 50% black should be #7f000000. 각 성분 (A, R, G, B)은의 값을 가질 수 있습니다 0-255. 50% of 255 = 127. 127 in Hex = 7F투명도 (불투명도)를 계산하는 방법
Nam Trung

4
이 메소드는 액티비티가 실행 중일 때 UI를 잠그지 만 반투명으로 설정되어 있으므로 아무것도 할 수 없습니다.이 UI 잠금을 피하는 방법이 있습니다.
Akhil Latta

126

styles.xml에서 :

<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
    <item name="android:background">#33000000</item> <!-- Or any transparency or color you need -->
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>

AndroidManifest.xml에서 :

<activity
    android:name=".WhateverNameOfTheActivityIs"
    android:theme="@style/Theme.AppCompat.Translucent">
    ...
</activity>

1
이 활동에 실제로 무언가를 표시 할 계획이라면 (예 : 대화 상자 또는 DialogFragment) 모든 것이 어두운 테마임을 알 수 있습니다. 따라서 테마를 Theme.Appcompat.Light.NoActionBar대신 상속받을 수 있습니다 .
tir38

1
내 경우에는 검정색 배경을 표시합니다. 부모 테마가 다른 것을 설정했지만 특정 활동에서 언급 한대로 테마를 변경하고 있습니다.
Abdul Waheed

4
"android : background"를 제거 할 때
효과적입니다

2
나는 당신이 background선호하는 반투명 한 색 을 제거 하고 넣기 를 원한다고 생각합니다 .windowBackground
hmac

귀하의 활동이 @gnobal의 답변과 달리 AppCompatActivity를 사용하는 경우 답변이되어야합니다.
AeroEchelon

37

다음과 같이 매니페스트에서 활동을 선언하십시오.

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

레이아웃에 투명한 배경을 추가하십시오.


가장 좋은 방법은. 감사합니다
Peter

5
이 활동과 함께 Theme.AppCompat 테마 (또는 자손)를 사용해야합니다.
Puni

28

프로젝트의 Android 매니페스트 파일에서 투명하게 만들 활동에 반투명 테마를 지정하십시오.

<activity
    android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

16

나는 새로운 안드로이드 개발자이기도하므로 이것에 약간 추가하고 싶었습니다. 대답은 훌륭하지만 문제가 생겼습니다. colors.xml 파일에 색상을 추가하는 방법을 잘 모르겠습니다. 수행 방법은 다음과 같습니다.

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <color name="class_zero_background">#7f040000</color>
     <color name="transparent">#00000000</color>
</resources>

내 원본 colors.xml 파일에서 "drawable"태그가있었습니다.

<drawable name="class_zero_background">#7f040000</drawable>

그리고 색상에 대해서도 그렇게했지만 "@ color /"참조는 XML에서 "color"태그를 찾는다는 것을 이해하지 못했습니다. 다른 사람을 돕기 위해 이것을 언급해야한다고 생각했습니다.


16

android:theme="@android:style/Theme.Translucent"매니페스트에 활동 태그를 추가하여 2.3.3에 달성했습니다 .

나는 낮은 버전에 대해 모른다 ...


이것은 2.2에서도 잘 작동합니다. 방금 목록보기로 간단한 활동을 만들었으며 마지막 활동 위에 떠 있습니다.
slott

API 1에 추가
되었으므로

6
이것을 사용하는 AppCompatActivity경우 사용하지 마십시오 .
zackygaurav

7.0에서도 작동하므로 좋은 접근 방식입니다. @android : style / Theme.Translucent.NoTitleBar.Fullscreen
Sandeep에

16

내 경우에는 일부 조건을 기반으로 Java에서 런타임 테마를 설정해야합니다. 그래서 하나의 테마를 다른 답변과 비슷한 스타일로 만들었습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>
</resources>

그런 다음 Java에서 내 활동에 적용했습니다.

@Override
protected void onCreate(Bundle savedInstanceState) {

    String email = getIntent().getStringExtra(AppConstants.REGISTER_EMAIL_INTENT_KEY);
    if (email != null && !email.isEmpty()) {
        // We have the valid email ID, no need to take it from user,
        // prepare transparent activity just to perform bg tasks required for login
        setTheme(R.style.Theme_Transparent);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

    } else
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_dummy);
}

여기서 중요한 점 하나를 기억 하십시오. setTheme()전에 함수를 호출해야합니다 super.onCreate(savedInstanceState);. 나는이 시점을 놓치고 2 시간 동안 붙어서 왜 테마가 런타임에 반영되지 않는지 생각했습니다.


9

에서 에서 onCreate 기능, 아래의 된 setContentView 이 줄을 추가합니다 :

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

23
어떤 이유로 배경을 완전히 검은 색으로 만듭니다.
Subin Sebastian

내 @SubinSebastian도 누군가가 그 문제를 해결 했습니까?
finnmglas

8

활동 배경 이미지를 투명하게 만드십시오. 또는 XML 파일에 테마를 추가하십시오.

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />

7

내가 찾은 가장 쉬운 방법은 AndroidManifest에서 활동 테마를 android:theme="@android:style/Theme.Holo.Dialog" 입니다.

그런 다음 활동의 onCreate 메소드에서을 호출하십시오 getWindow().setBackgroundDrawable(new ColorDrawable(0));.


6

대화 상자 활동을 위해 이것을 사용합니다.

getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);

그러나 활동의 기본보기를 보이지 않게 설정해야합니다. 그렇지 않으면 배경이 보이지 않고 모든 뷰가 표시됩니다.


2
의 배경이 완전히 BLACK 만든다
ucMedia

5

위의 답변 외에도 :

활동에서 안드로이드 오레오 관련 충돌을 피하기 위해

<style name="AppTheme.Transparent" parent="@style/Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowCloseOnTouchOutside">false</item>
</style>

<activity
     android:name="xActivity"
     android:theme="@style/AppTheme.Transparent" />

2
2018 년 현재, 이것이 가장 좋은 답변
Geek Guy

API (28) 나에게 에뮬레이터에 검정색 배경을했다
누군가 어딘가에

안드로이드 8.0에서 방향 설정과 관련된 충돌 문제를 해결하려고 시도했지만 여전히 IllegalStateException이 발생합니다. 전체 화면 불투명 활동 만 요청 방향
Rahul Sahni

3

방금 두 가지 일을 했으므로 활동이 투명 해졌습니다. 아래에 있습니다.

  1. 매니페스트 파일에서 방금 활동 태그 에 아래 코드를 추가했습니다 .

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
  2. 그 활동에 대한 기본 레이아웃의 배경을 " # 80000000 "으로 설정했습니다. 처럼

    android:background="#80000000"

그것은 나를 위해 완벽하게 작동합니다.


3

당신이 사용하는 AppCompatActivity경우에 이것을 추가하십시오styles.xml

<style name="TransparentCompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>

에서 manifest파일이 같은 활동 태그에이 테마를 추가 할 수 있습니다

android:theme="@style/TransparentCompat"

자세한 내용은이 기사를 읽으십시오


2

반투명 테마로 지정

android:theme="@android:style/Theme.Translucent.NoTitleBar"

2

두 가지 방법이 있습니다.

  1. Theme.NoDisplay 사용
  2. Theme.Translucent.NoTitleBar 사용

사용 Theme.NoDisplay은 계속 작동하지만 이전 Android 기기에서만 작동합니다. 안드로이드 6.0에 높은 호출하지 않고 Theme.NoDisplay를 사용 finish()에서 onCreate() (or, technically, before onResume())됩니다 충돌 하여 응용 프로그램을. 이것이 권장 사항 을 사용 하는 이유 Theme.Translucent.NoTitleBar인데,이 제한없습니다 .”


1

참고 1 : Drawable 폴더에 test.xml을 만들고 다음 코드를 복사하십시오.

   <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <stroke android:width="2dp" />

    <gradient
        android:angle="90"
        android:endColor="#29000000"
        android:startColor="#29000000" />

    <corners
        android:bottomLeftRadius="7dp"
        android:bottomRightRadius="7dp"
        android:topLeftRadius="7dp"
        android:topRightRadius="7dp" />

</shape>

// 참고 : 모서리와 모양은 요구 사항에 따라 다릅니다.

// 참고 2 : XML 생성 :

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/test"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1.09"
            android:gravity="center"
         android:background="@drawable/transperent_shape"
            android:orientation="vertical" >
     </LinearLayout>
    </LinearLayout>

0

투명하게 보일 필요가있는 매니페스트 파일의 활동 태그에 다음 행을 추가하십시오.

android:theme="@android:style/Theme.Translucent"

0

모든 답변이 혼란 스러울 수 있습니다. 투명한 활동과 UI 없음 활동에는 차이가 있습니다.

이것을 사용하여 :

android:theme="@android:style/Theme.Translucent.NoTitleBar"

활동을 투명하게 만들지 만 UI를 차단합니다.

이것을 사용하는 것보다 None UI 활동을 원한다면 :

android:theme="@android:style/Theme.NoDisplay"


0

setContentView(R.layout.mLayout)활동에서 제거 하고 테마를로 설정할 수 있습니다 android:theme="@style/AppTheme.Transparent". 자세한 내용은 이 링크 를 확인 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.