我有tableview,在那里创建新行并手动设置它们的布局。在每一行中有3个主要元素:图像,标题的textview和描述的textview。要将它们移动到我想要的位置,我使用两个线性布局。我希望textview的描述(命名为descView)显示两行代码,但相反 - 它只显示一行。我做错了什么或者调用了什么方法,因此视图以两行显示文本。如果它逐字逐句(不是字符)包装将是完美的。
我现在拥有的屏幕截图:
创建新行的代码('新'是我保存信息的对象(文本,图像等)):
private TableRow formRow(New item) {
//prepare table row parameters
TableRow tr = new TableRow(this);
tr.setBackgroundResource(R.drawable.results_table_row);
tr.setVerticalGravity(Gravity.CENTER);
tr.setTag(item.getTitle());
tr.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_UP) {
v.setBackgroundResource(R.drawable.results_table_row);
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setBackgroundResource(R.drawable.results_table_row_touched);
}
return true;
}
});
//create main layout for content
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.HORIZONTAL);
//add image
int imageID = Integer.parseInt(item.getPictureSrc());
ImageView image = new ImageView(this);
image.setImageResource(imageID);
image.setPadding(5, 5, 5, 5);
layout.addView(image);
//add another layout for title and description
LinearLayout descLayout = new LinearLayout(this);
descLayout.setOrientation(LinearLayout.VERTICAL);
descLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//add title
TextView titleView = new TextView(this);
titleView.setText(item.getTitle());
titleView.setPadding(5, 0, 0, 0);
titleView.setTextAppearance(this, R.style.TableRowStyle_ChildTitle);
titleView.setLines(1);
descLayout.addView(titleView);
//add description
TextView descView = new TextView(this);
descView.setText(item.getDescription());
descView.setPadding(5, 0, 0, 0);
descView.setTextAppearance(this, R.style.TableRowStyle_ChildText);
descView.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
descView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//descView.setEllipsize(TextUtils.TruncateAt.END);
descView.setLines(2);
descLayout.addView(descView);
//add description layout to main layout
layout.addView(descLayout);
//finally, add layout to row
tr.addView(layout);
return tr;
}
答案 0 :(得分:1)
对于我的一些应用程序,我有类似的设置,但就个人而言,我会废弃2个LinearLayouts并为此使用一个RelativeLayout,我会尝试摆脱:
descView.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
descView.setLines(2);
然后我将项目相对于彼此放置,并将具有该TextView的宽度的边设置为FILL_PARENT,将其高度设置为WRAP_CONTENT。
使用RelativeLayout可以获得更加统一的外观:
使用ALIGN_PARENT_LEFT设置ImageView,在左右两侧给它一个x-dip边距。
然后添加Title TextView并将其对齐到ImageView的右侧。
然后添加Description TextView并将其对齐到ImageView的右侧和标题下方。
由于你是通过代码完成的,所以我会更进一步,因为看起来它们都是相同的字体样式(标题只是粗体)并且使它成为标题/描述的单个TextView,然后只需使用:
textView.setText(Html.fromHtml("<b>" + item.getTitle() + "</b><br>" + item.getDescription()));
请确保您为所有内容提供了一个唯一的ID链接,并且不要与尚未显示的内容对齐,否则您将抛出NPE,或者它根本无法显示。
但是,我会使用RelativeLayout来列出任何一天在LinearLayout上有多个组件的项目。
希望有所帮助〜
答案 1 :(得分:0)
如果您的TableRow只有1列,那么我认为在 TableLayout 中设置android:shrinkColumns="0"
将有助于您解决此问题。
将布局参数添加到TableRow:
tr.setLayoutParams(new LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
答案 2 :(得分:0)
我将最大线设置为某个数字,并通过计算第一个点的字符来设置字符长度。所以现在应用程序知道要显示多少信息并且没有出现这样的错误