Android - ป้องกันหน้าจอสีขาวเมื่อเริ่มต้น


110

อย่างที่เราทราบกันดีว่าแอพ Android จำนวนมากแสดงหน้าจอสีขาวสั้น ๆ ก่อนที่จะActivityเข้าสู่โฟกัสครั้งแรก ปัญหานี้เกิดขึ้นในกรณีต่อไปนี้:

  • แอป Android ที่ขยายระดับสากลApplicationและดำเนินการเริ่มต้นที่สำคัญในนั้น Application วัตถุที่ถูกสร้างขึ้นเสมอก่อนที่จะเป็นครั้งแรกActivity(ความจริงที่สามารถสังเกตได้ในการดีบัก) ดังนั้นนี้ทำให้รู้สึก นี่คือสาเหตุของความล่าช้าในกรณีของฉัน

  • แอพ Android ที่แสดงหน้าต่างแสดงตัวอย่างเริ่มต้นก่อนหน้าจอเริ่มต้น

android:windowDisablePreview = "true"เห็นได้ชัดว่าการตั้งค่าไม่ทำงานที่นี่ ฉันไม่สามารถตั้งค่าธีมหลักของหน้าจอเริ่มต้นTheme.Holo.NoActionBarเป็นตามที่อธิบายไว้ที่นี่ได้เนื่องจาก [น่าเสียดาย] หน้าจอเริ่มต้นของฉันใช้ActionBarไฟล์.

ในขณะเดียวกันแอปที่ไม่ขยายApplicationชั้นเรียนจะไม่แสดงหน้าจอสีขาวเมื่อเริ่มต้น

สิ่งนี้คือหลักการเริ่มต้นที่ดำเนินการในApplicationวัตถุจำเป็นต้องเกิดขึ้นก่อนที่Activityจะแสดงครั้งแรก ดังนั้นคำถามของฉันคือฉันจะทำการเริ่มต้นเหล่านี้ในการเริ่มต้นแอปโดยไม่ใช้Applicationวัตถุได้อย่างไร อาจใช้ a ThreadหรือServiceฉันคิดว่า?

นี่เป็นปัญหาที่น่าคิด ฉันไม่สามารถข้ามมันได้ตามปกติ (โดยการตั้งค่าNoActionBarธีม) เนื่องจากน่าเศร้าที่หน้าจอ Splash ของฉันมีActionBarสาเหตุที่ไม่เกี่ยวข้องกัน

บันทึก:

ฉันได้อ้างถึงคำถามต่อไปนี้แล้ว:

อ้างอิง:


1
คุณพบปัญหาด้วยตัวเองคุณกำลังทำกับ init จำนวนมากในบริบทของแอปพลิเคชันบล็อกการโหลดกิจกรรมพยายามอะซิงโครไนซ์สิ่งนี้ปล่อยให้กิจกรรมการโหลดแสดงจนกว่าเธรดบางส่วนจะสิ้นสุด
AxelH

สิ่งนี้อาจช่วยได้
สูงสุด

1
ตามหลักการแล้วแอปพลิเคชันจะยกเลิกการประมวลผลและไม่ใช้เธรดหลักสำหรับการทำงานที่ยาวนาน นี่เป็นแนวทางปฏิบัติที่ได้รับการยอมรับอย่างดี หากการดำเนินการจำเป็นต้องเกิดขึ้นก่อนที่แอปจะโหลดอย่างน้อยก็ไม่ควรแชร์เธรดกับ UI
Beshoy Hanna

1
คุณอาจพบว่าปัญหานี้ยังคงเป็นปัญหาหลังจากที่คุณได้ย้ายรหัสเริ่มต้นทั้งหมดออกจากApplicationชั้นเรียนแล้ว นี่เป็นเพราะวิธีการ "เริ่มเย็น" ของ Android เวอร์ชันที่ใหม่กว่า Google ได้กล่าวถึงเวลาเปิดตัวที่ Google I / O ในปีนี้และจะได้รับการแก้ไขเป็น N จากที่ฉันจำได้ ในระหว่างนี้คุณควรดูสิ่งที่ Google เรียกว่า "หน้าจอเปิดตัวที่มีตราสินค้า" นี่คือตัวอย่างวิธีการสร้าง: antonioleiva.com/branded-launch-screen - ไม่มีหน้าจอสีขาวในตอนแรกอีกต่อไป ;-) และโปรดอย่าใช้ splashscreens - มันน่ารำคาญสำหรับผู้ใช้
Darwind

1
ธีม Wrt เคล็ดลับคือไม่ต้องตั้งค่าธีม NoActionBar แต่เป็นการปรับธีมของกิจกรรมเริ่มต้นเพื่อให้หน้าจอที่มีธีมว่างเปล่าดูเหมือนเป็นชุดเริ่มต้นอย่างสมบูรณ์
zapl

คำตอบ:


86

ปัญหาเกี่ยวกับพื้นหลังสีขาวเกิดจากการเริ่มเย็นของ Android ในขณะที่แอปโหลดลงในหน่วยความจำและสามารถหลีกเลี่ยงได้ด้วยสิ่งนี้:

public class OnboardingWithCenterAnimationActivity extends AppCompatActivity {
public static final int STARTUP_DELAY = 300;
public static final int ANIM_ITEM_DURATION = 1000;
public static final int ITEM_DELAY = 300;

private boolean animationStarted = false;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    setTheme(R.style.AppTheme);
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_onboarding_center);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {

    if (!hasFocus || animationStarted) {
        return;
    }

    animate();

    super.onWindowFocusChanged(hasFocus);
}

private void animate() {
    ImageView logoImageView = (ImageView) findViewById(R.id.img_logo);
    ViewGroup container = (ViewGroup) findViewById(R.id.container);

    ViewCompat.animate(logoImageView)
        .translationY(-250)
        .setStartDelay(STARTUP_DELAY)
        .setDuration(ANIM_ITEM_DURATION).setInterpolator(
            new DecelerateInterpolator(1.2f)).start();

    for (int i = 0; i < container.getChildCount(); i++) {
        View v = container.getChildAt(i);
        ViewPropertyAnimatorCompat viewAnimator;

        if (!(v instanceof Button)) {
            viewAnimator = ViewCompat.animate(v)
                    .translationY(50).alpha(1)
                    .setStartDelay((ITEM_DELAY * i) + 500)
                    .setDuration(1000);
        } else {
            viewAnimator = ViewCompat.animate(v)
                    .scaleY(1).scaleX(1)
                    .setStartDelay((ITEM_DELAY * i) + 500)
                    .setDuration(500);
        }

        viewAnimator.setInterpolator(new DecelerateInterpolator()).start();
    }
}
}

เค้าโครง

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

<LinearLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical"
    android:paddingTop="144dp"
    tools:ignore="HardcodedText"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="16dp"
        android:alpha="0"
        android:text="Hello world"         android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
        android:textColor="@android:color/white"
        android:textSize="22sp"
        tools:alpha="1"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="8dp"
        android:alpha="0"
        android:gravity="center"
        android:text="This a nice text"
      android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse"
        android:textSize="20sp"
        tools:alpha="1"
        />

    <Button
        android:id="@+id/btn_choice1"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="48dp"
        android:scaleX="0"
        android:scaleY="0"
        android:text="A nice choice"
        android:theme="@style/Button"
        />

    <Button
        android:id="@+id/btn_choice2"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:scaleX="0"
        android:scaleY="0"
        android:text="Far better!"
        android:theme="@style/Button"
        />

</LinearLayout>

<ImageView
    android:id="@+id/img_logo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:src="@drawable/img_face"
    tools:visibility="gone"
    />
</FrameLayout>

img ใบหน้า

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

<item android:drawable="?colorPrimary"/>
<item>
    <bitmap
        android:gravity="center"
        android:src="@drawable/img_face"/>
</item>

เพิ่มชุดรูปแบบนี้ในหน้าจอเริ่มต้นของคุณในรายการ

<?xml version="1.0" encoding="utf-8"?>
<resources>
<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:windowBackground">@null</item>
</style>

<style name="AppTheme.CenterAnimation">
    <item name="android:windowBackground">@drawable/ll_face_logo</item>
</style>

ซึ่งจะทำให้เกิดความสมบูรณ์แบบเช่นนี้

แมวยุ่ง

สำหรับรายละเอียดเพิ่มเติมและวิธีแก้ไขเพิ่มเติมคุณสามารถตรวจสอบBlogPostนี้


3
มันไม่ได้ช่วยให้หน้าจอสีขาวและภาพเคลื่อนไหวในตอนท้าย
Mehvish Ali

นี่เป็นการดำเนินการอย่างตรงไปตรงมา อาจมีบางส่วนของโค้ดของคุณที่ทำให้เกิดปัญหา กรุณาเปิดคำถามอื่นและจะอยู่เคียงข้างคุณ :)
Ivan Milisavljevic

1
ฉันแก้ไขปัญหานี้โดยการทำให้เคลื่อนไหวระหว่างธีมและเปลี่ยนธีมโดยไม่ต้องวาดได้ แต่มีเพียงสีด้านหลังเหมือนกันจากนั้นบน onWindowFocusChanged () ทำให้เนื้อหาที่มองเห็นได้อย่างบ้าคลั่งและการเคลื่อนไหวเป็นเรื่องที่ชาญฉลาดระหว่างการเปลี่ยนแปลงด้วยเช่นกัน แอนิเมชั่นของธีมช่วยได้มาก
Mehvish Ali

94

โปรดเพิ่มบรรทัดนี้ในธีมแอปของคุณ

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

สำหรับข้อมูลเพิ่มเติม: https://developer.android.com/topic/performance/vitals/launch-time#themed


25
มันค้างแอปพลิเคชันเป็นเวลา 2 วินาทีแล้วเปิดแอปพลิเคชันไม่มีประโยชน์สำหรับฉัน
Faakhir

4
ตอนนี้มันยังไม่แสดงสี #ffffff แต่ตอนนี้กำลังแสดง # 000000
Midhilaj

@ ฟากีร์คุณพบวิธีแก้ปัญหาหรือไม่? ฉันยังคงมองหาวิธีแก้ปัญหาซึ่งจะลบหน้าจอสีขาวนี้และไม่มีความล่าช้าในการเปิดตัว
Rupam Das

33

โปรดคัดลอกและวางสองบรรทัดนี้ในธีมแอพ manifest ของคุณเช่น res / styles / AppTheme แล้วมันจะใช้ได้อย่างมีเสน่ห์ ..

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

21

ก่อนอื่นในการลบหน้าจอสีขาวโปรดอ่านสิ่งนี้ - https://www.bignerdranch.com/blog/splash-screens-the-right-way/

แต่ที่สำคัญกว่านั้นคือเพิ่มประสิทธิภาพภาระงานเริ่มต้นของคุณและเลื่อนงานหนัก ๆ ไปเมื่อคุณมีเวลาเรียกใช้ โพสต์คลาสใบสมัครของคุณที่นี่หากคุณต้องการให้เราตรวจสอบ


21

ไม่มีวิธีที่แนะนำในการแก้ปัญหานี้ในคำตอบ ดังนั้นฉันจึงเพิ่มคำตอบที่นี่ ปัญหาหน้าจอสีขาวเมื่อเริ่มต้นเกิดขึ้นเนื่องจากหน้าจอว่างเริ่มต้นที่กระบวนการของระบบดึงออกมาเมื่อเปิดแอป วิธีทั่วไปในการแก้ปัญหานี้คือการปิดหน้าจอเริ่มต้นนี้โดยเพิ่มลงในstyles.xmlไฟล์ของคุณ

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

แต่ตามเอกสารประกอบของ Android อาจส่งผลให้เวลาเริ่มต้นใช้งานนานขึ้น วิธีที่แนะนำในการหลีกเลี่ยงหน้าจอสีขาวเริ่มต้นนี้ตาม google คือการใช้windowBackgroundแอตทริบิวต์ธีมของกิจกรรมและระบุสิ่งที่วาดได้เองง่ายๆสำหรับกิจกรรมเริ่มต้น

แบบนี้:

ไฟล์เค้าโครงที่วาดได้ my_drawable.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
  <!-- The background color, preferably the same as your normal theme -->
  <item android:drawable="@android:color/white"/>
  <!-- Your product logo - 144dp color version of your app icon -->
  <item>
    <bitmap
      android:src="@drawable/product_logo_144dp"
      android:gravity="center"/>
  </item>
</layer-list>

สร้างสไตล์ใหม่ในไฟล์ styles.xml

<!-- Base application theme. -->
<style name="AppTheme">
    <!-- Customize your theme here. -->               
</style>

<!-- Starting activity theme -->
<style name="AppTheme.Launcher">
    <item name="android:windowBackground">@drawable/my_drawable</item>
</style>

เพิ่มธีมนี้ในกิจกรรมเริ่มต้นของคุณในไฟล์ Manifest

<activity ...
android:theme="@style/AppTheme.Launcher" />

และเมื่อคุณต้องการเปลี่ยนกลับไปใช้การโทรตามธีมปกติsetTheme(R.style.Apptheme)ก่อนโทรsuper.onCreate()และsetContentView()

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // Make sure this is before calling super.onCreate
    setTheme(R.style.Theme_MyApp);
    super.onCreate(savedInstanceState);
    // ...
  }
}

นี่เป็นวิธีที่แนะนำในการแก้ปัญหาและมาจากรูปแบบการออกแบบวัสดุของ Google


14

คุณได้ลองตั้งค่าandroid:windowBackgroundแอตทริบิวต์ในธีมของกิจกรรมตัวเรียกใช้งานของคุณเป็นสีหรือวาดได้หรือไม่?

ตัวอย่างนี้:

<item name="android:windowBackground">@android:color/black</item>

เมื่อเพิ่มในธีมกิจกรรมของ Launcher จะแสดงสีดำ (แทนที่จะเป็นสีขาว) เมื่อเริ่มต้น นี่เป็นเคล็ดลับง่ายๆในการซ่อนการเริ่มต้นที่ยาวนานในขณะที่แสดงบางสิ่งบางอย่างให้กับผู้ใช้ของคุณและมันก็ใช้ได้ดีแม้ว่าคุณจะซับคลาสอ็อบเจ็กต์ Application ก็ตาม

หลีกเลี่ยงการใช้โครงสร้างอื่น ๆ (แม้กระทั่งเธรด) ในการทำงานเริ่มต้นที่ยาวนานเนื่องจากคุณอาจไม่สามารถควบคุมวงจรชีวิตของโครงสร้างดังกล่าวได้ แอ็พพลิเคชันอ็อบเจ็กต์คือตำแหน่งที่ถูกต้องสำหรับการดำเนินการประเภทนี้


14

ฉันเพิ่มสองบรรทัดต่อไปนี้ในธีมของฉันภายใต้ styles.xml

    <item name="android:windowDisablePreview">true</item>
    <item name="android:windowBackground">@null</item>

ทำงานอย่างมีเสน่ห์


10

ฉันมีปัญหาเดียวกันคุณต้องอัปเดตสไตล์ของคุณ

style.xml

<!-- Base application theme. -->
 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

        <!-- Customize your theme here. -->
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowDisablePreview">true</item>
        <item name="android:windowBackground">@null</item>
        <item name="android:windowIsTranslucent">true</item>

 </style>

ไฟล์รายการของคุณควรมีลักษณะดังนี้

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
     // Other stuff
</application>

นอกบ้าน:

ใส่คำอธิบายภาพที่นี่

หวังว่านี่จะช่วยคุณได้


2
มันใช้งานได้ดีสำหรับฉันในแอปพลิเคชัน NativeActivity OpenGL ฉันไม่แน่ใจว่าทำไมคำตอบถึงไม่สูงกว่านี้เนื่องจากเป็นคำตอบที่สมบูรณ์และเหมาะสมที่สุด ไม่มี Java ที่เกี่ยวข้องกับการเปลี่ยนแปลงไฟล์ XML เพียงสองสามไฟล์
Slion

7

ภายในวิธีการเรียกกลับของวงจรชีวิตคุณสามารถประกาศว่ากิจกรรมของคุณทำงานอย่างไรเมื่อผู้ใช้ออกและเข้าสู่กิจกรรมอีกครั้ง โปรดจำไว้ว่าวิธีการออกแบบของ Android มีวงจรชีวิตสำหรับแต่ละแอป หากคุณใส่onCreate()วิธีการโหลดมากเกินไป(ซึ่งเป็นวิธีที่ใช้ในการโหลดไฟล์เลย์เอาต์และเพิ่มการควบคุมใด ๆ ที่คุณมีอยู่) หน้าจอสีขาวจะปรากฏให้เห็นมากขึ้นเนื่องจากไฟล์เลย์เอาต์จะใช้เวลาโหลดนานขึ้น

ฉันขอแนะนำให้ใช้หลายวิธีในการเริ่มต้นกิจกรรม นั่นคือonStart()(ถูกเรียกว่าเป็นสิ่งแรกเมื่อโหลดแอป) onActivityCreated()(ถูกเรียกหลังจากที่เค้าโครงแสดงขึ้นและมีประโยชน์หากคุณกำลังประมวลผลข้อมูลใด ๆ เมื่อเริ่มกิจกรรม)

เพื่อให้ง่ายขึ้นสำหรับคุณด้านล่างนี้คือแผนภาพวงจรชีวิตของกิจกรรมอย่างเป็นทางการ:

ใส่คำอธิบายภาพที่นี่


ขอบคุณสำหรับคำตอบมันน่าสนใจมาก อย่างไรก็ตามฉันเชื่อว่าคุณเข้าใจคำถามของฉันผิด ปัญหาไม่ได้เกิดจากการกำหนดค่าเริ่มต้นในครั้งแรกActivityแต่เป็นปัญหาที่อยู่ในApplicationวัตถุส่วนกลาง และผมไม่เชื่อว่าผมสามารถนำไปใช้เช่นการแยกของความกังวลมีเพราะไม่เหมือนActivityมันมีonCreate()วิธีการ
YS

เหตุใดคุณจึงขยายชั้นเรียนของแอปพลิเคชัน แต่ไม่ใช่ชั้นกิจกรรม
Michele La Ferla

โอเคคุณหมายความว่าฉันควรละทิ้งApplicationวัตถุทั้งหมดและย้ายรหัสเริ่มต้นทั้งหมดไปที่รหัสแรกActivity...
YS

นั่นเป็นวิธีที่ฉันพัฒนาแอปมาโดยตลอดอย่างไรก็ตามหากคุณไม่ต้องการทำการเปลี่ยนแปลงทั้งหมดคำตอบอื่น ๆ อาจช่วยให้คุณแก้ไขปัญหาได้โดยใช้คลาสแอปพลิเคชัน สำหรับการอ้างอิงในอนาคตของคุณฉันขอแนะนำให้ใช้คลาสกิจกรรมเดียวทันทีจากนั้นจึงใช้ส่วนย่อยจำนวนมาก หวังว่านี่จะช่วยได้ :)
Michele La Ferla

2

คุณพยายามเริ่มต้นonActivityCreatedหรือไม่?

ภายในApplicationชั้นเรียน:

 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                if(activity.getClass().equals(FirstActivity.class) {
                    // try without runOnUiThread if it will not help
                    activity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            new InitializatioTask().execute();
                        }
                    });
                }
            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });

2

ดังที่คุณทราบแล้วว่าเหตุใดจึงมีหน้าจอสีขาวนี้เนื่องจากกระบวนการพื้นหลังหรือการเริ่มต้นแอปพลิเคชันหรือไฟล์ขนาดใหญ่ดังนั้นเพียงตรวจสอบแนวคิดด้านล่างเพื่อเอาชนะจากสิ่งนี้

เพื่อป้องกันหน้าจอสีขาวนี้เมื่อเริ่มต้นแอปวิธีหนึ่งคือหน้าจอเริ่มต้นนี่เป็นเพียงวิธีที่ไม่สิ้นสุดและคุณต้องใช้

เมื่อคุณจะแสดงหน้าจอเริ่มต้นจากไฟล์ splash.xml ของคุณปัญหานี้ก็จะยังคงเหมือนเดิม

ดังนั้นคุณต้องสร้างสไตล์ ont ในไฟล์ style.xml สำหรับหน้าจอเริ่มต้นและที่นั่นคุณต้องตั้งค่าพื้นหลังหน้าต่างเป็นภาพสแปลชของคุณจากนั้นใช้ธีมนั้นกับกิจกรรมสแปลชของคุณจากไฟล์รายการ ตอนนี้เมื่อคุณจะเรียกใช้แอพก่อนอื่นมันจะตั้งค่าธีมและด้วยวิธีนี้ผู้ใช้จะสามารถเห็นภาพสแปลชโดยตรงแทนหน้าจอสีขาว


2

คุณสมบัติทั้งสองทำงาน

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

2

โปรดลองอีกครั้ง

1) สร้างไฟล์ที่วาดได้ 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/{your color}" />

    <item>
        <bitmap
            android:layout_width="@dimen/size_250"
            android:layout_height="@dimen/size_100"
            android:gravity="center"
            android:scaleType="fitXY"
            android:src="{your image}"
            android:tint="@color/colorPrimary" />
    </item>

</layer-list>

2) ใส่ไว้ใน styles.xml

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

3) ใน AndroidMainfest.xml ของคุณให้ตั้งค่าธีมด้านบนเพื่อเปิดใช้งานกิจกรรม

       <activity
            android:name=".SplashScreenActivity"
            android:screenOrientation="portrait"
            android:theme="@style/SplashTheme"
            android:windowSoftInputMode="stateVisible|adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

0

เพียงเขียนรายการใน values ​​/ styles.xml:

<item name="android:windowBackground">@android:color/black</item>

ตัวอย่างเช่นใน AppTheme:

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

    <item name="android:windowBackground">@android:color/black</item>

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

0
Style :- 
<style name="SplashViewTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/splash</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

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

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

0

สำหรับใครก็ตามที่มีหน้าจอสีขาวขณะทำการดีบักโปรดทราบว่าหากคุณกำลังแก้จุดบกพร่องจะใช้เวลาโหลดนานขึ้น หากคุณสร้าง APK รุ่นของคุณและติดตั้งลงในโทรศัพท์ของคุณคุณจะสังเกตเห็นว่าการโหลดใช้เวลาน้อยลงมาก

ดังนั้นเวลาเริ่มต้นด้วยเวอร์ชัน debbug จึงไม่เท่ากับเวลาเริ่มต้นด้วยเวอร์ชันที่วางจำหน่าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.