สีเริ่มต้นสำหรับข้อความใน textview คืออะไร?


89

ฉันตั้งค่าสีเป็นสีแดงและหลังจากนั้นฉันต้องการตั้งค่าสีอีกครั้งกลับเป็นค่าเริ่มต้น แต่ฉันไม่รู้ว่าสีเริ่มต้นคืออะไรมีใครรู้บ้างไหม?

คำตอบ:


88

คุณสามารถบันทึกสีเก่าแล้วใช้เพื่อคืนค่าเดิมได้ นี่คือตัวอย่าง:

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

แต่โดยทั่วไปแล้วTextViewสีข้อความเริ่มต้นจะถูกกำหนดจากธีมปัจจุบันที่ใช้กับActivityไฟล์.


วิธีแก้ปัญหาที่ถูกต้องที่สุด รักษาสถานะสีข้อความ (ปิดใช้งาน ฯลฯ )
dasar

จากการสังเกตของฉันสีข้อความที่กำหนดโดยธีมไม่ได้รับการสืบทอดโดย TextView ที่เพิ่มแบบไดนามิกจากโค้ด จะปรากฏเป็นสีขาวเสมอโดยไม่คำนึงถึงธีมมืด / สว่าง
shiouming

2
@shiouming ขึ้นอยู่กับบริบทที่ใช้ ตัวสร้างทุกตัวใช้บริบทและในบริบทนั้นธีมจะถูกตั้งค่า (โดยปกติจะเป็นค่าเริ่มต้น) หากจำเป็นให้ใช้TextView (บริบทบริบท AttributeSet attrs int defStyleAttr int defStyleRes)
Bonatti

110

จริงๆแล้ว TextView สีคือ:

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

หรือ

#808080

4
นั่นคือสีข้อความตัวบ่งชี้แท็บเริ่มต้น ในหลาย ๆ กรณีมันอาจจะเหมือนกับสีข้อความเริ่มต้น แต่ฉันจะไม่ใช้มัน
k2col

6
ใกล้มาก แต่สีนี้ไม่เหมือนกัน
LukaszTaraszka

2
@LukTar ถูกต้องฉันใช้ photoshop และตรวจสอบสี ... # 737373 เป็นสีข้อความของ textview จากตัวอย่างพิกเซล (ขนาดพื้นที่ตัวอย่างหนึ่งพิกเซล) บนมุมมองที่ซูมถึง 1,000% ใน android studio ... ฉันคิดว่า คุณต้องดูรูปแบบเริ่มต้นของแอปเพื่อให้ได้ค่าที่แท้จริงสำหรับแอปที่มี
อนุภาค

41

มีสีเริ่มต้นบางสีที่กำหนดไว้ใน android.R.color

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

4
ควรจะเป็นint c = ...แทนColor c = ...
Kevin Cruijssen

7
ในขณะนี้ API level23 getResources().getColor(int id)เลิกใช้งานแล้ว (ดูลิงค์ ) คุณสามารถใช้ getResources().getColor (int id, Resources.Theme theme)หรือContextCompat.getColor(contex, android.R.color.primary_text_dark)
InfectedPacket

primary_text_dark เลิกใช้แล้ว แต่ไม่รู้ว่าทำไม :(
Impulse The Fox

15

รับค่าเหล่านี้จากแอตทริบิวต์:

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();

ดูเหมือนว่ามันจะเลือกสีตามธีมได้อย่างเหมาะสมและจะอัปเดตเช่นหากแอปอยู่ในโหมดกลางคืน
Brill Pappin

ในการรับ TypedArray สำหรับ Theme ปัจจุบันให้เรียกโดยไม่ใช้ Theme arg: TypedArray a = getTheme (). getStyledAttributes (attrs);
petrsyn

สิ่งนี้จะได้สีที่เหมาะสมก็ต่อเมื่อธีมนั้นใช้ textColorSecondary เนื่องจากเป็นไปได้ที่จะลบล้างสิ่งนี้ในธีมหรือสไตล์จึงไม่ใช่วิธีที่ถูกต้องมากนักในการกำหนดว่าสีข้อความเริ่มต้นสำหรับมุมมองหนึ่ง ๆ จะเป็นอย่างไร โปรดทราบด้วยว่าขณะนี้มุมมองแต่ละมุมมองสามารถกำหนดธีมได้ดังนั้นควรใช้ธีมที่เกี่ยวข้องกับบริบทของมุมมองแทนการสมมติว่าธีมของกิจกรรมมีผลกับมุมมองทั้งหมด
Lorne Laliberte

6

มีค่าเริ่มต้นในธีมที่ 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 ที่นี่


สีที่อ้างถึงในลิงค์สุดท้ายของคุณไม่ใช่สีเลย แต่เป็นเพียงค่า android.R ที่ใช้ในการค้นหาสี คุณสามารถค้นหาสีเริ่มต้นได้โดยการค้นหาสีในไดเร็กทอรีนี้และค้นหาการอ้างอิงสีพื้นฐานในไฟล์. xmlนี้
Alex Gittemeier

5

ฉันรู้ว่ามันเก่า แต่ตามตัวแก้ไขธีมของฉันเองที่มีธีมแสงเริ่มต้นเป็นค่าเริ่มต้น

textPrimaryColor = #000000

และ

textColorPrimaryDark = #757575


2

อาจเป็นไปไม่ได้ในทุกสถานการณ์ แต่ทำไมไม่เพียงแค่ใช้ค่าของ TextView แบบสุ่มอื่นที่มีอยู่ในกิจกรรมเดียวกันและมีสีที่คุณกำลังมองหา

txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());

0

ไม่มีสีเริ่มต้น หมายความว่าอุปกรณ์ทุกชิ้นสามารถมีได้เอง


7
ไม่มีสีเริ่มต้นเพียง แต่ทุกการแจกจ่าย Android สามารถเขียนทับได้
Patrick Favre

@ for3st คุณรู้หรือไม่ว่ากรณีที่พวกเขาเปลี่ยนมัน?
นักพัฒนา Android

0

ฉันเชื่อว่าค่าจำนวนเต็มสีเริ่มต้นคือ 16711935 (0x00FF00FF)


12
ว้าวสิ่งที่เข้ารหัสยากรู้ไหม นี่เป็นค่าสำหรับ Android ทุกรุ่นในทุกอุปกรณ์และมีธีมที่เลือกได้ทั้งหมดหรือไม่! ล้อเล่นคุณก็รู้ ... :)
Bondax

1
สีข้อความเริ่มต้นใน Android จึงเป็นสีชมพู? ฉันคิดว่ามันสอดคล้องกับ # 060001 developer.android.com/reference/android/…
Patrick Favre


0

ฉันพบว่าandroid:textColor="@android:color/secondary_text_dark"ให้ผลใกล้เคียงกับสี TextView android:textColor="@android:color/tab_indicator_text"เริ่มต้นกว่า ฉันคิดว่าคุณต้องสลับไปมาระหว่าง secondary_text_dark / light ขึ้นอยู่กับ Theme ที่คุณใช้


0

คุณสามารถใช้ 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)
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.