Màu mặc định cho văn bản trong textview là gì?


87

Tôi đặt màu thành màu đỏ, và sau đó tôi muốn đặt lại màu về mặc định, nhưng tôi không biết màu mặc định là gì, có ai biết không?

Câu trả lời:


87

Bạn có thể lưu màu cũ và sau đó sử dụng nó để khôi phục lại giá trị ban đầu. Đây là một ví dụ:

ColorStateList oldColors =  textView.getTextColors(); //save original colors
textView.setTextColor(Color.RED);
....
textView.setTextColor(oldColors);//restore original colors

Nhưng nói chung TextViewmàu văn bản mặc định được xác định từ Chủ đề hiện tại được áp dụng cho của bạn Activity.


Giải pháp đúng nhất. Duy trì trạng thái màu văn bản (bị tắt, v.v.)
dasar

Theo quan sát của tôi, màu văn bản được xác định theo chủ đề không được kế thừa bởi TextView được thêm động từ mã. Nó luôn xuất hiện với màu trắng bất kể chủ đề tối / sáng.
shiouming

1
@shiouming Phụ thuộc vào Ngữ cảnh được sử dụng. Mỗi Constructor sử dụng một Ngữ cảnh và trong Ngữ cảnh đó, một Chủ đề được đặt (thường là mặc định). Nếu cần, hãy sử dụng TextView (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
Bonatti

109

Trên thực tế, TextView màu là:

android:textColor="@android:color/tab_indicator_text"

hoặc là

#808080

4
Đó là màu văn bản chỉ báo tab mặc định. Trong nhiều trường hợp, nó có thể giống với màu văn bản mặc định, nhưng tôi sẽ không dựa vào nó.
k2col

6
Rất gần, nhưng màu này không giống nhau.
LukaszTaraszka

2
@LukTar nói đúng, tôi đã sử dụng photoshop và kiểm tra màu ... # 737373 là màu văn bản của chế độ xem văn bản từ mẫu pixel điểm (kích thước vùng mẫu là một pixel) trên chế độ xem được phóng to 1000% trong android studio ... tôi nghĩ vậy bạn cần phải xem kiểu mặc định của ứng dụng để có được giá trị thực tế cho bất kỳ ứng dụng cụ thể nào ...
me_

40

Có một số màu mặc định được xác định trong android.R.color

int c = getResources().getColor(android.R.color.primary_text_dark);

4
Nó phải là int c = ...thay vìColor c = ...
Kevin Cruijssen

7
Kể từ API cấp 23, getResources().getColor(int id)hiện không được dùng nữa (xem liên kết ). Bạn có thể có thể sử dụng getResources().getColor (int id, Resources.Theme theme)hoặcContextCompat.getColor(contex, android.R.color.primary_text_dark)
InfectedPacket

primary_text_dark hiện không được dùng nữa nhưng không hiểu tại sao :(
Impulse The Fox

15

Nhận các giá trị này từ các thuộc tính:

int[] attrs = new int[] { android.R.attr.textColorSecondary };
TypedArray a = getTheme().obtainStyledAttributes(R.style.AppTheme, attrs);
DEFAULT_TEXT_COLOR = a.getColor(0, Color.RED);
a.recycle();

Điều này có vẻ như nó sẽ chọn đúng màu dựa trên chủ đề và sẽ cập nhật chẳng hạn, nếu ứng dụng đang ở chế độ ban đêm.
Brill Pappin

Để lấy TypedArray cho Chủ đề hiện tại, hãy gọi nó không có Chủ đề đối số: TypedArray a = getTheme (). GetStyledAttributes (attrs);
petrsyn

Điều này sẽ chỉ nhận được một màu thích hợp nếu chủ đề thực sự đang sử dụng textColorSecondary. Vì có thể ghi đè điều này trong một chủ đề hoặc phong cách, đây không phải là cách rất chính xác để xác định màu văn bản mặc định cho một chế độ xem cụ thể thực sự sẽ là gì. Cũng lưu ý rằng các chế độ xem riêng lẻ hiện có thể được theo chủ đề, do đó, chủ đề được liên kết với ngữ cảnh của chế độ xem nên được sử dụng thay vì giả sử chủ đề của hoạt động có hiệu lực cho tất cả các chế độ xem của nó.
Lorne Laliberte

6

Có các giá trị mặc định trong chủ đề mà Android sử dụng nếu bạn không chỉ định màu văn bản. Nó có thể có các màu khác nhau trong các giao diện người dùng Android khác nhau (ví dụ: HTC Sense, Samsung TouchWiz, v.v.). Android có chủ đề _dark_lightchủ đề, do đó, các mặc định khác nhau cho những thứ này (nhưng gần như màu đen ở cả hai trong Android vani). Tuy nhiên, thực tiễn tốt là bạn nên tự xác định màu văn bản chính của mình để cung cấp phong cách nhất quán trên toàn bộ thiết bị.

Trong mã:

getResources().getColor(android.R.color.primary_text_dark);
getResources().getColor(android.R.color.primary_text_light);

Trong xml:

android:color="@android:color/primary_text_dark"
android:color="@android:color/primary_text_light"

Như tham chiếu trong Android vani, màu văn bản chủ đề tối là màu #060001và trong chủ đề sáng màu là #060003từ API v1. Xem lớp phong cách android tại đây


Các màu được tham chiếu trong liên kết cuối cùng của bạn thực ra không phải là màu, chúng chỉ là các giá trị android.R được sử dụng để tra cứu màu. Bạn có thể tra cứu các màu mặc định bằng cách tìm màu trong thư mục này và tra cứu tham chiếu màu cơ bản trong tệp .xml này .
Alex Gittemeier

5

Tôi biết nó đã cũ nhưng theo trình chỉnh sửa chủ đề của riêng tôi với chủ đề ánh sáng mặc định, mặc định

textPrimaryColor = #000000

textColorPrimaryDark = #757575

2

Tôi đã sử dụng một công cụ chọn màu trên chế độ xem văn bản và nhận được màu # 757575


2

Có thể không thực hiện được trong mọi trường hợp, nhưng tại sao không chỉ đơn giản sử dụng giá trị của một TextView ngẫu nhiên khác tồn tại trong cùng Hoạt động và mang màu sắc bạn đang tìm kiếm?

txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());

0

Không có màu mặc định. Nó có nghĩa là mọi thiết bị đều có thể có riêng.


7
Không có màu mặc định, chỉ là mọi bản phân phối android đều có thể ghi đè lên chúng
Patrick Favre

@ for3st Bạn có biết trường hợp nào họ thay đổi nó không?
nhà phát triển android

0

Tôi tin rằng giá trị số nguyên màu mặc định là 16711935 (0x00FF00FF).


12
wow những thứ được mã hóa cứng, bạn biết đấy. Đây có phải là giá trị cho tất cả các phiên bản Android trên tất cả các thiết bị và với tất cả các chủ đề có thể lựa chọn ?! Đùa đấy, bạn biết đấy ... :)
Bondax

1
Vậy màu văn bản mặc định trong android là màu hồng? Tôi nghĩ nó phù hợp hơn với # 060001 developer.android.com/reference/android/…
Patrick Favre

0

này bạn có thể thử cái này

ColorStateList colorStateList = textView.getTextColors();
String hexColor = String.format("#%06X", (0xFFFFFF & colorStateList.getDefaultColor()));

0

Tôi nhận thấy điều đó android:textColor="@android:color/secondary_text_dark"cung cấp kết quả gần với màu TextView mặc định hơn android:textColor="@android:color/tab_indicator_text". Tôi cho rằng bạn phải chuyển đổi giữa Secondary_text_dark / light tùy thuộc vào Chủ đề bạn đang sử dụng


0

Bạn có thể sử dụng TextView.setTag / getTag để lưu trữ màu gốc trước khi thực hiện thay đổi. Tôi khuyên bạn nên tạo một tài nguyên id duy nhất trong ids.xml để phân biệt các thẻ khác nếu bạn có.

trước khi đặt sang các màu khác:

if (textView.getTag(R.id.txt_default_color) == null) {
    textView.setTag(R.id.txt_default_color, textView.currentTextColor)
}

Thay đổi lại:

textView.getTag(R.id.txt_default_color) as? Int then {
    textView.setTextColor(this)
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.