Авторазмер текста в TextView внутри GridLayout - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь сделать GridLayout программно. Сетка состоит из чередующихся строк textView, которые отображают заголовки, и строк textView, которые отображают данные.

Каждый текстовый вид заголовка и первый текстовый вид данных из первой строки устанавливаются для автоматического изменения размера текста с помощью: TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

Проблема, с которой я столкнулся, заключается в том, что высота первой строки данных textViews больше, чем у всех других строк textView данных. Из того, что я видел, это происходит из-за первого textView, у которого включено автоматическое изменение размера текста, и даже несмотря на то, что textViews данных имеют одинаковый вес.

У меня такой вопрос: есть ли способ исправить это, при этом автоматическое изменение размера включено в этом первом текстовом просмотре?

Уточнение: это мой первый вопрос в 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);
}

EDIT: Я смог решить эту проблему с помощью вложенных линейных макетов. По сути, я сделал линейные макеты для каждого ряда. Затем я поместил эти макеты в вертикальный линейный макет.

1 Ответ

0 голосов
/ 01 ноября 2018

Вы должны установить все свои ограничения, кроме высоты а также установите textView s scrollEnabled на NO.

Вы можете сослаться на это . В конечном итоге размер вашего текстового представления автоматически изменится в зависимости от его текстового значения.

...