2011-01-14 6 views
205

tôi đã thực hiện một nút rằng những thay đổi đối tượng vẽ cơ bản về tiểu bang khác nhau, theo cách này:nút tùy chỉnh Android; thay đổi màu chữ

<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 Format như tôi làm với có thể vẽ được nhưng tôi không thể. Tôi đã thử android: textColor và android: màu nhưng đầ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 của bố cục của tôi. Về màu văn bản, nó chỉ hoạt động cho màu văn bản trạng thái bình thường, do đó không thay đổi màu trắng thành màu trắng 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ó đầu mối không?

Trả lời

497

Tạo một màu stateful cho nút bấm 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"> 
    <item android:state_focused="true" android:state_pressed="false" android:color="#ffffff" /> 
    <item android:state_focused="true" android:state_pressed="true" android:color="#000000" /> 
    <item android:state_focused="false" android:state_pressed="true" android:color="#000000" /> 
    <item android:color="#ffffff" /> 
</selector> 

Đặt xml trong một tập tin tại res/drawable thư mục ví dụ: res/drawable/button_text_color.xml. Sau đó chỉ cần thiết lập các drawable như màu chữ:

android:textColor="@drawable/button_text_color" 
+13

Lưu ý rằng (đối với tôi, ít nhất) có lỗi trong trạng thái "bình thường" ( 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) dừng bộ chọn hoạt động. –

+51

nó không phải là một lỗi. Đó là cách lựa chọn nhà nước có nghĩa vụ phải làm việc. Đây không phải là một trận đấu _best, thay vào đó là trận đấu đầu tiên phù hợp sẽ vượt qua. – superjos

+0

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

14

Một cách khác để làm điều đó là trong lớp học 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ụ: được 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à nơi câu trả lời của @Konstantin Burov có ích. –

+0

điều này sẽ không đặt các màu khác nhau cho mỗi trạng thái ... –

+0

Điều này không trả lời được câu hỏi gốc. Câu hỏi đặt ra là làm thế nào để xác định màu sắc của nhà nước dựa trên chế độ xem văn bản giống như bạn có thể đặt các bản vẽ dựa trên trạng thái. – alchemist

1

Thay đổi màu sắc văn bản nút

của Bởi vì phương pháp này hiện đang bị phản đối

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

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

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

ok rất đơn giản đầu tiên đi đến 1. res-valuse và colors.xml mở 2.copy 1 của văn bản định nghĩa của họ ví dụ # FF4081 và thay đổi tên ví dụ tôi đã thay đổi sang màu trắng và thay đổi giá trị của nó ví dụ tôi thay đổi để #FFFFFF cho giá trị màu 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 thay đổi tên của nút ur tất cả những cái khác sẽ giống nhau nếu u sử dụng màu trắng nếu bạn thay đổi màu khác nhau rồi đổi màu trắng thành tên màu của bạn nhưng trước tiên bạn đã xác định màu đó bằng màu .xml như tôi đã giải thích trong pont 2