RatingBar с пользовательским стилем не отображается

Я создал собственный стиль для RatingBar, следуя http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ Это отлично работает, когда я объявляю свою RatingBar в своем XML-файле. Однако мне также нужно создать динамические рейтинговые панели в моем java-коде, вот где я это делаю:

for (int i=0; i<Math.min(10, n); i++){
                TableRow row = new TableRow(RegisterActivity.this);
                TextView t = new TextView(RegisterActivity.this);     
                t.setText((i+1) + ". " + myCList.get(i) + " / " + myWList.get(i) + " (" + mySList.get(i) + ")");
                RatingBar c = new RatingBar(RegisterActivity.this, null, R.style.foodRatingBar);
                Double d=(Double) myRList.get(i);
                c.setRating(d.floatValue());
                c.setClickable(false);
                row.addView(t);
                row.addView(c);
                table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            }

Проблема в том, что рейтинговые панели не отображаются, когда я использую их таким образом. Это мой собственный стиль:

<style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/food_ratingbar_full</item>
    <item name="android:minHeight">50dp</item>
    <item name="android:maxHeight">50dp</item>
</style>

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


person splinter123    schedule 25.09.2013    source источник
comment
похоже, что R.style.foodRatingBar (или любой другой пользовательский стиль) не распознается конструктором RatingBar, в то время как стандартный android.R.attr.ratingbarsmall распознается. Мне это кажется очень странным!!   -  person splinter123    schedule 26.09.2013


Ответы (1)


Я не знаю, почему это происходит, но в качестве обходного пути вы можете объявить свой RatingBar в макете и раздуть его перед добавлением:

<RatingBar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/foodRatingBar" />

RatingBar c = (RatingBar) iflater.inflate(R.layout.rating_bar, row, false);
person Bracadabra    schedule 25.09.2013
comment
это не совсем удобно, потому что я с самого начала не знаю, сколько полос рейтинга мне понадобится. Они помещаются внутри полосы прокрутки, их может быть 2 или 30... - person splinter123; 26.09.2013
comment
Вы можете надуть бар в цикле for, просто измените создание бара на надувание. Для некоторых виджетов это самый простой способ применить стиль. - person Bracadabra; 26.09.2013
comment
Спасибо, это работает! Однако не совсем так, как есть, мне все равно нужно добавить row.addView(c) в конце, что мне кажется странным, поскольку команда inflate уже должна позаботиться об этом... - person splinter123; 26.09.2013
comment
Вам все еще нужно добавить row.addView(c), потому что третий параметр в inflate(R.layout.rating_bar, row, false) говорит, что не следует добавлять завышенное представление. Вы можете удалить его. - person Bracadabra; 26.09.2013