CẬP NHẬT MỚI NHẤT - Tháng 6 năm 2019
Thư viện Hỗ trợ đã thay đổi một chút so với câu trả lời ban đầu. Giờ đây, ngay cả plugin Android dành cho Gradle cũng có thể tự động tạo PNG tại thời điểm xây dựng. Vì vậy, dưới đây là hai cách tiếp cận mới sẽ hoạt động trong những ngày này. Bạn có thể tìm thêm thông tin tại đây:
Thế hệ PNG
Gradle có thể tự động tạo hình ảnh PNG từ nội dung của bạn tại thời điểm xây dựng. Tuy nhiên, trong cách tiếp cận này, không phải tất cả các phần tử xml đều được hỗ trợ . Giải pháp này rất tiện lợi vì bạn không cần phải thay đổi bất kỳ điều gì trong mã hoặc trong build.gradle của mình. Chỉ cần đảm bảo rằng bạn đang sử dụng Android Plugin 1.5.0 trở lên và Android Studio 2.2 trở lên .
Tôi đang sử dụng giải pháp này trong ứng dụng của mình và hoạt động tốt. Không cần cờ build.gradle bổ sung . Không cần hack. Nếu bạn truy cập / build / created / res / pngs / ..., bạn có thể thấy tất cả các PNG đã tạo.
Vì vậy, nếu bạn có một số biểu tượng đơn giản (vì không phải tất cả các phần tử xml đều được hỗ trợ), giải pháp này có thể phù hợp với bạn. Chỉ cần cập nhật Android Studio và plugin Android của bạn cho Gradle.
Thư viện hỗ trợ
Có thể, đây là giải pháp sẽ làm việc cho bạn. Nếu bạn đến đây, điều đó có nghĩa là Android Studio của bạn không tự động tạo PNG. Vì vậy, ứng dụng của bạn đang bị lỗi.
Hoặc có thể, bạn không muốn Android Studio tạo bất kỳ PNG nào.
Khác với "Tự động tạo PNG" hỗ trợ tập hợp con phần tử XML, giải pháp này hỗ trợ tất cả các thẻ xml. Vì vậy, bạn có đầy đủ hỗ trợ cho vector có thể vẽ của bạn.
Trước tiên, bạn phải cập nhật build.gradle của mình để hỗ trợ nó:
android {
defaultConfig {
// This flag will also prevents Android Studio from generating PNGs automatically
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// Use this for Support Library
implementation 'com.android.support:appcompat-v7:23.2.0' // OR HIGHER
// Use this for AndroidX
implementation 'androidx.appcompat:appcompat:1.1.0' // OR HIGHER
}
Và sau đó, sử dụng app:srcCompat
thay vì android:src
trong khi tải VectorDrawables
. Đừng quên điều này.
Đối với TextView
, nếu bạn đang sử dụng androidx
phiên bản của Thư viện hỗ trợ, bạn có thể sử dụng app:drawableLeftCompat
(hoặc bên phải, trên cùng, dưới cùng) thay vìapp:drawableLeft
Trong trường hợp CheckBox
/ RadioButton
, sử dụng app:buttonCompat
thay vì android:button
.
Nếu bạn không sử dụng các androidx
phiên bản của Thư viện hỗ trợ và bạn minSdkVersion
là 17
trở lên hoặc sử dụng một nút, bạn có thể cố gắng thiết lập trình qua
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
CẬP NHẬT - Tháng 7/2016
Họ đã bật lại VectorDrawable đó trong
Thư viện hỗ trợ Android 23.4.0
Đối với người dùng AppCompat , chúng tôi đã thêm một API chọn tham gia để bật lại hỗ trợ Vector Drawables từ tài nguyên (hành vi được tìm thấy trong 23.2) thông qua AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - hãy nhớ rằng điều này vẫn có thể gây ra sự cố với việc sử dụng bộ nhớ và sự cố cập nhật các phiên bản Cấu hình, do đó lý do tại sao nó bị tắt theo mặc định.
Có thể , build.gradle
cài đặt hiện đã lỗi thời và bạn chỉ cần kích hoạt nó trong các hoạt động thích hợp (tuy nhiên, cần phải kiểm tra).
Bây giờ, để kích hoạt nó, bạn phải làm:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Câu trả lời gốc - Tháng 4 năm 2016
Tôi nghĩ rằng điều này đang xảy ra vì Hỗ trợ Vector đã bị tắt trong phiên bản thư viện mới nhất: 23.3.0
Theo BÀI ĐĂNG này :
Đối với người dùng AppCompat, chúng tôi đã quyết định xóa chức năng cho phép bạn sử dụng vector có thể vẽ từ tài nguyên trên thiết bị trước Lollipop do các vấn đề được tìm thấy trong quá trình triển khai ở phiên bản 23.2.0 / 23.2.1 (ISSUE 205236) . Sử dụng ứng dụng: srcCompat và setImageResource () tiếp tục hoạt động.
Nếu bạn truy cập sự cố ISSUE 205236 , có vẻ như chúng sẽ bật trong tương lai nhưng sự cố bộ nhớ sẽ không sớm được khắc phục:
Trong bản phát hành tiếp theo, tôi đã thêm một API chọn tham gia, nơi bạn có thể bật lại hỗ trợ VectorDrawable đã bị xóa. Nó đi kèm với các cảnh báo tương tự như trước đây (sử dụng bộ nhớ và các vấn đề với cập nhật Cấu hình).
Tôi đã có một vấn đề tương tự. Vì vậy, trong trường hợp của tôi, tôi đã hoàn nguyên tất cả các biểu tượng sử dụng vector có thể vẽ từ tài nguyên sang hình ảnh PNG (vì sự cố bộ nhớ sẽ tiếp tục xảy ra ngay cả khi họ cung cấp tùy chọn để bật lại).
Tôi không chắc liệu đây có phải là lựa chọn tốt nhất hay không, nhưng theo ý kiến của tôi, nó khắc phục được tất cả các sự cố.