Nút tùy chỉnh Android; thay đổi màu văn bản


251

Tôi đã tạo một nút thay đổi nền có thể vẽ trên các trạng thái khác nhau, theo cách này:

 <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 -->

Vấn đề ở đây là tôi cũng đang cố gắng thay đổi textColor như tôi đã làm với drawable nhưng tôi không thể. Tôi đã thử android: textColor và android: color nhưng lần đầu tiên không hoạt động trong khi giây thay đổi nền của tôi.

Mã tiếp theo là một phần trong bố cục của tôi. Đối với màu văn bản, nó chỉ hoạt động với màu văn bản trạng thái bình thường, do đó không thay đổi nó thành màu trắng trong khi nhấn

<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"
   />

Có ai có manh mối không?

Câu trả lời:


579

Tạo màu trạng thái cho nút của bạn, giống như bạn đã làm cho nền, ví dụ:

<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>

Đặt xml trong một tệp tại thư mục res / drawable, tức là res / drawable / button giác_color.xml. Sau đó, chỉ cần đặt drawable là màu văn bản:

android:textColor="@drawable/button_text_color"

15
Lưu ý rằng (đối với tôi, ít nhất) có một lỗi trong đó trạng thái "bình thường" (<item android: color = "# ffffff" /> trong câu trả lời của bạn) phải được đặt ở cuối tệp như trong câu trả lời của bạn. Đặt trạng thái bình thường ở đầu tệp (phía trên các trạng thái khác) sẽ ngăn bộ chọn hoạt động.
Chris Blunt

58
nó không phải là một lỗi Đó là cách lựa chọn trạng thái được cho là hoạt động. Đây không phải là một trận đấu hay nhất , thay vào đó, trận đấu đầu tiên sẽ phù hợp.
superjos

Bạn có làm thế nào để làm điều này với một giá trị số nguyên? Tôi đang cố gắng làm một cái gì đó tương tự với phần đệm văn bản.
bỏ

đã dành một chút thời gian để thử nó nhưng không có kết quả, sau đó phát hiện ra rằng tôi vẫn đang đặt nó vào thuộc tính nền thay vì thuộc tính textcolor. Không quen nhìn thấy textcolor mất một drawable!
Odaym

20
Nó khác nếu bộ chọn màu nằm trong res/colorthư mục. Và khi gọi, hãy sử dụng:android:textColor="@color/button_text_color"
Justin

16

Một cách khác để làm điều đó là trong lớp của bạn:

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
Điều này sẽ thay đổi màu văn bản trên nút, nhưng sẽ giữ màu đó trong các trạng thái khác nhau của nút (ví dụ: nhấn). Trong hầu hết các trường hợp, khi màu nền của nút thay đổi trong trạng thái, bạn cũng muốn thay đổi màu văn bản của nút, đây là lúc câu trả lời của @Konstantin Burov trở nên hữu ích.
Dzhuneyt

1
Điều này không trả lời câu hỏi ban đầu. Câu hỏi là về cách xác định màu dựa trên trạng thái cho chế độ xem văn bản giống như bạn có thể đặt các biểu đồ dựa trên trạng thái.
nhà giả kim

4

ok rất đơn giản trước tiên hãy chuyển đến 1. res-valuse và mở colors.xml 2.copy 1 của văn bản được xác định ví dụ # FF4081 và đổi tên ví dụ i đổi thành màu trắng và thay đổi giá trị của nó, ví dụ tôi đổi thành #FFFFFF cho giá trị trắng như thế này

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

sau đó bên trong nút của bạn thêm dòng này

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

ok b3 là tên nút của tôi nên đã thay đổi tên nút ur, tất cả những cái khác sẽ giống nhau nếu bạn sử dụng màu trắng nếu bạn thay đổi màu khác sau đó đổi màu trắng thành tên màu của bạn nhưng trước tiên bạn phải xác định màu đó bằng màu. xml như tôi đã giải thích trong pont 2


1

Thay đổi màu văn bản của nút

Bởi vì phương pháp này hiện không được chấp nhận

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

Tôi sử dụng như sau:

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

0

Sử dụng getColorStateListnhư thế này

setTextColor(resources.getColorStateList(R.color.button_states_color))

thay vì getColor

setTextColor(resources.getColor(R.color.button_states_color))
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.