อัปเดตล่าสุด - มิ.ย. / 2562
ไลบรารีการสนับสนุนมีการเปลี่ยนแปลงเล็กน้อยเนื่องจากคำตอบเดิม ตอนนี้แม้แต่ปลั๊กอิน Android สำหรับ Gradle ก็สามารถสร้าง PNG ได้โดยอัตโนมัติในเวลาสร้าง ดังนั้นด้านล่างนี้คือสองแนวทางใหม่ที่ควรใช้ในปัจจุบัน คุณสามารถดูข้อมูลเพิ่มเติมได้ที่นี่:
รุ่น PNG
Gradle สามารถสร้างภาพ PNG โดยอัตโนมัติจากเนื้อหาของคุณในเวลาสร้าง อย่างไรก็ตามในวิธีการนี้ไม่ได้ทั้งหมดองค์ประกอบ XML ได้รับการสนับสนุน วิธีนี้สะดวกเพราะคุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรในโค้ดของคุณหรือใน build.gradle ของคุณ ตรวจสอบให้แน่ใจว่าคุณใช้Android Plugin 1.5.0 ขึ้นไปและAndroid Studio 2.2 ขึ้นไป
ฉันใช้โซลูชันนี้ในแอปของฉันและใช้งานได้ดี ไม่จำเป็นต้องใช้แฟล็ก build.gradleเพิ่มเติม ไม่จำเป็นต้องแฮ็ก หากคุณไปที่/ สร้าง / สร้าง / res / pngs / ...คุณจะเห็น PNG ที่สร้างขึ้นทั้งหมด
ดังนั้นหากคุณมีไอคอนง่ายๆ (เนื่องจากไม่รองรับองค์ประกอบ xml ทั้งหมด) โซลูชันนี้อาจเหมาะกับคุณ เพียงอัปเดต Android Studio และปลั๊กอิน Android สำหรับ Gradle
สนับสนุนไลบรารี
อาจเป็นวิธีแก้ปัญหาที่เหมาะกับคุณ หากคุณมาที่นี่แสดงว่า Android Studio ของคุณไม่ได้สร้าง PNG โดยอัตโนมัติ ดังนั้นแอปของคุณจึงขัดข้อง
หรือบางทีคุณไม่ต้องการให้ Android Studio สร้าง PNG เลย
แตกต่างจาก "การสร้าง PNG อัตโนมัติ" ซึ่งสนับสนุนองค์ประกอบ XML ส่วนย่อยโซลูชันนี้รองรับแท็ก xml ทั้งหมด ดังนั้นคุณมีการสนับสนุนอย่างเต็มที่สำหรับเวกเตอร์ที่วาดได้
ก่อนอื่นคุณต้องอัปเดตbuild.gradleของคุณเพื่อรองรับ:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
implementation 'com.android.support:appcompat-v7:23.2.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
}
แล้วใช้app:srcCompat
แทนขณะโหลดandroid:src
VectorDrawables
อย่าลืมสิ่งนี้
สำหรับTextView
หากคุณใช้androidx
เวอร์ชันของไลบรารีการสนับสนุนคุณสามารถใช้app:drawableLeftCompat
(หรือขวาบนล่าง) แทนได้app:drawableLeft
ในกรณีของCheckBox
/ RadioButton
ให้ใช้app:buttonCompat
แทนandroid:button
.
หากคุณไม่ได้ใช้androidx
รุ่นของห้องสมุดและการสนับสนุนของคุณminSdkVersion
มี17
หรือสูงกว่าหรือใช้ปุ่มคุณอาจพยายามที่จะตั้งค่าโปรแกรมผ่านทาง
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
อัพเดท - ก.ค. / 2559
พวกเขาเปิดใช้ VectorDrawable นั้นอีกครั้งใน
Android Support Library 23.4.0
สำหรับผู้ใช้ AppCompatเราได้เพิ่มเลือกใช้ API เพื่อเปิดใช้งานการสนับสนุน Vector Drawables จากทรัพยากรอีกครั้ง (ลักษณะการทำงานที่พบใน 23.2) ผ่าน AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - โปรดทราบว่าสิ่งนี้ยังอาจทำให้เกิดปัญหากับการใช้หน่วยความจำและ ปัญหาในการอัปเดตอินสแตนซ์การกำหนดค่าด้วยเหตุนี้จึงปิดใช้งานโดยค่าเริ่มต้น
บางที , build.gradle
การตั้งค่าอยู่ในขณะนี้ล้าสมัยและคุณเพียงแค่ต้องเปิดใช้งานในกิจกรรมที่เหมาะสม ( แต่จำเป็นที่จะต้องทดสอบ)
ตอนนี้เพื่อเปิดใช้งานคุณต้องทำ:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
คำตอบเดิม - เมษายน / 2016
ฉันคิดว่าสิ่งนี้เกิดขึ้นเนื่องจาก Support Vector ถูกปิดใช้งานในไลบรารีเวอร์ชันล่าสุด: 23.3.0
ตามโพสต์นี้:
สำหรับผู้ใช้ AppCompat เราได้ตัดสินใจที่จะเอาฟังก์ชั่นที่ช่วยให้คุณใช้ภาพวาดเวกเตอร์จากแหล่งบนอุปกรณ์ก่อนอมยิ้มเนื่องจากปัญหาที่พบในการดำเนินการในรุ่น 23.2.0 / 23.2.1 (ฉบับที่ 205236) การใช้แอพ: srcCompat และ setImageResource () ยังคงทำงานต่อไป
หากคุณเข้าไปที่ปัญหาISSUE 205236ดูเหมือนว่าจะเปิดใช้งานในอนาคต แต่ปัญหาหน่วยความจำจะไม่ได้รับการแก้ไขในเร็ว ๆ นี้
ในรุ่นถัดไปฉันได้เพิ่ม API การเลือกใช้ซึ่งคุณสามารถเปิดใช้งานการสนับสนุน VectorDrawable อีกครั้งซึ่งถูกลบออกไป มันมาพร้อมกับคำเตือนเหมือนเดิม (การใช้หน่วยความจำและปัญหาเกี่ยวกับการอัปเดตการกำหนดค่า)
ฉันมีปัญหาที่คล้ายกัน ดังนั้นในกรณีของฉันฉันเปลี่ยนไอคอนทั้งหมดที่ใช้เวกเตอร์ที่วาดได้จากทรัพยากรเป็นรูปภาพ PNG อีกครั้ง (เนื่องจากปัญหาหน่วยความจำจะยังคงเกิดขึ้นแม้ว่าจะมีตัวเลือกให้เปิดใช้งานอีกครั้งก็ตาม)
ฉันไม่แน่ใจว่านี่เป็นตัวเลือกที่ดีที่สุดหรือไม่ แต่จะแก้ไขข้อขัดข้องทั้งหมดในความคิดของฉัน