我有tableview,在这里创建新行并手动设置它们的布局。在每一行中有3个主要元素:图像、标题的textview和描述的textview。为了将它们移动到我想要的位置,我使用了两种线性布局。我希望用于描述的textview(命名为descview)以两行显示文本,但是-它只显示一行。我做错了什么或者调用了什么方法,所以视图用两行显示文本。如果它按字(而不是字符)包装文本,那就太完美了。
我现在的截图:
创建新行的代码(“new”是保存信息(文本、图像等)的对象:

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;
}

最佳答案

我的一些应用程序也有类似的设置,但就我个人而言,有了这样的设置,我将放弃2个线性布局,并使用一个相对的布局,我将尝试摆脱:

descView.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
descView.setLines(2);

然后,我将相对地定位这些项,并将文本视图的宽度设置为“填充父项”,其高度设置为包装内容。
你可以得到一个更统一的外观与一个相对的延长:
将imageview设置为align_parent_left,在左右两边给它一个x-dip的边距。
然后添加标题textview并将其与imageview的右侧对齐。
然后添加描述textview并将其与imageview右侧和标题下方对齐。
既然你是通过代码来完成的,我会更进一步,因为它们看起来都是相同的字体样式(标题只是粗体),并使其成为两个标题/说明的单一文本视图,然后使用:
 textView.setText(Html.fromHtml("<b>" + item.getTitle() + "</b><br>" + item.getDescription()));

只需确保你给所有东西一个唯一的ID来链接,并且不要与还没有显示的东西对齐,否则你会抛出一个NPE或者它根本不会显示。
但是,我将使用relativelayout在一天的线性布局中列出包含多个组件的项。
希望有帮助~

07-24 09:48
查看更多