3

我有 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;
}
4

3 回答 3

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 的 RIGHT 对齐。

然后添加您的描述 TextView 并将其对齐到 ImageView 的右侧和标题下方。

既然你是通过代码来做的,我会更进一步,因为看起来它们都是相同的字体样式(标题只是粗体)并使其成为标题/描述的单个 TextView,然后只需使用:

 textView.setText(Html.fromHtml("<b>" + item.getTitle() + "</b><br>" + item.getDescription())); 

只需确保为所有内容提供一个唯一的 ID 以链接到,并且不要与尚​​未显示的内容对齐,否则您将抛出 NPE 或根本无法正确显示。

但是,是的,我将在任何一天使用 RelativeLayout 来列出具有多个组件的项,而不是 LinearLayout。

希望有帮助~

于 2012-05-30T17:56:40.147 回答
0

如果您的 TableRow 只有 1 列,那么我认为android:shrinkColumns="0"您的TableLayout中的设置将帮助您解决此问题。


将布局参数添加到您的 TableRow :

tr.setLayoutParams(new LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
       TableLayout.LayoutParams.WRAP_CONTENT));
于 2012-04-26T12:52:28.877 回答
0

我将最大行数设置为某个数字,并通过将字符计算为第一个点来设置字符长度。所以现在应用程序知道要显示多少信息并且不会出现这样的错误

于 2012-06-20T07:56:14.027 回答