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?

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"

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

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


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

0

Gunakan getColorStateListseperti ini

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

dari pada getColor

setTextColor(resources.getColor(R.color.button_states_color))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.