Android:セレクターの無効なボタンのtextColorが表示されない?


97

セレクターを使用してボタンを作成しようとしていますが、ボタンには次の状態があります。

  • 有効/無効
  • 押された/押されていない

上記の状態によると。ボタンを操作する必要があります:

  • テキストの色
  • 背景画像

ボタンは無効になっているところから始まるので、無効な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>

助けてください!

回答:


249

また、ColorStateListさまざまな状態を識別するためのテキストの色を作成する必要があります。

以下をせよ:

  1. res\colorという名前の別のXMLファイルを作成します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. に、次のよう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
@ drawable / text_colorで参照する場合、text_color.xmlファイルを(/ res / colorではなく)/ res / drawableに保存する必要はありませんか?
Erwan 2013年

1
@Erwan訂正ありがとうございます。実際に編集履歴が表示されたら、私はそれを@colorドローアブルフォルダーとして投稿しました。ある素敵な人がそれをカラーに編集しましたが、buttyStyleでに更新するのを忘れていました。更新されました。
Adil Soomro、2013年

4
text_color.xml私はそれを配置しない限り、(少なくとも、私のために)コンパイルできないdrawableとして、それを参照する必要があり、フォルダ、@drawable/text_color
アルLelopath

@mickeyはい、正しいです。編集履歴が表示された場合、最初はドローアブルで提案されていましたが、誰かがカラーフォルダーに更新したため、修正しました。
Adil Soomro、2015

1
@ D3LIC1OU5コメントを見ると、両方の方法が機能するように指示されています。ドキュメントを調べたところcolorColor State List Resourceの正しいフォルダです。編集は大歓迎です。
Adil Soomro、2015

7

1. / res /フォルダーとxmlに作成されたcolorフォルダーにcolorフォルダーを作成します。

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

私が誰かを助けたことを願っています...


これは、ボタンの背景画像を事前に用意していない場合に、これを動的に行うのに適した方法です。しかし、これはテキストの色を処理しません。
エランゴールディン2014

-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プログラムでそれを行うonCreat()メソッドでbutton.setEnabled(false)
H

-1

カラーリストを作成できます

ファイルの場所:

res/color/filename.xml

ファイル名はリソースIDとして使用されます。

リソース参照:

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.