ฉันตั้งค่าสีเป็นสีแดงและหลังจากนั้นฉันต้องการตั้งค่าสีอีกครั้งกลับเป็นค่าเริ่มต้น แต่ฉันไม่รู้ว่าสีเริ่มต้นคืออะไรมีใครรู้บ้างไหม?
ฉันตั้งค่าสีเป็นสีแดงและหลังจากนั้นฉันต้องการตั้งค่าสีอีกครั้งกลับเป็นค่าเริ่มต้น แต่ฉันไม่รู้ว่าสีเริ่มต้นคืออะไรมีใครรู้บ้างไหม?
คำตอบ:
คุณสามารถบันทึกสีเก่าแล้วใช้เพื่อคืนค่าเดิมได้ นี่คือตัวอย่าง:
ColorStateList oldColors = textView.getTextColors(); //save original colors
textView.setTextColor(Color.RED);
....
textView.setTextColor(oldColors);//restore original colors
แต่โดยทั่วไปแล้วTextView
สีข้อความเริ่มต้นจะถูกกำหนดจากธีมปัจจุบันที่ใช้กับActivity
ไฟล์.
จริงๆแล้ว TextView สีคือ:
android:textColor="@android:color/tab_indicator_text"
หรือ
#808080
มีสีเริ่มต้นบางสีที่กำหนดไว้ใน android.R.color
int c = getResources().getColor(android.R.color.primary_text_dark);
int c = ...
แทนColor c = ...
getResources().getColor(int id)
เลิกใช้งานแล้ว (ดูลิงค์ ) คุณสามารถใช้ getResources().getColor (int id, Resources.Theme theme)
หรือContextCompat.getColor(contex, android.R.color.primary_text_dark)
รับค่าเหล่านี้จากแอตทริบิวต์:
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();
มีค่าเริ่มต้นในธีมที่ Android ใช้หากคุณไม่ระบุสีข้อความ อาจเป็นสีที่แตกต่างกันใน UI ต่างๆของ Android (เช่น HTC Sense, Samsung TouchWiz เป็นต้น) Android มี_dark
และ_light
ธีมดังนั้นค่าเริ่มต้นจึงแตกต่างกันสำหรับสิ่งเหล่านี้ (แต่เกือบจะเป็นสีดำทั้งคู่ใน vanilla android) อย่างไรก็ตามเป็นแนวทางปฏิบัติที่ดีในการกำหนดสีข้อความหลักด้วยตัวคุณเองเพื่อให้ได้รูปแบบที่สอดคล้องกันทั่วทั้งอุปกรณ์
ในรหัส:
getResources().getColor(android.R.color.primary_text_dark);
getResources().getColor(android.R.color.primary_text_light);
ใน xml:
android:color="@android:color/primary_text_dark"
android:color="@android:color/primary_text_light"
ตามการอ้างอิงใน vanilla Android สีข้อความของธีมสีเข้ม#060001
และอยู่ในธีมสีอ่อน#060003
ตั้งแต่ API v1 ดูคลาสสไตล์ Android ที่นี่
ฉันรู้ว่ามันเก่า แต่ตามตัวแก้ไขธีมของฉันเองที่มีธีมแสงเริ่มต้นเป็นค่าเริ่มต้น
textPrimaryColor = #000000
และ
textColorPrimaryDark = #757575
ฉันใช้ตัวเลือกสีในมุมมองข้อความและได้รับ # 757575 นี้
อาจเป็นไปไม่ได้ในทุกสถานการณ์ แต่ทำไมไม่เพียงแค่ใช้ค่าของ TextView แบบสุ่มอื่นที่มีอยู่ในกิจกรรมเดียวกันและมีสีที่คุณกำลังมองหา
txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());
ไม่มีสีเริ่มต้น หมายความว่าอุปกรณ์ทุกชิ้นสามารถมีได้เอง
ฉันเชื่อว่าค่าจำนวนเต็มสีเริ่มต้นคือ 16711935 (0x00FF00FF)
เดี๋ยวก่อนลองดูสิ
ColorStateList colorStateList = textView.getTextColors();
String hexColor = String.format("#%06X", (0xFFFFFF & colorStateList.getDefaultColor()));
ฉันพบว่าandroid:textColor="@android:color/secondary_text_dark"
ให้ผลใกล้เคียงกับสี TextView android:textColor="@android:color/tab_indicator_text"
เริ่มต้นกว่า ฉันคิดว่าคุณต้องสลับไปมาระหว่าง secondary_text_dark / light ขึ้นอยู่กับ Theme ที่คุณใช้
คุณสามารถใช้ TextView.setTag / getTag เพื่อจัดเก็บสีดั้งเดิมก่อนทำการเปลี่ยนแปลง ฉันขอแนะนำให้สร้างทรัพยากร id เฉพาะใน ids.xml เพื่อแยกความแตกต่างของแท็กอื่น ๆ หากคุณมี
ก่อนตั้งค่าเป็นสีอื่น:
if (textView.getTag(R.id.txt_default_color) == null) {
textView.setTag(R.id.txt_default_color, textView.currentTextColor)
}
การเปลี่ยนกลับ:
textView.getTag(R.id.txt_default_color) as? Int then {
textView.setTextColor(this)
}