среда, апреля 18, 2012

TextView, ellipsize, maxLines и странности

Есть у меня такой TextView:

    [TextView
        android:id="@+id/news_item_text"
        style="@style/text_plain_embossed"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:ellipsize="end"
        android:maxLines="4"
        android:text="Здесь текст новости, который может быть очень очень очень длинным и не помещаться на одну строку. Шла Маша по шоссе и сосала сушку. Чем дальше в лес, тем толще партизаны. Странный аттрактор не имеет выхода."/]

Всё, что я от него хочу, это:

  • чтобы длинный текст отображался бы в 4 строки (android:maxLines="4" )
  • чтобы в конце текста, если он не помещается целиком, добавлялось бы многоточие ( android:ellipsize="end")
И вот тут начинается самое интересное. В разных версиях (я тут вначале опечатался и набрал слово "весрия", но иногда хочется именно так и оставить) Андроида результат отображения этого представления получается весьма разный. Изображения сняты из эмулятора, но на устройствах они получаются такими же (проверялось на HTC Desire (2.3), Samsung Galaxy Tab 7.7 (3.2) и на Samsung Galaxy S II (4.0)).

Android 2.2

Android 3.2


Android 4.0

Видно, что:
Android 2.2 - количество строк - плохо, многоточие - хорошо.
Android 3.2 - количество строк - хорошо, многоточие - плохо
Android 4.0 - количество строк - хорошо, многоточие - хорошо.

При этом, в если убрать android:ellipsize="end", то в 2.2 получается вот так:
Android 2.2, без ellipsize

И как с этим бороться?!



пятница, апреля 13, 2012

DIP - Debugging Inversion Principle


Не надо находить баги в приложении.
Они сами найдут тебя.

пятница, апреля 06, 2012

Отформатировать копейки в рубли с разделителями групп и с точкой

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


private static DecimalFormat currencyFormat;
static {
     currencyFormat = new DecimalFormat();
     DecimalFormatSymbols dfs = currencyFormat.getDecimalFormatSymbols(); 
     dfs.setDecimalSeparator('.'); 
     currencyFormat.setDecimalFormatSymbols(dfs);
     currencyFormat.setMinimumFractionDigits(2); 
     currencyFormat.setMaximumFractionDigits(2); 
     currencyFormat.setGroupingSize(3);
     currencyFormat.setGroupingUsed(true);
}

int amount = ...
double roubles = (double) amount / 100;
return currencyFormat.format( roubles );