cuốn sách gpt4 ai đã làm

android - 颜色/可绘制更改应用于具有相同背景(颜色)的所有 View [Marshmallow]

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 21:58:33 28 4
mua khóa gpt4 Nike

Gần đây tôi đã cập nhật điện thoại của mình lên Android Marshmallow và chạy ứng dụng hiện có của mình trên đó nhưng nhận thấy sự khác biệt trong hành vi màu sắc: Khi áp dụng các thay đổi cho nền của Chế độ xem (có thể vẽ), tất cả những ứng dụng có chung nền. Các thay đổi tương tự sẽ được áp dụng vào Chế độ xem (tham khảo). Trước đây, đây không phải là trường hợp.

ví dụ
Trong ví dụ này, tôi có hai Chế độ xem có cùng màu nền và tôi muốn thay đổi cấp độ alpha của một trong số chúng.

Đầu tiên chúng ta xác định Chế độ xem trong bố cục:

    
android:id="@+id/test1"
android:orientation="ngang"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/testColor2">




android:id="@+id/test2"
android:orientation="ngang"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/testColor1"
android:layout_marginLeft="5dp">

Hai Chế độ xem có cùng màu nền hoặc có thể vẽ được:

#3F51B5
#3F51B5

Kết quả là thế này:
nhập mô tả hình ảnh ở đây

Bây giờ chúng ta muốn thay đổi một trong hai hình nền như thế này:

    LinearLayout test1 = (LinearLayout) findViewById(R.id.test1);
LinearLayout test2 = (LinearLayout) findViewById(R.id.test2);
test1.getBackground().setAlpha(80);

hóa ra:
nhập mô tả hình ảnh ở đây

Tuy nhiên, kết quả mong muốn và mong đợi rõ ràng là thế này:
nhập mô tả hình ảnh ở đây

Tải xuống dự án mẫu đây.

Một số suy nghĩ:

  • Hành vi này không áp dụng khi đặt mức alpha thông qua XML.
  • Sẽ không có vấn đề gì nếu hai Chế độ xem tham chiếu các định nghĩa màu khác nhau trong color.xml (như trong ví dụ), tham chiếu trực tiếp cùng một định nghĩa màu cho cùng một màu (ở dạng thập lục phân) trong tệp xml của Chế độ xem.

câu hỏi
Cách thay đổi nền của Chế độ xem mà không ảnh hưởng đến các Chế độ xem khác có cùng nền. Sẽ thật tuyệt nếu vẫn có thể sử dụng nền tham chiếu trực tiếp đến màu được xác định trong tệp xml màu

câu trả lời hay nhất

Rất có thể lớp nền và hằng số của mỗi chế độ xem là cùng một đối tượng. Có vẻ như hai tài nguyên màu đã được "hợp nhất" ở đâu đó - nghĩa là chúng đã chia sẻ bộ nhớ đệm của lớp Tài nguyên. chúng tách biệt vì chúng là các tài nguyên khác nhau (mặc dù có cùng giá trị màu), nhưng dường như không phải vậy.

Snild Dolkow

Trạng thái của ColorDrawable lưu trữ alpha, do đó, bất kỳ thay đổi nào đối với một trạng thái sẽ thay đổi các trạng thái khác. Để ngăn điều này xảy ra, bạn có thể tách hai đối tượng có thể vẽ (bằng cách sao chép trạng thái) bằng cách gọi mutate() trên đối tượng có thể vẽ trước.

Trong ví dụ này sẽ dẫn đến việc sử dụng test1.getBackground().mutate().setAlpha(80); Thay vì áp dụng alpha trực tiếp.

Về android - Các thay đổi về Màu sắc/Có thể vẽ được áp dụng cho tất cả Chế độ xem có cùng nền (màu) [Marshmallow], chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/33354788/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress