2015-04-18 5 views
0

Я прочитал из файла много данных, и я хотел бы создать ui из этого. Я создаю много textview и radobutton, но когда я пытаюсь это на устройстве или эмуляторе, я получаю белый текст повсюду, почему?Почему динамический цвет радиообъектива белый?

Если я создаю радиокнопку в xml, это черный цвет! но мой динамический переключатель цвет белый :(

public void buildScreen(){ 

    TextView header = new TextView(context); 
    header.setText(dataManager.getHeaderString()+"\n"+dataManager.getqType()); 
    dataManager.setMainTable(tbl); 

    TableRow row; 
    for (Map.Entry<String, SimpleQuestionModel> entry : dataManager.getqDict().entrySet()){ 
     String question = entry.getKey(); 
     SimpleQuestionModel model = entry.getValue(); 

     row = new TableRow(context); 
     TextView tv = new TextView(context); 
     tv.setText(model.getQuestion()); 
     dataManager.getMainTable().addView(tv); 

     RadioGroup rg = new RadioGroup(context); 
     rg.setOrientation(RadioGroup.VERTICAL); 
     for (int j=0;j<model.getAnswers().size();j++){ 
      RadioButton rb = new RadioButton(context); 
      rb.setText(model.getAnswers().get(j)); 

      rg.addView(rb); 
     } 
     dataManager.getqAndA().put(tv, rg); 
     row.addView(rg); 
     dataManager.getMainTable().addView(row); 

    } 

} 

Вот мой класс constuctor:

public UIBuilder(Context context, TableLayout tbl) { 
    this.context = context; 
    this.tbl = tbl; 
    dataManager = DataManager.getInstance(); 
    DataReader dataReader = new DataReader(); 
    dataReader.readDataFromFile("first.txt"); 
} 

И я называю этот класс, как это:

builder = new UIBuilder(getApplicationContext(), tbl); 

    builder.buildScreen(); 

и TBL является TableLayout в моем xml

+0

Просьба вставить код, в котором вы создаете «динамический переключатель». – CommonsWare

+0

обновил мой вопрос – just

+0

У вас есть элемент данных с именем 'context'. Как вы его инициализируете? – CommonsWare

ответ

4

Всегда используйте Activity как Context при создании виджетами, если вы хотите, чтобы ваша тема была выполнена. Использование любого другого Context будет использовать тему системы запаса.

This blog post от Dave Smith объясняет, когда следует использовать Context, включая упоминание этой проблемы.

+1

В частности, используйте« Контекст » 'для контейнера, в котором будет размещен виджет. Например, панель инструментов API 21+ часто будет иметь другую тему (через« ContextThemeWrapper ») из остальной части вашей активности.« AlertDialog »также имеет отдельную тему от активности. – alanv

+0

не уверен, почему этот ответ не стоит многого. –

Смежные вопросы