ऐप स्टार्ट पर सफेद स्क्रीन कैसे ठीक करें?


111

मेरे पास एक एंड्रॉइड ऐप है जो स्टार्टअप पर 2 सेकंड के लिए एक सफेद स्क्रीन प्रदर्शित करता है। मेरे अन्य एप्लिकेशन ऐसा नहीं करते हैं, लेकिन यह एक करता है। मैंने इस उम्मीद के साथ एक स्पलैशस्क्रीन भी लागू किया है कि यह इसे ठीक कर देगा। क्या मुझे अपनी स्प्लैश स्क्रीन नींद का समय बढ़ाना चाहिए? धन्यवाद।


1
जिस गतिविधि को आप शुरू कर रहे हैं, उसे करने में बहुत समय लग रहा है onCreate। उस गतिविधि में सिर्फ "setContentView" की कोशिश करें और जांचें कि क्या यह देरी हो गई है।
शेरिफ इल्हातिब

1
क्षमा करें, मैं नौसिखिया हूं और मुझे जावा के साथ कोई अनुभव नहीं है, क्या आप स्पष्ट रूप से बता सकते हैं? और कृपया एक "जवाब" दें ताकि मैं उसे
अनाम

1
क्या आप अपने प्रोजेक्ट में जावा या सी # का उपयोग कर रहे हैं ?
शरीफ इलाक़ेब

1
आशा है कि यह लिंक आपकी मदद करेगा: cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous
Mikalai Daronin

geeksforandroidgeeks.com/android/splash_issue कृपया लिंक के माध्यम से जाएं
विवेक कुमार समीले

जवाबों:


104

AndroidManifest.xml फ़ाइल में प्रारंभिक गतिविधि के लिए बस पारदर्शी विषय का उल्लेख करें।

पसंद:

<activity
        android:name="first Activity Name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
 <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
 </activity>

और उस स्क्रीन को Activityकक्षा के स्थान पर विस्तारित करें AppCompatActivity

पसंद :

public class SplashScreenActivity extends Activity{

  ----YOUR CODE GOES HERE----
}

4
लेकिन final ActionBar actionBar = getActionBar();थीम के पारभासी होने पर अशक्त वापस आ जाएगा
कोई व्यक्ति 7

16
पंकज - हाँ, मुझे पता चला कि यूआई का बुरा अनुभव "पूर्वावलोकन" विंडो के कारण था ... जाहिर है कि Google में किसी ने निर्णय लिया था कि एक सफेद पूर्वावलोकन विंडो वास्तव में डिफ़ॉल्ट रूप से उपयोग करने के लिए बहुत बढ़िया थी। हालाँकि, एक ऐप में जो एक डार्क बैकग्राउंड का उपयोग करता है, वह वास्तव में एक बुरा विचार है। इसका उपाय यह है कि आप अपने ऐप के लिए एक कस्टम स्टाइल बनाएं और 'एंड्रॉइड: विंडोबेकग्राउंड' को उस रंग को निर्दिष्ट करें जिसे आप उपयोग करना चाहते हैं। अनुभाग "सही पूर्वावलोकन विंडो" देखें cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous
कहीं

2
@ हगई L यह मुझे "java.lang.IllegalStateException" जैसी त्रुटि देता है: आपको इस गतिविधि के साथ एक Theme.AppCompat विषय (या वंशज) का उपयोग करने की आवश्यकता है। "
तेजडायराइड

1
Android: theme = "@ android: style / Theme.Translucent.NoTitleBar" मेरे लिए कोई काम नहीं आया, कोई सुझाव?
jay

1
@TejaDroid को स्टॉप एरर पाने के लिए "java.lang.IllegalStateException" को आपको Android.app.Activity द्वारा अपनी गतिविधि का विस्तार करना होगा, अभी आप AppCompactActivity का उपयोग कर रहे हैं। तो AppCompactActivity के लिए आप सामान्य विषयों का उपयोग नहीं कर सकते।
तैयार एंड्रॉइड

167

इसे एक कस्टम शैली में रखें और यह सभी समस्याओं को हल करता है। हैकी ट्रांसलूसेंट फिक्स का इस्तेमाल करने से आपका टास्क बार और नेवी बार ट्रांसलूसेंट हो जाएगा और स्पैगशिन या मुख्य स्क्रीन स्पैगेटी जैसा दिखने लगेगा।

<item name="android:windowDisablePreview">true</item>


3
Thx आदमी, बहुत सारी परेशानी से बचाया। मुझे सेटिंग पॉइंट प्राप्त करने के लिए शुरू में कठिन समय था। यह मुख्य थीम ब्लॉक होगा: इनलाइन `<style name =" AppTheme "parent =" Theme.AppCompat.NoActionBar "> <वस्तु का नाम =" android: windowDisablePreview "> true </ item> मुख्य शैली में प्रवेश बिंदु होना चाहिए। .xml
हुमा एनएन

2
धन्यवाद! इसे style.xml में रेस फोल्डर में स्टाइल टैग नाम = "AppTheme" (या आप किस विषय में उपयोग करते हैं) में रखें
Dimmduh

मेरे लिए काम किया। धन्यवाद।
user1510006

मुझे लगता है कि इसका उत्तर स्वीकार किया जाना चाहिए, क्योंकि बहुत सारे देव कस्टम विषयों का उपयोग करते हैं
सिवातोस्लाव जैतसेव

सुपर उपयोगी :)
जेसन

74

यहां छवि विवरण दर्ज करें

जैसे आप ट्यूब .. शुरू में वे सफेद स्क्रीन के बजाय आइकन स्क्रीन दिखाते हैं। और 2 सेकंड के बाद होम स्क्रीन दिखाता है।

सबसे पहले Res / drawable में XML drawable बनाएं।

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@color/gray"/>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

इसके बाद, आप इसे थीम में आपकी स्प्लैश गतिविधि की पृष्ठभूमि के रूप में सेट करेंगे। अपनी स्टाइल.एक्सएमएल फ़ाइल पर नेविगेट करें और अपनी छप गतिविधि के लिए एक नया विषय जोड़ें

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/background_splash</item>
    </style>

</resources>

अपने नए SplashTheme में, विंडो की पृष्ठभूमि विशेषता को अपने XML ड्रा करने योग्य पर सेट करें। अपने AndroidManifest.xml में अपनी छप गतिविधि के विषय के रूप में इसे कॉन्फ़िगर करें:

<activity
    android:name=".SplashActivity"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

यह लिंक आपको जो चाहिए वो देता है। कदम प्रक्रिया द्वारा कदम। https://www.bignerdranch.com/blog/splash-screens-the-right-way/

अपडेट करें:

इस layer-listतरह भी आसान हो सकता है (जो <bitmap>टैग के विपरीत केंद्रित लोगो के लिए वेक्टर ड्राअब भी स्वीकार करता है ):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Background color -->
    <item android:drawable="@color/gray"/>

    <!-- Logo at the center of the screen -->
    <item
        android:drawable="@mipmap/ic_launcher"
        android:gravity="center"/>
</layer-list>

1
यह वास्तव में महान है, लेकिन कैसे मैं नीचे पाठ जोड़ सकते हैंmipmap/ic_launcher
हसन एक यूसुफ

6
यह सबसे अच्छा जवाब है। कारण यह है कि उपरोक्त समाधानों का उपयोग करते समय, एप्लिकेशन के दृश्य स्टार्टअप में देरी होती है।
जंक्शन

बिटमैप नियंत्रित करने के लिए एक और ठीक stackoverflow.com/questions/23079355/...
amorenew

1
यह स्वीकृत उत्तर होना चाहिए, अन्य सभी इसे सिर्फ ऐसे दिखते हैं जैसे ऐप कभी भी उपयोगकर्ता के दृष्टिकोण से शुरू नहीं हुआ है। एक सरल तरीका layer-listयह हो सकता है: <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Background color --> <item android:drawable="@color/white"/> <!-- Logo at the center of the screen --> <item android:drawable="@mipmap/ic_launcher" android:gravity="center"/> </layer-list>
फ्रेंको

यह समाधान उस समस्या को हल नहीं करता है जब हम पृष्ठभूमि के रंग को परत-सूची में प्रोग्रामेटिक रूप से बदलना चाहते हैं (आपके उदाहरण में ग्रे से नीले रंग में)। इस परिदृश्य में, पहले ग्रे स्क्रीन एक या दो बार दिखाई देती है, फिर नीली पृष्ठभूमि सेट की जाती है!
मोहम्मद अफ्रशतेह

71

एक शैली आप में बनाइए style.xml इस प्रकार है:

<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

और AndroidManifest में अपनी गतिविधि के साथ इसका उपयोग करें:

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

8

आपको साइरिल मोटियार: एंड्रॉइड ऐप लॉन्चिंग द्वारा बनाई गई इस शानदार पोस्ट को पढ़ना चाहिए

आपको अपना Themeस्टाइल style.xml में कस्टमाइज़ करना होगा और onCreateActionBar.setIcon / setTitle / etc के रूप में कस्टमाइज़ करना होगा ।

Google द्वारा प्रदर्शन टिप्स पर प्रलेखन भी देखें ।

का प्रयोग करें Trace Viewऔर Hierarchy Viewerसमय अपने दृश्य प्रदर्शित करने के लिए देखने के लिए: एंड्रॉयड प्रदर्शन अनुकूलन / प्रदर्शन ट्यूनिंग एंड्रॉयड पर

AsyncTaskकुछ विचारों को प्रदर्शित करने के लिए उपयोग करें ।


6

यह एक उदाहरण ऐप पर मेरा AppTheme है:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

जैसा कि आप देख सकते हैं, मेरे पास डिफ़ॉल्ट रंग हैं और फिर मैंने android:windowIsTranslucentइसे जोड़ा और इसे सेट किया true

जहां तक ​​मैं एक एंड्रॉइड डेवलपर के रूप में जानता हूं, यह केवल एक चीज है जिसे आपको एप्लिकेशन की शुरुआत में सफेद स्क्रीन को छिपाने के लिए सेट करना होगा।


4

दोनों गुण काम करता है उनमें से किसी एक का उपयोग करें।

    <style name="AppBaseThemeDark" parent="@style/Theme.AppCompat">
            <!--your other properties -->
            <!--<item name="android:windowDisablePreview">true</item>-->
            <item name="android:windowBackground">@null</item>
            <!--your other properties -->
    </style>

4

User543 जवाब एकदम सही है

<activity
        android:name="first Activity Name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
 <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
 </activity>

परंतु:

You'r लांचर गतिविधि चाहिए extands गतिविधि , नहीं AppCompatActivity के रूप में यह डिफ़ॉल्ट रूप से आया था!


मैंने कई बार इस समाधान की कोशिश की क्योंकि हर जगह यह एक ही समाधान लिखा था, यह काम नहीं कर सका -> लेकिन आपका BUT मेरा समय बचाता है मेरी गतिविधि AppCompatActivity का विस्तार करती है यही कारण है कि यह काम नहीं कर रहा है मैंने इसे गतिविधि में बदल दिया है अब यह काम करता है धन्यवाद आदमी !!
रूचा भट्ट जोशी

4

सफेद पृष्ठभूमि Apptheme से आ रही है। आप सफेद स्क्रीन के बजाय अपने एप्लिकेशन लोगो की तरह कुछ उपयोगी दिखा सकते हैं। यह कस्टम थीम का उपयोग करके किया जा सकता है। आपका ऐप थीम बस जोड़ें

android:windowBackground=""

विशेषता। विशेषता मान एक छवि या स्तरित सूची या कोई भी रंग हो सकता है।


यह काम करता है, बेहतर है अगर आप खिड़की पर पारदर्शी रंग सेट करते हैं। <item name="android:windowBackground">@android:color/transparent</item>
अमोल देसाई

यह स्वीकृत उत्तर होना चाहिए। वैसे भी क्या आप जानते हैं कि यूट्यूब ऐप की तरह स्केलिंग का एनीमेशन कैसे जोड़ा जाता है।
प्रथम् केसरकर

व्हाइट के बजाय अब यह काला है।
Octmañg mürmån

2

नीचे वह लिंक दिया गया है जो बताता है कि स्प्लैश स्क्रीन को कैसे डिज़ाइन किया जाए। सफेद / काले रंग की पृष्ठभूमि से बचने के लिए हमें स्प्लैश पृष्ठभूमि के साथ एक थीम को परिभाषित करने और उस विषय को मैनिफ़ेस्ट फ़ाइल में स्प्लैश करने के लिए सेट करना होगा।

https://android.jlelse.eu/right-way-to-create-splash-screen-on-android-e7f1709ba154

resash / drawable फ़ोल्डर के अंदर splash_background.xml

<?xml version=”1.0" encoding=”utf-8"?>
 <layer-list xmlns:android=”http://schemas.android.com/apk/res/android">

 <item android:drawable=”@color/colorPrimary” />

 <item>
 <bitmap
 android:gravity=”center”
 android:src=”@mipmap/ic_launcher” />
 </item>

</layer-list>

शैलियों के नीचे जोड़ें

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <!-- Splash Screen theme. -->
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_background</item>
    </style>

मैनिफेस्ट सेट थीम में जैसा कि नीचे दिखाया गया है

<activity
            android:name=".SplashActivity"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
    </activity>

2

मुझे भी अपने प्रोजेक्ट में एक ही समस्या थी। मैंने स्प्लैश स्क्रीन को प्रदान किए गए विषय में कुछ निम्नलिखित मापदंडों को जोड़कर इसे हल किया।

<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>

मेरे द्वारा लिखे गए इस ब्लॉग पोस्ट में आप इसका कारण और संकल्प जान सकते हैं । आशा करता हूँ की ये काम करेगा।


कृपया विवरण को सीधे अपने उत्तर में जोड़ें। लिंक अमान्य हो सकते हैं, यही कारण है कि हम वास्तविक सामग्री को शामिल करने के लिए उत्तर के लिए पसंद करते हैं, लिंक केवल पूरक है।
OOBalance

1

इसे अपने प्रकट रूप में थीम सेट करके तय किया जा सकता है

<activity
        android:name=".MySplashActivityName"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
 <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

और उसके बाद अगर आपको
java.lang.IllegalStateException मिल रही है : आपको इस गतिविधि के साथ एक Theme.AppCompat विषय (या वंशज) का उपयोग करने की आवश्यकता है।
तो आप विस्तार करने के लिए आवश्यकता हो सकती है गतिविधि के बजाय AppCompatActivity अपने MySplashActivity में।

आशा करता हूँ की ये काम करेगा!


1

सफेद पृष्ठभूमि एंड्रॉइड के शुरू होने के कारण होती है क्योंकि ऐप मेमोरी पर लोड होता है, और इससे बचा जा सकता है यदि आप स्प्लैशटेम के तहत कोड के इस 2 लाइन को जोड़ते हैं।

<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>

0

आपको इंस्टेंट रन एंड्रॉइड स्टूडियो सेटिंग्स को अक्षम करना चाहिए।

फ़ाइल> सेटिंग> बिल्ड, एक्ज़ीक्यूशन, डिप्लॉयमेंट> इंस्टेंट रन वहां दिखाए गए सभी विकल्पों को अनचेक करें।

नोट: इंस्टेंट रन के कारण व्हाइट स्क्रीन इश्यू केवल डीबग बिल्ड के लिए है, यह समस्या रिलीज़ बिल्ड पर दिखाई नहीं देगी।


0

निम्नलिखित कोड का प्रयास करें:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

यह कोड मेरे लिए काम करता है और सभी Android उपकरणों पर काम करेगा।


कोड-केवल उत्तर हतोत्साहित किए जाते हैं। कृपया संपादित करें पर क्लिक करें और कुछ शब्दों को जोड़कर बताएं कि आपका कोड प्रश्न को कैसे संबोधित करता है, या शायद समझाएं कि आपका उत्तर पिछले उत्तर / उत्तरों से कैसे भिन्न है। समीक्षा से
निक

0

इसका समाधान बहुत सरल है!

कर रहे हैं तीन इस समस्या के लिए मूल कारण

  1. आप onCreateVeiw फ़ंक्शन में हेवी / लॉन्ग रनिंग / कॉम्प्लेक्स कार्य कर रहे हैं ।
  2. यदि आपका थ्रेड उपयोग कर रहे हैं। तब थ्रेड स्लीप का समय बहुत बड़ा हो सकता है।
  3. यदि आप किसी भी तृतीय पक्ष पुस्तकालय का उपयोग कर रहे हैं । जो कि ऐप स्टार्ट टाइम पर इनिशियलाइज़ होता है, जिससे यह समस्या हो सकती है।

समाधान:

समाधान 1:

  Remove the Heavy Task from onCreateView() function and place it some where appropriate place.

समाधान 2:

  Reduce the Thread Sleep time.

समाधान 3:

  Remove the Third party library at app initialize at implement them with some good strategy.

मेरे मामले में मैं सुगर ओआरएम का उपयोग कर रहा हूं जो इस समस्या का कारण है।

सुधारने के लिए शेयर करें।


0

इससे समस्या हल हो गई:

अपनी शैलियों को संपादित करें। xml फ़ाइल:


नीचे दिए गए कोड को चिपकाएँ:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

</resources>

और AndroidManifest.xml फ़ाइल में संशोधन करना न भूलें । ( थीम का नाम )

इस फ़ाइल में गतिविधियों के घोषणा क्रम के बारे में सावधान रहें।


0
I encountered a similar problem and to overcome it, I implemented the code below in styles, i.e res->values->styles->resource tag 
<item name="android:windowDisablePreview">true</item>

Here is the whole code:

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDisablePreview">true</item>
</style>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.