Я пытаюсь сделать 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:
Я смог решить эту проблему с помощью вложенных линейных макетов. По сути, я сделал линейные макеты для каждого ряда. Затем я поместил эти макеты в вертикальный линейный макет.