ปุ่มปรับแต่ง Android; เปลี่ยนสีข้อความ


251

ฉันสร้างปุ่มที่เปลี่ยนพื้นหลังที่สามารถวาดได้ในสถานะต่างๆด้วยวิธีนี้

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true" android:drawable="@drawable/btn_location_pressed" /> <!-- pressed -->
 <item android:state_focused="true" android:drawable="@drawable/btn_location_pressed"/> <!-- focused -->
 <item android:drawable="@drawable/btn_location"/> <!-- default -->

ปัญหาที่นี่คือฉันยังพยายามเปลี่ยน textColor เช่นเดียวกับ drawable แต่ฉันไม่สามารถ ฉันลองใช้ android แล้ว: textColor และ android: color แต่อันแรกไม่ทำงานในขณะที่วินาทีเปลี่ยนพื้นหลังของฉัน

รหัสต่อไปเป็นส่วนหนึ่งของเค้าโครงของฉัน เกี่ยวกับสีข้อความมันใช้งานได้กับสีข้อความสถานะปกติเท่านั้นดังนั้นจึงไม่เปลี่ยนเป็นสีขาวในขณะที่กด

<Button android:id="@+id/location_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:background="@drawable/location"          
        android:textSize="15sp"
        android:textColor="@color/location_color"
        android:textColorHighlight="#FFFFFF"
   />

มีใครได้รับเบาะแสหรือไม่?

คำตอบ:


580

สร้างสีที่สวยงามสำหรับปุ่มของคุณเช่นเดียวกับที่คุณทำกับพื้นหลังตัวอย่างเช่น:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Focused and not pressed -->
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:color="#ffffff" />

    <!-- Focused and pressed -->
    <item android:state_focused="true" 
          android:state_pressed="true" 
          android:color="#000000" />

    <!-- Unfocused and pressed -->
    <item android:state_focused="false" 
          android:state_pressed="true" 
          android:color="#000000" />

    <!-- Default color -->
    <item android:color="#ffffff" />

</selector>

วาง xml ไว้ในไฟล์ที่โฟลเดอร์ res / drawable เช่น res / drawable / button_text_color.xml จากนั้นเพียงตั้งค่า drawable เป็นสีข้อความ:

android:textColor="@drawable/button_text_color"

15
โปรดทราบว่า (สำหรับฉันอย่างน้อย) มีข้อผิดพลาดที่สถานะ "ปกติ" (<item android: color = "# ffffff" /> ในคำตอบของคุณ) ต้องวางไว้ที่ท้ายไฟล์ดังที่คุณตอบ การวางสถานะปกติที่ด้านบนของไฟล์ (เหนือรัฐอื่น) จะหยุดไม่ให้ตัวเลือกทำงาน
Chris Blunt

58
ไม่ใช่ข้อผิดพลาด มันเป็นวิธีที่รัฐเลือกให้ทำงาน มันไม่ใช่แมตช์ที่ดีที่สุดแทนที่จะเป็นเกมแรกที่จะเข้าได้
superjos

คุณจะทำอย่างไรกับค่าจำนวนเต็ม? ฉันพยายามทำสิ่งที่คล้ายกับการขยายข้อความ
elimirks

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

20
มันจะดีกว่าถ้าตัวเลือกสีตั้งอยู่ในres/colorโฟลเดอร์ และเมื่อมีการโทรใช้งาน:android:textColor="@color/button_text_color"
Justin

16

อีกวิธีในการทำคือในชั้นเรียนของคุณ:

import android.graphics.Color; // add to top of class  

Button btn = (Button)findViewById(R.id.btn);

// set button text colour to be blue
btn.setTextColor(Color.parseColor("blue"));

// set button text colour to be red
btn.setTextColor(Color.parseColor("#FF0000"));

// set button text color to be a color from your resources (could be strings.xml)
btn.setTextColor(getResources().getColor(R.color.yourColor));

// set button background colour to be green
btn.setBackgroundColor(Color.GREEN);

1
สิ่งนี้จะเปลี่ยนสีของตัวอักษรบนปุ่ม แต่จะยังคงอยู่ในสีนั้นในระหว่างสถานะต่าง ๆ ของปุ่ม (เช่นกด) ในสถานการณ์ส่วนใหญ่เมื่อสีพื้นหลังของปุ่มเปลี่ยนไปในระหว่างสถานะก็ต้องการเปลี่ยนสีข้อความของปุ่มด้วยเช่นกันนี่คือคำตอบของ @Konstantin Burov ที่มีประโยชน์
Dzhuneyt

1
นี่ไม่ได้ตอบคำถามเดิม คำถามเกี่ยวกับวิธีการกำหนดสีตามสถานะให้กับมุมมองข้อความเช่นเดียวกับที่คุณสามารถตั้งค่า drawables ตามรัฐ
นักเล่นแร่แปรธาตุ

4

ตกลงง่าย ๆ ก่อนไปที่ 1. res-valuse และเปิด colors.xml 2.copy 1 ของข้อความที่กำหนดตัวอย่างเช่น # FF4081 และเปลี่ยนชื่อเช่นฉันเปลี่ยนเป็นสีขาวและเปลี่ยนค่าสำหรับอินสแตนซ์ฉันเปลี่ยนเป็น #FFFFFF สำหรับ ค่าสีขาวเช่นนี้

<color name="White">#FFFFFF</color>

จากนั้นภายในปุ่มของคุณเพิ่มบรรทัดนี้

 b3.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.White));

ok b3 เป็นชื่อของปุ่มของฉันดังนั้นการเปลี่ยนชื่อของปุ่ม ur คนอื่น ๆ ทั้งหมดจะเหมือนกันถ้าคุณใช้สีขาวถ้าคุณเปลี่ยนสีอื่นแล้วเปลี่ยนสีขาวเป็นชื่อสีของคุณ แต่ก่อนอื่นคุณต้องกำหนดสีเป็นสี xml อย่างที่ฉันอธิบายไว้ใน pont 2


1

การเปลี่ยนสีข้อความของปุ่ม

เพราะวิธีนี้เลิกใช้แล้ว

button.setTextColor(getResources().getColor(R.color.your_color));

ฉันใช้สิ่งต่อไปนี้:

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));

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