Android: ปุ่ม textColor of disabled ในตัวเลือกไม่แสดง?


104

ฉันกำลังพยายามสร้างปุ่มด้วยตัวเลือกปุ่มของฉันสามารถมีสถานะดังต่อไปนี้:

  • เปิดใช้งาน / ปิดใช้งาน
  • กด / ไม่กด

ตามรัฐดังกล่าวข้างต้น. ฉันต้องการจัดการปุ่มของ:

  • สีข้อความ
  • ภาพพื้นหลัง

ปุ่มเริ่มต้นจากการที่ฉันปิดใช้งานดังนั้นควรมี textColor ที่ปิดใช้งานและพื้นหลังปุ่มปิดใช้ แต่ฉันสามารถเห็น textColor เริ่มต้น (ระบุในรูปแบบ) และไม่มีภาพพื้นหลัง!

นี่คือ button_selector.xml ตัวเลือกของฉัน

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

และนี่คือการประกาศปุ่มของฉันใน layout.xml ของฉัน

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

และในที่สุดนี่คือสไตล์ของฉัน (ที่ตั้งค่า textColor เริ่มต้นของฉัน)

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

กรุณาช่วย!

คำตอบ:


254

คุณต้องสร้างColorStateListสีสำหรับข้อความเพื่อระบุสถานะต่างๆ

ดำเนินการดังต่อไปนี้:

  1. สร้างไฟล์ XML อีกในบางสิ่งบางอย่างเช่นการตั้งชื่อres\colortext_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. ในของคุณstyle.xmlให้อ้างอิงถึงtext_color.xmlไฟล์ดังต่อไปนี้:

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

วิธีนี้ควรแก้ไขปัญหาของคุณ


1
คุณไม่จำเป็นต้องบันทึกไฟล์ text_color.xml ของคุณใน / res / drawable (แทนที่จะเป็น / res / color) หากคุณอ้างถึงโดย @ drawable / text_color?
Erwan

1
@Erwan ขอบคุณสำหรับการแก้ไข จริงๆแล้วถ้าคุณเห็นประวัติการแก้ไขฉันโพสต์ไว้ในโฟลเดอร์ที่วาดได้และผู้ชายที่ดีบางคนก็แก้ไขเป็นสี แต่ลืมอัปเดตเป็น@colorใน buttyStyle ตอนนี้อัปเดตแล้ว
Adil Soomro

6
text_color.xmlไม่รวบรวม (สำหรับฉันอย่างน้อย) เว้นแต่ฉันจะวางไว้ในdrawableโฟลเดอร์ซึ่งข้อกำหนดอ้างถึงว่า@drawable/text_color
Al Lelopath

@mickey ใช่คุณถูกต้องดังนั้นหากคุณเห็นประวัติการแก้ไขตอนแรกแนะนำเป็นแบบวาดได้ แต่มีคนอัปเดตเป็นโฟลเดอร์สีตอนนี้ฉันได้แก้ไขแล้ว
Adil Soomro

1
@ D3LIC1OU5 ถ้าคุณดูความคิดเห็นทั้งสองวิธีได้รับการบอกให้ทำงาน ฉันเพิ่งอ่านเอกสารและcolorเป็นโฟลเดอร์ที่ถูกต้องสำหรับColor State List Resourceยินดีต้อนรับการแก้ไขของคุณ
Adil Soomro

8

1. สร้างโฟลเดอร์สีใน / res / โฟลเดอร์และในโฟลเดอร์สีสร้างบน 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. ตอนนี้สร้างเค้าโครง 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

วิธีแก้ปัญหาที่ง่ายที่สุดคือการตั้งค่าฟิลเตอร์สีเป็นภาพพื้นหลังของปุ่มและตามที่ฉันเห็นที่นี่

คุณสามารถทำได้ดังนี้

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

หวังว่าฉันจะช่วยใครสักคน ...


นี่เป็นวิธีที่ดีในการดำเนินการนี้แบบไดนามิกเมื่อคุณไม่มีภาพพื้นหลังของปุ่มล่วงหน้า แต่นี่ไม่ได้ดูแลสีข้อความ
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" />

ฉันไม่เห็นการปิดใช้งานปุ่มของคุณใน xml เลย์เอาต์ของคุณ เพิ่มสิ่งนี้ในรูปแบบปุ่มของคุณ

android:enabled="false"

ดังนั้นรูปแบบปุ่มของคุณจะเป็น

<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 ฉันทำโดยใช้โปรแกรม button.setEnabled (false) ในเมธอด onCreat () ของฉัน
Nouran H

-2

คุณสามารถสร้างรายการสี

ตำแหน่งไฟล์:

res/color/filename.xml

ชื่อไฟล์จะถูกใช้เป็นรหัสทรัพยากร

การอ้างอิงทรัพยากร:

ใน Java: R.color.filename

ใน XML: @[package:]color/filename

ไวยากรณ์:

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

ตัวอย่าง:

ไฟล์ XML บันทึกที่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 เค้าโครงนี้จะใช้รายการสีกับมุมมอง:

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

อ้างถึง: การอ้างอิงรายการสี

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