Лентата за оценка с персонализиран стил не се показва

Създадох свой персонализиран стил за 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

Първо се нуждаете от библиотечните файлове на Irvine (Kernel32.Lib, User32.Lib, Irvine32.lib, Irvine32.inc), които можете да изтеглите от неговия сайт, т.е. изтеглете този файл и го инсталирайте: http://www.kipirvine.com/asm/examples/Irvine_7th_Edition.msi.

Сега вмъквате няколко реда в началото на вашата програма:

includelib C:\full\path\to\Kernel32.Lib
includelib C:\full\path\to\User32.Lib
includelib C:\full\path\to\Irvine32.lib

; include C:\full\path\to\Irvine32.inc

Редът include... е за по-късна употреба и засега е коментиран.

- person splinter123; 26.09.2013
comment
Можете да раздуете лентата в for цикъл, просто променете създаването на лента на надуване. За някои джаджи е най-лесният начин да приложите стил. - person Bracadabra; 26.09.2013
comment
Благодаря работи! Въпреки това не точно както е, все още трябва да добавя row.addView(c) в края, което ми се струва странно, тъй като командата за надуване вече трябва да се погрижи за това... - person splinter123; 26.09.2013
comment
Все още трябва да добавите row.addView(c), защото третият параметър в inflate(R.layout.rating_bar, row, false) казва, че не добавяйте раздут изглед. Можете да го премахнете. - person Bracadabra; 26.09.2013