android-layout - 包装 1rst textView时,Android ( 编程程序) 布局未显示 2nd 个 textView

  显示原文与译文双语对照的内容

以编程方式制作的"列表"结构:


ScrollView
->LinearLayout (itemRow)
-->LinearLayout (itemTitle)
--->TextView (title)
--->TextView (price)
--> (other layouts)...
... and start again with itemRow

正确包装标题TextView文本时,价格为 ( 免费的) shown 。

enter image description here

代码:


 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); 被删除,我得到这个结果:

enter image description here

p 。d: 我尝试了,并且有相同的问题。

时间:

TextView太宽,正在向右推动第二个方向。

更容易获得这个的方法可以能是使用单一的tmodel和一些HTML来颜色化'免费的'。


textView.setText(Html.fromHtml(String.format("%s <font color="#00FF00">(%s)</font>", name, gratis)));

感谢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);

...