TextView没有在TableRow

时间:2017-09-10 09:53:52

标签: android android-layout

我试图使我的TextViews椭圆化(它们位于TableRow内的LinearLayout中),但是,除非我手动设置maxEms(我不想这样做),否则它们不能正确地进行椭圆化。注意:整个xml(除了TableLayout)是以编程方式生成的。

我尝试了大多数修复:使用布局参数搞砸(有点),将setMaxLines更改为setSingleLine,以及其他修复,但如果答案正在盯着我,我仍然会道歉!

生成代码:

TableLayout tableLayout = (TableLayout) view.findViewById(R.id.table);

    // Add text
    for (int iter=0;iter<DisplayJson.summaryData.tasks.length;iter++) {
        TableRow tableRow = new TableRow(this);
        tableRow.setPadding(16,16,16,16);

        LinearLayout container = new LinearLayout(this);
        container.setOrientation(LinearLayout.VERTICAL);

        TableLayout.LayoutParams rowParams = new TableLayout.LayoutParams(
                TableLayout.LayoutParams.MATCH_PARENT,
                TableLayout.LayoutParams.WRAP_CONTENT);

        TableRow.LayoutParams layoutLayoutParams = new TableRow.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT,
                1.0f);

        TextView titleView = new TextView(this);
        titleView.setText(DisplayJson.summaryData.tasks[iter].get("title"));
        titleView.setEllipsize(TextUtils.TruncateAt.END);
        titleView.setMaxLines(1);
        //titleView.setMaxEms(22); I do NOT want to set this (but setting it DOES work as expected)
        titleView.setLayoutParams(layoutParams);

        TextView classView = new TextView(this);
        classView.setText(DisplayJson.summaryData.tasks[iter].get("class"));
        classView.setLayoutParams(layoutParams);

        container.addView(titleView);
        container.addView(classView);
        container.setLayoutParams(layoutLayoutParams);

        tableRow.addView(container);

        setOnClick(tableRow, iter); //Custom function which does not affect the problem
        tableRow.setLayoutParams(rowParams);

        tableLayout.addView(tableRow);
    }

    setContentView(view);

TableLayout xml:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/table"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="1"></TableLayout>

我应该注意,在添加LinearLayout和&#39; classView&#39;之前在TextView中,椭圆化工作正常(代码可能略有不同)。此外,只有titleView TextView需要进行椭圆化,而不应该使用classView。

我们将非常感谢任何帮助,我应该注意,这些代码都不是这样的,只要它具有相同的输出就可以更改。

1 个答案:

答案 0 :(得分:1)

如果您在Android Studio中查看布局检查器的输出,您会看到titleView正在吹出表格行的宽度。更改线性布局的布局参数,使其具有如下权重,您将看到省略号显示:

TableRow.LayoutParams layoutLayoutParams = new TableRow.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT,
        1.0f);

我希望这会有所帮助。