Подтвердить что ты не робот

Как определить жирный шрифт в селекторе Android?

В моем приложении для Android у меня есть несколько кнопок радиона, которые должны иметь другой цвет и смело при выборе. Мне удалось получить разный цвет, указав файл radio_pick_color.xml в drawable:

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

и ссылаясь на этот файл в моем файле main.xml:

android:textColor="@drawable/radio_picker_color"

Теперь я хочу сделать то же самое, чтобы текст был полужирным. Поэтому я сделал еще один файл с именем radio_picker_style.xml, в котором я хотел бы определить стиль следующим образом:

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

К сожалению, eclipse жалуется, что идентификатор ресурса не найден для атрибута 'style' в пакете 'android'. Я также пробовал с android: textStyle, но изнутри элемента селектора он также не знает атрибут android:textStyle.

Кто-нибудь знает, как я могу выбрать выделенный переключатель в полужирный?

== EDIT == Соответствующая часть моего файла 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>

И radio_picker_style.xml, который я пытался поместить в папку с возможностью переноса, но которая говорит, что "Атрибут не имеет префикса пространства имен Android":

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

Ответ 1

Стиль не имеет селектора: с помощью одного из них либо будет разбит сборка/время выполнения, либо не будет иметь эффекта и будет игнорироваться. Есть только два типа селекторов: для цветов и для чертежей.

Таким образом, существует только один вариант: применять полужирный стиль "на лету", возможно, прослушивая изменения состояния проверки.

=== Пример ===

MainActivity.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);
    }
}

Макет/ 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>

drawable/ radio_picker_color.xml [Я изменил цвета, которые вы использовали (они очень слабы), в вопросе с "# 0099CC" для демонстрационных целей]:

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

Результат

with bold effect

without bold effect

Надеюсь, что это поможет.

Ответ 2

Вы можете сделать что-то вроде этого

Создайте свой собственный стиль, например. mystyle.xml

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

Теперь назовите это в своем селекторе следующим образом

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

Ответ 3

это может помочь

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

в селекторе

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

Ответ 4

Используйте

android:textStyle = "bold"