Android: textColor của nút tắt trong bộ chọn không hiển thị?


97

Tôi đang cố tạo một nút có bộ chọn nút của tôi có thể có các trạng thái sau:

  • Đã bật / Đã tắt
  • Được ép / Không được ép

Theo các trạng thái nêu trên. Tôi cần thao tác với nút:

  • Văn bản màu
  • hình nền

Nút bắt đầu tắt của tôi bị vô hiệu hóa vì vậy nó sẽ có TextColor bị vô hiệu hóa và nền nút bị tắt. Nhưng tôi có thể thấy textColor mặc định (được chỉ định trong kiểu) và KHÔNG có hình nền!

Đây là nút chọn button_selector.xml của tôi

<?xml version="1.0" encoding="utf-8"?>

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

    <item android:state_pressed="false"
        android:state_enabled="false"
        android:textColor="#9D9FA2"
        android:drawable="@drawable/button" />    

    <item android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/button_pressed"/>

    <item android:state_pressed="true"
        android:state_enabled="false"
        android:textColor="#9D9FA2"
        android:drawable="@drawable/button"/>

    <item android:state_pressed="false"
        android:state_enabled="true"
        android:drawable="@drawable/button"/>    

</selector>

Và đây là khai báo nút của tôi trong layout.xml của tôi

    <Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

Và cuối cùng đây là phong cách của tôi (nơi đặt màu văn bản mặc định của tôi)

<?xml version="1.0" encoding="utf-8"?>

 <resources>

     <style name="buttonStyle">
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">#282780</item>
      <item name="android:textSize">18sp</item>
     </style>

</resources>

Xin vui lòng giúp đỡ!

Câu trả lời:


249

Bạn cũng cần tạo một ColorStateListmàu văn bản xác định các trạng thái khác nhau.

Làm như sau:

  1. Tạo một tệp XML khác res\colorcó tên như sau text_color.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <!-- disabled state -->
      <item android:state_enabled="false" android:color="#9D9FA2" /> 
      <item android:color="#000"/>
    </selector>
  2. Trong của bạn style.xml, hãy đặt một tham chiếu đến text_color.xmltệp đó như sau:

    <style name="buttonStyle" parent="@android:style/Widget.Button">
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">@color/text_color</item>
      <item name="android:textSize">18sp</item>
    </style>

Điều này sẽ giải quyết vấn đề của bạn.


1
bạn không cần phải lưu tệp text_color.xml của mình trong / res / drawable (thay vì / res / color) nếu bạn tham khảo nó bằng @ drawable / text_color?
Erwan

1
@Erwan cảm ơn đã chỉnh sửa. thực sự nếu bạn thấy lịch sử chỉnh sửa, tôi đã đăng nó dưới dạng thư mục có thể vẽ được, và một số anh chàng tốt bụng đã chỉnh sửa nó thành màu nhưng quên cập nhật nó @colortrong buttyStyle. Bây giờ nó đã được cập nhật.
Adil Soomro

4
text_color.xmlkhông biên dịch (đối với tôi, ít nhất), trừ khi tôi đặt nó trong drawablethư mục, mà đòi hỏi phải có đề cập đến nó như@drawable/text_color
Al Lelopath

@mickey vâng, bạn nói đúng, vì vậy nếu bạn thấy lịch sử chỉnh sửa, ban đầu nó được đề xuất ở dạng có thể vẽ được, nhưng ai đó đã cập nhật nó vào thư mục màu, hiện tôi đã sửa nó.
Adil Soomro

1
@ D3LIC1OU5 nếu bạn nhìn vào các bình luận, cả hai cách đều được cho là hoạt động. Tôi vừa tham khảo tài liệu và colorlà thư mục chính xác cho Tài nguyên Danh sách Trạng thái Màu Bản chỉnh sửa của bạn được hoan nghênh.
Adil Soomro

7

1.Tạo một thư mục màu trong thư mục / res / và trong thư mục màu tạo trên xml:

text_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- disabled state --> 
<item android:state_enabled="false" android:color="#776678" /> 
 <item android:color="#ffffff"/>
</selector>

2.Bây giờ Tạo bố cục xml: -

 <Button

        android:id="@+id/button_search"

        android:layout_width="652dp"

        android:layout_height="48dp"

        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true"

        android:layout_marginTop="18dp"

        android:background="@android:color/transparent"

        android:text="Hello Bhaskar"

        android:textColor="@color/text_color_selector"/>  

4

Giải pháp dễ dàng nhất là đặt bộ lọc màu thành hình nền của và nút như tôi đã thấy ở đây

Bạn có thể làm như sau:

if ('need to set button disable')
    button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
else
    button.getBackground().setColorFilter(null);

Hy vọng tôi đã giúp ai đó ...


Đây là một cách hay để thực hiện việc này một cách linh hoạt, khi bạn không có hình nền của nút trước. Nhưng điều này không quan tâm đến màu văn bản.
Eran Goldin

-1
<Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

Tôi không thể thấy nút của bạn bị tắt trong xml bố cục của bạn. thêm cái này vào bố cục nút của bạn.

android:enabled="false"

vì vậy bố cục Nút của bạn sẽ

<Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:enabled="false"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

@ Aqif Hamid tôi làm điều đó programatically button.setEnabled (false) trong onCreat của tôi () phương pháp
Nouran H

-1

Bạn có thể tạo một danh sách màu

vị trí tập tin:

res/color/filename.xml

Tên tệp sẽ được sử dụng làm ID tài nguyên.

tài liệu tham khảo:

Trong Java: R.color.filename

Trong XML: @[package:]color/filename

cú pháp:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

Thí dụ:

Tệp XML được lưu tại res/color/button_text.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

XML bố cục này sẽ áp dụng danh sách màu cho Chế độ xem:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />

Tham khảo: Tham khảo danh sách màu

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.