แก้ไขโซลูชันที่จะทำให้ SplashScreen ของคุณดูดีในทุก API รวมถึง API21 ถึง API23
ก่อนอื่นอ่านสิ่งนี้บทความและปฏิบัติตามวิธีที่ดีในการทำหน้าจอสาด
หากโลโก้ของคุณบิดเบี้ยวหรือไม่พอดีและคุณกำหนดเป้าหมายเฉพาะ APIs24 + คุณสามารถย่อขนาดเวกเตอร์ที่วาดได้โดยตรงในไฟล์ xml ดังนี้:
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="640"
android:viewportHeight="640"
android:width="240dp"
android:height="240dp">
<path
android:pathData="M320.96 55.9L477.14 345L161.67 345L320.96 55.9Z"
android:strokeColor="#292929"
android:strokeWidth="24" />
</vector>
ในโค้ดด้านบนฉันกำลังปรับขนาดของ drawable ที่ฉันวาดบนผืนผ้าใบขนาด 640x640 เป็น 240x240 จากนั้นฉันก็วางไว้ในหน้าจอสแปลชของฉันที่วาดได้แบบนั้นและมันก็ใช้งานได้ดี:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"
android:paddingBottom="20dp" android:paddingRight="20dp" android:paddingLeft="20dp" android:paddingTop="20dp">
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<item
android:drawable="@drawable/logo_vect"
android:gravity="center">
</item>
</layer-list>
รหัสของฉันเป็นเพียงการวาดสามเหลี่ยมในภาพด้านล่าง แต่คุณจะเห็นสิ่งที่คุณสามารถทำได้จากสิ่งนี้ ในที่สุดความละเอียดก็ยอดเยี่ยมเมื่อเทียบกับขอบพิกเซลที่ฉันได้รับเมื่อใช้บิตแมป ดังนั้นใช้เวกเตอร์ที่วาดได้ทุกวิถีทาง (มีไซต์ชื่อ vectr ที่ฉันใช้สร้างของฉันโดยไม่ต้องดาวน์โหลดซอฟต์แวร์พิเศษ)
แก้ไขเพื่อให้ใช้งานได้บน API21-22-23
ในขณะที่โซลูชันข้างต้นใช้ได้กับอุปกรณ์ที่ใช้ API24 + ฉันรู้สึกผิดหวังมากหลังจากติดตั้งแอปของฉันอุปกรณ์ที่ใช้ API22 ฉันสังเกตเห็นว่าหน้าจอสแปลชกำลังพยายามเติมเต็มมุมมองทั้งหมดอีกครั้งและดูเหมือนอึ หลังจากฉีกคิ้วของฉันออกมาครึ่งวันในที่สุดฉันก็บังคับวิธีแก้ปัญหาด้วยจิตตานุภาพที่แท้จริง
คุณต้องสร้างไฟล์ที่สองที่มีชื่อเหมือนกับ xml ของ splashscreen (สมมติว่า splash_screen.xml) และวางลงใน 2 โฟลเดอร์ที่เรียกว่า drawable-v22 และ drawable-v21 ที่คุณจะสร้างใน res / โฟลเดอร์ (เพื่อให้คุณเห็น ต้องเปลี่ยนมุมมองโครงการของคุณจาก Android เป็นโครงการ) สิ่งนี้ทำหน้าที่บอกให้โทรศัพท์ของคุณเปลี่ยนเส้นทางไปยังไฟล์ที่อยู่ในโฟลเดอร์เหล่านั้นเมื่อใดก็ตามที่อุปกรณ์ที่เกี่ยวข้องเรียกใช้ API ที่สอดคล้องกับคำต่อท้าย -vXX ในโฟลเดอร์ที่วาดได้โปรดดูลิงก์นี้ วางโค้ดต่อไปนี้ในรายการ Layer ของไฟล์ splash_screen.xml ที่คุณสร้างในโฟลเดอร์เหล่านี้:
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<item android:gravity="center">
<bitmap android:gravity="center"
android:src="logo_vect"/>
</item>
ด้วยเหตุผลบางประการสำหรับ API เหล่านี้คุณต้องรวมไฟล์ที่วาดได้ของคุณไว้ในบิตแมปเพื่อให้มันใช้งานได้และทำให้ผลลัพธ์สุดท้ายดูเหมือนกัน ปัญหาคือคุณต้องใช้ aproach กับโฟลเดอร์ aditional drawable เนื่องจากไฟล์ splash_screen.xml เวอร์ชันที่สองจะทำให้หน้าจอเริ่มต้นของคุณไม่แสดงเลยบนอุปกรณ์ที่ใช้ API ที่สูงกว่า 23 นอกจากนี้คุณอาจต้องวาง splash_screen.xml เวอร์ชันแรกลงใน drawable-v24 เป็นค่าเริ่มต้นของ Android เป็นโฟลเดอร์ drawable-vXX ที่ใกล้เคียงที่สุดที่สามารถค้นหาทรัพยากรได้