【问题标题】:Text auto-sizing in TextView inside GridLayoutGridLayout 内 TextView 中的文本自动调整大小
【发布时间】:2019-04-05 06:19:14
【问题描述】:

我正在尝试以编程方式制作 GridLayout。网格由交错的显示标题的 textView 行和显示数据的 textView 行组成。

每个标题 textView 和第一行的第一个数据 textView 都设置为自动调整其文本大小:TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

我遇到的问题是第一行数据 textViews 的高度大于所有其他数据 textView 行。 据我所知,这是因为第一个 textView 启用了文本自动调整大小,甚至数据 textView 具有相同的权重。

我的问题是:有什么方法可以纠正这个问题,同时仍然在第一个 textview 上启用自动调整大小?

澄清:这是我在 StackOverflow 中的第一个问题,所以我希望它的结构没问题。

我附上我的代码,以便您查看:

public void crear_layout(int cant_datos){
    GridLayout gridLayout = mView.findViewById(R.id.grid);

    gridLayout.removeAllViews();

    int total = cant_datos * 2;
    int column = 3;
    int row = total / column;

    gridLayout.setColumnCount(column);
    gridLayout.setRowCount(row + 1);
    gridLayout.setOrientation(GridLayout.VERTICAL);

    //Logic for creating the rows and setting tags for each textview(id's)
    boolean va_titulo = true;
    int cant_tit_per_column = (total + column - 1) / (column * 2);
    for (int id_titulo, id_dato, i = 0, col = 0, cont_datos = 0 ; i < total; i++) {

        if (cont_datos == cant_tit_per_column){
            col++;
            cont_datos = 0;
        }

        id_titulo = column * cont_datos + col;
        id_dato = column * cont_datos + col;

        if(va_titulo && id_titulo < cant_datos) {
            add_view_title(gridLayout, id_titulo);
            va_titulo = false;
        }
        else if (id_dato < cant_datos){
            add_view_data(gridLayout, id_dato);
            va_titulo = true;
            cont_datos++;
        }
    }
}

private void add_view_title(GridLayout gridLayout, int id){
    AppCompatTextView textView = new AppCompatTextView(activity);

    textView.setGravity(Gravity.CENTER);
    textView.setMaxLines(1);
    //...Other customizations like custom background, tag(the purpose of int id) and font style...

    GridLayout.Spec rowSpan;
    GridLayout.Spec colspan;

    TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

    rowSpan = GridLayout.spec(GridLayout.UNDEFINED, 1,(float)0.2);
    colspan = GridLayout.spec(GridLayout.UNDEFINED, 1,1);
    GridLayout.LayoutParams textviewparams = new GridLayout.LayoutParams();
    textView.setLayoutParams(textviewparams);

    GridLayout.LayoutParams gridParam = new GridLayout.LayoutParams(rowSpan, colspan);

    gridLayout.addView(textView, gridParam);
}

private void add_view_data(GridLayout gridLayout, int id){

    AppCompatTextView textView = new AppCompatTextView(activity);

    textView.setGravity(Gravity.CENTER);
    textView.setMaxLines(1);
    //...Other customizations like custom background, tag(the purpose of int id) and font style...

    GridLayout.Spec rowSpan;
    GridLayout.Spec colspan;

    TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

    rowSpan = GridLayout.spec(GridLayout.UNDEFINED, 1,1);
    colspan = GridLayout.spec(GridLayout.UNDEFINED, 1,1);

    GridLayout.LayoutParams textviewparams = new GridLayout.LayoutParams();
    textView.setLayoutParams(textviewparams);

    GridLayout.LayoutParams gridParam = new GridLayout.LayoutParams(rowSpan, colspan);

    gridLayout.addView(textView, gridParam);
}

编辑: 我能够通过使用嵌套线性布局来解决这个问题。基本上,我为每一行制作了线性布局。然后我将这些布局放在一个垂直的线性布局中。

【问题讨论】:

    标签: java android layout grid programmatically


    【解决方案1】:

    您必须设置除高度之外的所有约束 和 将textViewscrollEnabled 设置为NO

    您可以参考this。最终,您的文本视图将根据其文本值自动调整大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      • 2012-10-05
      • 2017-03-23
      相关资源
      最近更新 更多