Androidカスタマイズボタン。テキストの色を変更する


251

このように、さまざまな状態で背景のドローアブルを変更するボタンを作成しました。

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

ここでの問題は、ドローアブルの場合と同じようにtextColorも変更しようとしていることですが、それができません。私はすでにandroid:textColorとandroid:colorを試しましたが、秒数が背景を変更している間、最初のものは機能しません。

次のコードは私のレイアウトの一部です。テキストの色については、通常の状態のテキストの色に対してのみ機能するため、押している間は白の色に変わりません。

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

誰か手がかりはありますか?

回答:


579

たとえば、背景の場合と同じように、ボタンにステートフルカラーを作成します。

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

xmlをres / drawableフォルダーのファイル(res / drawable / button_text_color.xml)に配置します。次に、ドローアブルをテキストの色として設定します。

android:textColor="@drawable/button_text_color"

15
(少なくとも、私にとっては)「通常の」状態(回答の<item android:color = "#ffffff" />)を回答のようにファイルの最後に置く必要があるというバグがあることに注意してください。通常の状態をファイルの先頭(他の状態の上)に配置すると、セレクターの動作が停止します。
クリスブラント

58
バグではありません。これは、状態選択が機能するための方法です。これは最適な組み合わせではありませんが、最初に適合したものが適合します。
superjos

整数値でこれを行う方法はありますか?私はテキストのパディングで同様のことをしようとしています。
elimirks 2014年

これを無駄にしようとしばらく時間を費やしましたが、それでもまだtextcolorプロパティではなくbackgroundプロパティに設定していることがわかりました。textcolorがドローアブルを取るのを見るのに慣れていません!
Odaym 2014

20
カラーセレクターがres/colorフォルダー内にある場合は問題があります。そしてコールは、使用している場合:android:textColor="@color/button_text_color"
ジャスティン

16

それを行う別の方法はあなたのクラスです:

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
これはボタンのテキストの色を変更しますが、ボタンのさまざまな状態(たとえば、押された状態)の間はその色を維持します。ほとんどのシナリオでは、状態の間にボタンの背景色が変わると、ボタンのテキストの色も変更することが望まれるため、@ Konstantin Burovの答えが役に立ちます。
Dzhuneyt

1
これは元の質問には答えません。問題は、状態ベースのドローアブルを設定できるのと同じように、テキストビューに状態ベースの色を定義する方法についてです。
錬金術師

4

わかりました。最初に1に移動します。res-valuseを開き、colors.xmlを開きます。2。定義されたテキストの1つをコピーします。たとえば、#FF4081に変更し、インスタンスの名前を白に変更し、インスタンスの値を#FFFFFFに変更します。このような白の値

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

次に、ボタンの中にこの行を追加します

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

ok b3は私のボタンの名前なので、urボタンの名前を変更すると、他の色を変更して白を自分の色の名前に変更した場合に、他のすべては同じになりますが、最初にその色を色で定義します。私がpont 2で説明したようなxml


1

ボタンのテキスト色を変更する

このメソッドは廃止されたため

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

私は以下を使用します:

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

0

getColorStateListこのように使う

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

の代わりに getColor

setTextColor(resources.getColor(R.color.button_states_color))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.