मैं Android पर एक पारदर्शी गतिविधि कैसे बनाऊं?


915

मैं एक और गतिविधि के ऊपर एक पारदर्शी गतिविधि बनाना चाहता हूं।

इसे कैसे प्राप्त किया जा सकता है?

जवाबों:


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
महान! बस एक सुधार: यदि आप माता-पिता = "@ android: style / Theme.Dialog" का उपयोग करते हैं, तो आपको एक संवाद का व्यवहार मिलेगा। इसका मतलब है कि अंदर / बाहर फिसलने के बजाय / एक गतिविधि (जैसे गतिविधि) में लुप्त होती है
PakitoV

73
जैसा कि @Emilio ने उल्लेख किया है कि यह एक संवाद की तरह व्यवहार करेगा, मुख्य रूप से android:windowIsFloatingसेट टू ट्रू के कारण। सामान्य गतिविधि की तरह व्यवहार करने के लिए इस संपत्ति को निकालें (इस मामले में यह मेल खाएगा android:style/Theme.Translucent.NoTitleBar)
अरोमा

38
मैंने <full name = "android: windowIsFloating"> true </ item> को पूर्णस्क्रीन और पारदर्शी गतिविधि के लिए हटा दिया है
Kiem Duong

12
मेरी गतिविधि से लिया गया था AppCompatActivity। इसलिए parent="android:Theme"मेरा ऐप क्रैश कर रहा था। मैंने इसे हटा दिया और यह आकर्षण की तरह काम किया। धन्यवाद!
अतुल

193

यह इस प्रकार चलता है:

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

3
आप बस विषय को जोड़ते हैं जैसे कि एलेक्स ने घोषणा में आपकी गतिविधि घोषणा में पोस्ट किया है - यह बिट एंड्रॉइड: थीम = "@ एंड्रॉइड: स्टाइल / थीम। ट्रान्सल्यूसेंट.नोटिटेलर, प्रत्येक गतिविधि के लिए आप इसे ट्रांसलूसेंट थीम
डोनल रैफरटी

12
@UMMA: एक प्रश्न चिह्न का प्रयोग आमतौर पर पर्याप्त होता है। एकाधिक प्रश्न चिह्न ऐसे लोगों को बनाते हैं जो आपके प्रश्नों का उत्तर देने के लिए समय निकालते हैं और सोचते हैं कि आप उनके चेहरे पर कूद रहे हैं।
मथायस

7
@ मैथिया वे आमतौर पर हैं, क्योंकि उनके बॉस उनके यहां जंपिन हैं
रेनो

16
@ user1129443 50% black should be #7f000000:। प्रत्येक घटक (ए, आर, जी, बी) से मान ले सकते हैं 0-25550% of 255 = 127. 127 in Hex = 7Fपारदर्शिता (अस्पष्टता) की गणना कैसे करें
नाम ट्रुंग

4
यह तरीका यूआई को बंद कर देता है क्योंकि गतिविधि चल रही है लेकिन चूंकि यह पारभासी पर सेट है, इसलिए कोई भी कुछ नहीं कर सकता। इस UI लॉकिंग से बचने का कोई तरीका नहीं है।
अखिल लट्ठ

126

शैलियों में। 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
यदि आप वास्तव में इस गतिविधि पर कुछ प्रदर्शित करने की योजना बना रहे हैं (एक डायलॉग या डायलॉगफ्रैगमेंट कहें), तो आप देखेंगे कि सब कुछ अंधकारमय है। इसलिए हो सकता है कि आप अपने विषय को Theme.Appcompat.Light.NoActionBarइसके बजाय विरासत से प्राप्त करना चाहें ।
tir38

1
मेरे मामले में यह काली पृष्ठभूमि दिखा रहा है। क्या माता-पिता की थीम कुछ और है, लेकिन एक विशेष गतिविधि पर मैं विषय बदल रहा हूँ जैसा कि उल्लेख किया गया है। कोई मदद?
अब्दुल वहीद

4
जब मैं "एंड्रॉइड: बैकग्राउंड" हटाता हूं, तो बहुत अच्छा काम करता है
Oded Breiner

2
मुझे लगता है कि आप backgroundअपने पसंदीदा अर्ध पारदर्शी रंग को हटाना चाहते हैंwindowBackground
hmac

यदि आपकी गतिविधि @ gnobal के उत्तर के विपरीत AppCompatActivity का उपयोग कर रही है तो इसका उत्तर होना चाहिए।
एरोहेलॉन

37

इस तरह से अपनी गतिविधि की घोषणा करें:

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

और अपने लेआउट में एक पारदर्शी पृष्ठभूमि जोड़ें।


सर्वोत्तम मार्ग। धन्यवाद
पीटर

5
आपको इस गतिविधि के साथ एक Theme.AppCompat विषय (या वंशज) का उपयोग करने की आवश्यकता है।
पुनी

28

जिस गतिविधि को आप अपनी परियोजना की Android मेनिफ़ेस्ट फ़ाइल में पारदर्शी बनाना चाहते हैं, उस पारभासी विषय को असाइन करें:

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

16

मैं इसे थोड़ा जोड़ना चाहता था क्योंकि मैं एक नया एंड्रॉइड डेवलपर हूं। स्वीकृत उत्तर बहुत अच्छा है, लेकिन मैं कुछ परेशानी में चला गया। मुझे यकीन नहीं था कि कैसे color.xml फ़ाइल को रंग में जोड़ा जाए। यहां बताया गया है कि यह कैसे किया जाना चाहिए:

colors.xml

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

मेरे मूल रंगों में। Xml फ़ाइल में मेरा टैग "ड्रॉबल" था:

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

और इसलिए मैंने रंग के लिए भी ऐसा किया, लेकिन मैं यह नहीं समझ पाया कि "@ रंग /" संदर्भ का मतलब XML में "रंग" टैग से है। मैंने सोचा कि मुझे इसका उल्लेख करना चाहिए और साथ ही किसी और की मदद करने के लिए भी।


16

मैंने इसे केवल प्रदर्शन android:theme="@android:style/Theme.Translucent"में गतिविधि टैग में जोड़कर 2.3.3 पर हासिल किया ।

मैं कम संस्करणों के बारे में नहीं जानता ...


यह 2.2 के लिए भी ठीक काम करता है। मैंने सिर्फ एक सूची के साथ एक साधारण गतिविधि बनाई और यह अंतिम गतिविधि के ऊपर तैरता है।
slott

यह एपीआई 1 में जोड़ा गया था, यह समस्या नहीं है :)
xmen

6
AppCompatActivityयदि आप इसका उपयोग कर रहे हैं तो उपयोग न करें ।
zackygaurav

7.0 में भी काम करता है इसलिए इसका अच्छा तरीका है। मैंने इसे @android: शैली / Theme.Translucent.NoTitleBar.Fullscreen में संशोधित किया
संदीप

16

मेरे मामले में, मुझे कुछ शर्तों के आधार पर जावा में रनटाइम पर थीम सेट करना होगा। इसलिए मैंने शैली में एक विषय बनाया (अन्य उत्तरों के समान):

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

फिर जावा में मैंने इसे अपनी गतिविधि पर लागू किया:

@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
किसी कारण से पृष्ठभूमि को पूरी तरह से काला कर देता है।
सुबिन सेबेस्टियन

मेरा भी @SubinSebastian, क्या किसी ने उस पर एक तय किया?
फाइनेंगलस

8

बस गतिविधि पृष्ठभूमि छवि को पारदर्शी होने दें। या XML फ़ाइल में विषय जोड़ें:

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

7

सबसे आसान तरीका जो मैंने पाया है वह है एंड्रॉइड मैनफेस्ट में गतिविधि की थीम सेट करना android:theme="@android:style/Theme.Holo.Dialog"

फिर गतिविधि की ऑनक्रिट विधि में, कॉल करें getWindow().setBackgroundDrawable(new ColorDrawable(0));


6

संवाद गतिविधि के लिए मैं इसका उपयोग करता हूं:

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

लेकिन आपको अपने मुख्य दृश्य को अदृश्य करने के लिए गतिविधि में सेट करने की भी आवश्यकता है। अन्यथा पृष्ठभूमि अदृश्य हो जाएगी जबकि इसमें सभी दृश्य दिखाई देंगे।


2
पृष्ठभूमि को पूरी तरह से बनाता है
ucMedia

5

उपरोक्त उत्तरों के अलावा:

गतिविधि पर Android Oreo संबंधित दुर्घटना से बचने के लिए

<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 तक, यह सबसे अच्छा उत्तर
गीक गाइ

मुझे एपीआई 28 के साथ एमुलेटर पर एक काले रंग की पृष्ठभूमि दी
किसी ने कहीं

मैंने एंड्रॉइड 8.0 में अभिविन्यास स्थापित करने से संबंधित क्रैश को ठीक करने के लिए यह कोशिश की, लेकिन मुझे अभी भी अवैध है। अपवाद: केवल फुलस्क्रीन अपारदर्शी गतिविधियां अभिविन्यास का अनुरोध करती हैं
राहुल साहनी

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 उपकरणों पर। Android 6.0 और बाद के वर्शन में, बुला बिना Theme.NoDisplay का उपयोग कर finish()में onCreate() (or, technically, before onResume())होगा दुर्घटना अपने अनुप्रयोग। यही कारण है कि सिफारिश का उपयोग करना है Theme.Translucent.NoTitleBar, जो इस सीमा से ग्रस्त नहीं है । "


1

नोट 1: ड्रा करने योग्य फ़ोल्डर में 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

वे सभी उत्तर भ्रमित करने वाले हो सकते हैं, पारदर्शी गतिविधि और कोई भी यूआई गतिविधि के बीच कोई अंतर नहीं है।

इसका उपयोग करना:

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

गतिविधि को पारदर्शी बनाएगा लेकिन UI को अवरुद्ध कर देगा।

यदि आप इसका उपयोग करने की तुलना में कोई भी UI गतिविधि नहीं चाहते हैं:

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


0

आप setContentView(R.layout.mLayout)अपनी गतिविधि से हटा सकते हैं और थीम सेट कर सकते हैं android:theme="@style/AppTheme.Transparent"। अधिक जानकारी के लिए इस लिंक को देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.