我正在尝试以编程方式制作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);
}
编辑: 通过使用嵌套的线性布局,我能够解决此问题。基本上,我为每一行制作了线性布局。然后,将这些布局放入垂直的线性布局中。
答案 0 :(得分:0)
除了高度1以外,您必须设置所有约束
和
将textView
的{{1}}设置为scrollEnabled
。
您可以参考this。最终,您的文本视图将根据其文本值自动调整大小。