ฉันมีแอพ Android ที่แสดงหน้าจอสีขาวเป็นเวลา 2 วินาทีเมื่อเริ่มต้น แอปอื่น ๆ ของฉันไม่ทำ แต่แอปนี้ทำ ฉันยังติดตั้ง Splashscreen ด้วยหวังว่ามันจะแก้ไขปัญหานี้ได้ ฉันควรเพิ่มเวลาพักหน้าจอสแปลชหรือไม่? ขอบคุณ
ฉันมีแอพ Android ที่แสดงหน้าจอสีขาวเป็นเวลา 2 วินาทีเมื่อเริ่มต้น แอปอื่น ๆ ของฉันไม่ทำ แต่แอปนี้ทำ ฉันยังติดตั้ง Splashscreen ด้วยหวังว่ามันจะแก้ไขปัญหานี้ได้ ฉันควรเพิ่มเวลาพักหน้าจอสแปลชหรือไม่? ขอบคุณ
คำตอบ:
เพียงพูดถึงธีมโปร่งใสในกิจกรรมเริ่มต้นในไฟล์ 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----
}
final ActionBar actionBar = getActionBar();
จะคืนค่าว่างเมื่อธีมโปร่งแสง
ใส่สิ่งนี้ในสไตล์ที่กำหนดเองและจะช่วยแก้ปัญหาทั้งหมดได้ การใช้การแก้ไขแบบโปร่งแสงแบบแฮ็กจะทำให้แถบงานและแถบนำทางของคุณโปร่งแสงและทำให้หน้าจอเริ่มต้นหรือหน้าจอหลักดูเหมือนสปาเก็ตตี้
<item name="android:windowDisablePreview">true</item>
เหมือนคุณหลอด .. ตอนแรกพวกเขาจะแสดงหน้าจอไอคอนแทนหน้าจอสีขาว และหลังจากนั้น 2 วินาทีจะแสดงหน้าจอหลัก
ก่อนอื่นให้สร้าง XML ที่วาดได้ใน res / 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>
จากนั้นคุณจะตั้งค่านี้เป็นพื้นหลังของกิจกรรมสแปลชในธีม ไปที่ไฟล์ styles.xml ของคุณและเพิ่มธีมใหม่สำหรับกิจกรรมสแปลชของคุณ
<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 ที่วาดได้ กำหนดค่าสิ่งนี้เป็นธีมของกิจกรรม Splash ใน 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/
UPDATE:
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>
mipmap/ic_launcher
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>
สร้างสไตล์ในคุณ 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">
คุณควรอ่านโพสต์ที่ยอดเยี่ยมนี้โดย Cyril Mottier: การเปิดตัวแอพ Android ที่สวยงาม
คุณต้องปรับแต่งTheme
ใน style.xml ของคุณและหลีกเลี่ยงการปรับแต่งในแบบonCreate
ActionBar.setIcon / setTitle / etc
ดูเอกสารเกี่ยวกับเคล็ดลับประสิทธิภาพโดย Google
ใช้Trace View
และHierarchy Viewer
เพื่อดูเวลาในการแสดงมุมมองของคุณ: การเพิ่มประสิทธิภาพ Android / การปรับแต่งประสิทธิภาพบน Android
ใช้AsyncTask
เพื่อแสดงบางมุมมอง
นี่คือ 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
เท่าที่ฉันรู้ในฐานะนักพัฒนา Android นี่เป็นสิ่งเดียวที่คุณต้องตั้งค่าเพื่อซ่อนหน้าจอสีขาวเมื่อเริ่มแอปพลิเคชัน
คุณสมบัติทั้งสองใช้งานอย่างใดอย่างหนึ่ง
<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>
คำตอบ 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มันก็เป็นค่าเริ่มต้น!
พื้นหลังสีขาวมาจาก Apptheme คุณสามารถแสดงสิ่งที่มีประโยชน์เช่นโลโก้แอปพลิเคชันของคุณแทนที่จะเป็นหน้าจอสีขาวสามารถทำได้โดยใช้ธีมที่กำหนดเองในแอปธีมของคุณเพียงแค่เพิ่ม
android:windowBackground=""
คุณลักษณะ ค่าแอตทริบิวต์อาจเป็นรูปภาพหรือรายการแบบเลเยอร์หรือสีใดก็ได้
<item name="android:windowBackground">@android:color/transparent</item>
ด้านล่างนี้เป็นลิงค์ที่แนะนำวิธีการออกแบบหน้าจอ Splash เพื่อหลีกเลี่ยงพื้นหลังสีขาว / ดำเราจำเป็นต้องกำหนดธีมที่มีพื้นหลังสแปลชและตั้งค่าชุดรูปแบบนั้นให้สาดในไฟล์รายการ
https://android.jlelse.eu/right-way-to-create-splash-screen-on-android-e7f1709ba154
splash_background.xml ภายในโฟลเดอร์ res / drawable
<?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>
ใน Manifest set theme ดังแสดงด้านล่าง
<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>
ฉันมีปัญหาเดียวกันในโครงการหนึ่งของฉัน ฉันแก้ไขได้โดยเพิ่มพารามิเตอร์ต่อไปนี้ในชุดรูปแบบที่มีให้ในหน้าจอเริ่มต้น
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
คุณสามารถค้นหาเหตุผลและความละเอียดได้ในโพสต์บล็อกนี้ที่เขียนโดยฉัน หวังว่าจะช่วยได้
สามารถแก้ไขได้โดยตั้งค่าธีมในรายการของคุณเป็น
<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 ของคุณ
หวังว่าจะช่วยได้!
พื้นหลังสีขาวเกิดขึ้นเนื่องจาก Android เริ่มทำงานในขณะที่แอปโหลดในหน่วยความจำและสามารถหลีกเลี่ยงได้หากคุณเพิ่มโค้ด 2 บรรทัดนี้ใน SplashTheme
<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>
คุณควรปิดการใช้งาน Instant Run android studio Settings
File> Settings> Build, Execution, Deployment> Instant Run unCheck all options ที่แสดงในนั้น
หมายเหตุ:ปัญหาหน้าจอสีขาวเนื่องจากการเรียกใช้ทันทีมีไว้สำหรับรุ่นดีบักเท่านั้นปัญหานี้จะไม่ปรากฏในรุ่นรุ่น
ลองใช้รหัสต่อไปนี้:
<!-- 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 ทั้งหมด
วิธีแก้ปัญหานั้นง่ายมาก!
มีเหตุผลพื้นฐานสามประการสำหรับปัญหานี้
Solutions:
แนวทางที่ 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.
ในกรณีของฉันฉันใช้ Sugar ORM ซึ่งนำไปสู่ปัญหานี้
แบ่งปันเพื่อปรับปรุง.
สิ่งนี้ช่วยแก้ปัญหาได้:
วางรหัสด้านล่าง:
<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 ( ชื่อธีม )
ระวังลำดับการประกาศของกิจกรรมในไฟล์นี้
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>
onCreate
เป็นส่วนหนึ่ง ลองแค่ "setContentView" ในกิจกรรมนั้นและตรวจสอบว่าความล่าช้านี้หายไปหรือไม่