以编程方式制作的“列表”的结构:
ScrollView
->LinearLayout (itemRow)
-->LinearLayout (itemTitle)
--->TextView (title)
--->TextView (price)
--> (other layouts)...
... and start again with itemRow
如果正确包装标题TextView文本,则不会显示价格 (免费) 。
代码:
LayoutParams p=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT);
TextView title=new TextView(ctx);
title.setText(e.getTitle());
title.setTextAppearance(ctx, R.style.eList_Title);
TextView price=new TextView(ctx);
price.setPadding(2, 1, 1, 1);
price.setSingleLine(true);
if (e.getPrice().doubleValue()==0) {
price.setText('('+getString(R.string.e_free)+')');
price.setTextColor(colorGreenFree);
} else {
price.setText('('+NumberFormat.getCurrencyInstance().format(e.getPrice())+')');
price.setTextColor(Color.RED);
}
LinearLayout llTitle=new LinearLayout(ctx);
llTitle.setBackgroundResource(R.drawable.gradient_silver_red);
llTitle.setLayoutParams(llpMatchParentWrapContent);
llTitle.addView(title);
llTitle.addView(price);
注意:如果price.setSingleLine(true);删除我得到这个结果:
Pd积: 我已尝试过RelativeLayout,并遇到同样的问题。
答案 0 :(得分:1)
TextView太宽,正在推动右边的第二个。
实现这一目标的一种更简单的方法可能是使用单个TextView和一些HTML为'免费'着色。
textView.setText(Html.fromHtml(String.format("%s <font color="#00FF00">(%s)</font>", name, gratis)));
答案 1 :(得分:0)
感谢Alex的回答,终于解决了这个问题:
Spannable titleSpan= null;
String strPrice=null;
if (e.getPrice().doubleValue()==0) {
strPrice='('+getString(R.string.e_free)+')';
titleSpan=new SpannableString(e.getTitle()+strPrice);
titleSpan.setSpan(new ForegroundColorSpan(Color.GREEN), e.getTitle().length(), e.getTitle().length()+strPrice.length(), Spannable.SPAN_INTERMEDIATE);
} else {
strPrice='('+NumberFormat.getCurrencyInstance().format(e.getPrice())+')';
titleSpan=new SpannableString(e.getTitle()+strPrice);
titleSpan.setSpan(new ForegroundColorSpan(Color.RED), e.getTitle().length(), e.getTitle().length()+strPrice.length(), Spannable.SPAN_INTERMEDIATE);
}
title.setText(titleSpan);