Tombol khusus Android; mengubah warna teks

251

Saya membuat tombol yang mengubah latar belakang yang dapat digambar di berbagai negara bagian, dengan cara ini:

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

Masalahnya di sini adalah saya juga mencoba mengubah textColor seperti yang saya lakukan dengan drawable tetapi saya tidak bisa. Saya sudah mencoba android: textColor dan android: color tetapi yang pertama tidak berfungsi sementara yang kedua mengubah latar belakang saya.

Kode selanjutnya adalah bagian dari tata letak saya. Mengenai warna teks itu hanya bekerja untuk warna teks keadaan normal, sehingga tidak mengubahnya ke yang putih sambil ditekan

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

Adakah yang punya petunjuk?

dwbrito
sumber

Jawaban:

580

Buat warna stateful untuk tombol Anda, seperti yang Anda lakukan untuk latar belakang, misalnya:

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

Tempatkan xml dalam file di folder res / drawable yaitu res / drawable / button_text_color.xml. Kemudian cukup atur drawable sebagai warna teks:

android:textColor="@drawable/button_text_color"
Konstantin Burov
sumber
15
Perhatikan bahwa (bagi saya, setidaknya) ada bug di mana keadaan "normal" (<item android: color = "# ffffff" /> dalam jawaban Anda) harus ditempatkan di akhir file seperti pada jawaban Anda. Menempatkan keadaan normal di bagian atas file (di atas negara bagian lainnya) akan menghentikan pemilih agar tidak berfungsi.
Chris Blunt
58
itu bukan bug. Begitulah cara pemilihan negara seharusnya bekerja. Ini bukan pertandingan terbaik , malah pertandingan pertama yang cocok akan berhasil.
superjos
Apakah Anda bagaimana melakukan ini dengan nilai integer? Saya mencoba melakukan sesuatu yang mirip dengan padding teks.
elimirks
menghabiskan beberapa waktu mencoba ini tidak berhasil, kemudian menemukan bahwa saya masih menetapkannya ke properti latar belakang alih-alih properti textcolor. Tidak terbiasa melihat warna teks bisa ditarik!
Odaym
20
Ini lebih baik jika pemilih warna terletak di res/colorfolder. Dan saat menelepon, gunakan:android:textColor="@color/button_text_color"
Justin
16

Cara lain untuk melakukannya adalah di kelas Anda:

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);
Michael Yaworski
sumber
1
Ini akan mengubah warna teks pada tombol, tetapi akan tetap warna itu selama keadaan tombol yang berbeda (misalnya ditekan). Dalam sebagian besar skenario, ketika warna latar belakang tombol berubah selama keadaan, itu juga diinginkan untuk mengubah warna teks tombol juga, ini adalah di mana jawaban @Konstantin Burov berguna.
Dzhuneyt
1
Ini tidak menjawab pertanyaan awal. Pertanyaannya adalah tentang bagaimana mendefinisikan warna berbasis negara ke tampilan teks seperti Anda dapat mengatur drawable berbasis negara.
alkemis
4

ok sangat sederhana pertama pergi ke 1. res-valuse dan buka colors.xml 2. copy 1 dari teks yang ditentukan mereka misalnya # FF4081 dan ubah nama misalnya saya berubah menjadi putih dan ubah nilainya misalnya saya ubah ke #FFFFFF untuk nilai putih seperti ini

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

kemudian di dalam tombol Anda tambahkan baris ini

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

ok b3 adalah nama tombol saya jadi mengubah nama tombol Anda semua yang lain akan sama jika Anda menggunakan warna putih jika Anda mengubah warna yang berbeda kemudian mengubah putih ke nama warna Anda, tetapi pertama-tama Anda harus menentukan warna dalam warna. xml seperti yang saya jelaskan di pont 2

MencariKnowleges
sumber
1

Mengubah warna teks tombol

Karena metode ini sekarang sudah usang

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

Saya menggunakan yang berikut ini:

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));
Gjoko Bozinov
sumber
0

Gunakan getColorStateListseperti ini

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

dari pada getColor

setTextColor(resources.getColor(R.color.button_states_color))
Li Jin
sumber