2013-10-01 8 views
13

W mojej aplikacji na Androida mam kilka przycisków radionowych, które powinny uzyskać inny kolor i stać się pogrubione po wybraniu. Udało mi się uzyskać inny kolor od zdefiniowania radio_pick_color.xml plik w odkształcalne:Jak zdefiniować pogrubienie w selektorze Androida?

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- checked --> 
    <item android:state_checked="true" 
      android:color="#00FF15" /> 
    <!-- default --> 
    <item android:color="#4000FF" /> 
</selector> 

i przedstawieniu tego pliku w moim pliku main.xml:

android:textColor="@drawable/radio_picker_color" 

teraz chcę zrobić to samo, co pogrubienie tekstu. Więc zrobiłem kolejny plik o nazwie radio_picker_style.xml, w którym chciałem zdefiniować styl tak:

<item android:state_checked="true" 
     android:style="bold" /> 

Niestety zaćmienie skarg, że żaden identyfikator zasobu może być znalezione dla atrybutu „styl” w pakiecie „android”. Próbowałem też z Androidem: textStyle, ale z poziomu elementu selektora nie zna też atrybutu android:textStyle.

Czy ktoś wie, w jaki sposób można uzyskać wytłuszczony zaznaczony przycisk opcji?

== EDIT == Odpowiednia część mojego pliku main.xml:

<RadioGroup 
    android:id="@+id/radioGroup2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <RadioButton 
     android:id="@+id/option_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:checked="true" 
     android:text="@string/option_1" 
     android:textColor="@drawable/radio_picker_color" 
     /> 

    <RadioButton 
     android:id="@+id/option_2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/option_2" 
     android:textColor="@drawable/radio_picker_color" 
     /> 
</RadioGroup> 

A radio_picker_style.xml które starałem się umieścić w folderze rozciągliwej, ale który mówi „Atrybut brakuje Android namespace prefix ":

<?xml version="1.0" encoding="utf-8"?> 
<style name="mystyle"> 
    <item name="android:textColor">#ffffff</item> 
    <item name="android:textStyle">bold</item> 
</style> 
+0

możliwy duplikat [dostosowanego przycisku Android; zmieniając kolor tekstu] (http://stackoverflow.com/questions/4692642/android-customized-button-changing-text-color) – ozbek

+1

@shoerat - To absolutnie nie jest dublowane pytanie, które sugerujesz. Wiem, jak ustawić kolory, ale odczytywanie tekstu pogrubionego jest tym, czego mi się nie udaje. Czy wiesz, jak zrobić pogrubiony tekst? – kramer65

+0

Jedynym wykonalnym rozwiązaniem, które widzę, jest zrobienie tego w czasie wykonywania ... – ozbek

Odpowiedz

11

Styl nie ma wyboru: albo stosując jeden będzie złamać Build/czas pracy lub nie będzie miało wpływu i być zaniedbywane. Istnieją tylko dwa typy selektorów: dla kolorów i dla rysunków.

Jest więc tylko jedna opcja: stosuj pogrubiony styl w locie, prawdopodobnie, słuchając, aby sprawdzić zmiany stanu.

=== Przykład ===

główną działalność.java:

package com.example.radiobuttontest; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Typeface; 
import android.widget.CompoundButton; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 

public class MainActivity extends Activity implements CompoundButton.OnCheckedChangeListener { 
    private RadioGroup mGroup2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mGroup2 = (RadioGroup)findViewById(R.id.radioGroup2); 

     RadioButton button1 = (RadioButton)findViewById(R.id.option_1); 
     button1.setOnCheckedChangeListener(this); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     RadioButton checked = (RadioButton)findViewById(mGroup2.getCheckedRadioButtonId()); 
     checked.setTypeface(Typeface.DEFAULT_BOLD); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     buttonView.setTypeface(isChecked ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); 
    } 
} 

układ/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/radioGroup2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <RadioButton 
     android:id="@+id/option_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:checked="true" 
     android:text="@string/option_1" 
     android:textColor="@drawable/radio_picker_color" /> 

    <RadioButton 
     android:id="@+id/option_2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/option_2" 
     android:textColor="@drawable/radio_picker_color" /> 

</RadioGroup> 

odkształcalne/radio_picker_color.xml[Zmieniłem kolory zostały użyte (są one bardzo słaby) w pytaniu z "# 0099CC" dla celów demonstracyjnych]:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- checked --> 
    <item android:state_checked="true" 
     android:color="#0099CC" /> 
    <!-- default --> 
    <item android:color="#0099CC" /> 
</selector> 

Wynik:

with bold effect

without bold effect

Nadzieja to pomaga.

+0

Awesome, thanks! – kramer65

-3

Zastosowanie

android:textStyle = "bold" 
+1

Przepraszam, powinienem wspomnieć, że to również nie działa, gdy znajdujesz się w selektorze. Mówi też, że nie ma on atrybutu textStyle. – kramer65

-2

to może pomóc

<style name="Style"> 
<item name="android:textSize">9px</item> 
<item name="android:gravity">center_horizontal</item> 
<item name="android:textColor">#fff</item> 
<item name="android:textStyle">bold</item> 

selektor

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_focused="true" 
    android:state_pressed="false" 
    style="@style/Style" /> </selector> 
+0

Stworzyłem radio_selected.xml i copy wkleiłem tam twój kod, ale mówi on, że "Atrybutowi brakuje prefiksu przestrzeni nazw Androida", więc zmieniłem wszystkie wystąpienia "name" na "android: name", ale nadal jest napisane że w atrybucie brakuje prefiksu przestrzeni nazw Android. Ponadto mówi również "Nieoczekiwany tekst znaleziony w pliku układu: #fff". Jakieś pomysły, co tu robię źle? – kramer65

+0

spróbuj zmienić tę nazwę # FFF – vish

+0

masz na myśli zmianę #fff na #FFF? To nie robi żadnej różnicy. Nadal mówi: "Atrybutowi brakuje prefiksu przestrzeni nazw Androida". Jakieś inne pomysły? – kramer65

-1

można zrobić coś takiego

Tworzenie własnego stylu na przykład mystyle.xml

<style name="mystyle"> 
    <item name="android:textColor">#ffffff</item> 
    <item name="android:textStyle">bold</item> 
</style> 

Teraz nazywają to w selektorze jak ten

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
     android:state_checked="true" 
     style="@style/mystyle" /> 
</selector> 
+1

Utworzono radio_selected.xml i kopia wkleiła tam twój kod, ale mówi, że "Atrybutowi brakuje prefiksu przestrzeni nazw Androida", więc zmieniłem wszystkie wystąpienia "nazwa" do "android: nazwa", ale nadal mówi, że w atrybucie brakuje przedrostka przestrzeni nazw Android. Ponadto mówi również "Nieoczekiwany tekst znaleziony w pliku układu: #fff". Jakieś pomysły, co tu robię źle? – kramer65

+0

zamieść kompletny xml –

+0

Dodałem trochę więcej kodu do mojego pytania. Czy to ci więcej mówi? – kramer65

Powiązane problemy