如何以编程方式调整 TableLayout 中的 TableRow 单元格宽度?
How do I adjust TableRow cell widths within a TableLayout programmaticallly?
问题: 当我 select 一个具有长路径或名称的文件时,它强制相邻的列消失。
布局 xml 只是将 TableLayout
定位为 Activity
中的占位符,Java 代码用于根据需要创建 `TableRows 和视图。
我正在尝试做的事情: 用户可以单击“添加”按钮来 select 添加他们 phone 上的文件作为 TableLayout
中 TableRow
的路径和文件名。第一列有一个按钮( - )可选择删除新添加的 TableRow,第二列包含路径和文件名。
我尝试了什么: 我觉得我已经尝试了所有以编程方式调整各种 LayoutParams
和 Button
或 TextView
宽度和设置固定宽度的高度参数......至少对于按钮。但似乎没有任何效果。当我在这里搜索编程示例时,它总是布局 XML 代码,而不是 Java.
我仍在学习 Android,但我一直坚持这一点,并认为有人可以为我指明正确的方向。下面是一些图像和在其中创建 TableRows 和视图的代码。感觉有点傻我想不通。
添加前
添加后
单例 class 中的代码 方法创建 Button
和 TextView
视图到 TableRow
和 TableLayout
。第一个方法调用另外两个创建 Button 和 TextView
public static TableRow setupFilesTableRow(Context context, TableLayout table, String fileID, String fileName, boolean header) {
TableRow row = new TableRow(context);
if(header) {
row.addView(setupFilesAddRowButton(context, table));
row.addView(addRowTextViewToTable(context, fileName, true));
}else{
row.addView(setupDeleteRowButton(context, table));
for(int r=1; r < 2; r++){
row.addView(addRowTextViewToTable(context, fileName, false));
row.setClickable(true);
}
}
return row;
}
public static Button setupDeleteRowButton(Context context, TableLayout table){
Button btnDelete = new Button(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.MATCH_PARENT);
trLayoutParams.setMargins(3,3,3,3);
btnDelete.setBackgroundColor(Color.WHITE);
btnDelete.setLayoutParams(trLayoutParams);
btnDelete.setText("-");
btnDelete.setTypeface(Typeface.DEFAULT,Typeface.BOLD);
btnDelete.setGravity(Gravity.CENTER);
btnDelete.setPadding(5,5,5,5);
btnDelete.setOnClickListener(v -> {
deleteTableRows(table);
});
return btnDelete;
}
public static TextView addRowTextViewToTable(Context context, String value, boolean bold){
TextView tv;
tv = new TextView(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams();
trLayoutParams.setMargins(3,3,3,3);
tv.setText(String.valueOf(value));
if(bold) tv.setTypeface(null, Typeface.BOLD);
tv.setLayoutParams(trLayoutParams);
tv.setTextSize(12);
tv.setGravity(Gravity.CENTER);
tv.setPadding(8,8,8,8);
tv.setBackgroundColor(Color.WHITE);
return tv;
}
在我学会使用术语“动态”而不是“程序化”之后,我找到了一些帮助,结果解决了我的问题。以下 link 为我推断问题的解决方案提供了依据。 link下面是我对这个问题的回答。
灵感来源:
http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/
解决方法:我在TableRow
的声明处申请LayoutParams
失败了。添加这些参数后,我可以使用 TableRow.LayoutParams
来帮助定义和控制单独的 Button
和 TextViews
,在我的特定情况下使用 .weight
和 .height
参数。查看更新后的代码和结果图片。
代码更新的可视化结果
代码更新为 setupFilesTableRow
TableRow row = new TableRow(context);
LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
row.setLayoutParams(ll);
setupDeleteRowButton
的代码更新(添加体重和身高有帮助)
Button btnDelete = new Button(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT);
trLayoutParams.setMargins(3,3,3,3);
trLayoutParams.weight = 1;
trLayoutParams.height =75;
btnDelete.setLayoutParams(trLayoutParams);
代码更新为 addRowTextViewToTable
*
TextView tv;
tv = new TextView(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(0, TableRow.LayoutParams.MATCH_PARENT);
trLayoutParams.setMargins(3,3,3,3);
trLayoutParams.weight = 5;
tv.setLayoutParams(trLayoutParams);
问题: 当我 select 一个具有长路径或名称的文件时,它强制相邻的列消失。
布局 xml 只是将 TableLayout
定位为 Activity
中的占位符,Java 代码用于根据需要创建 `TableRows 和视图。
我正在尝试做的事情: 用户可以单击“添加”按钮来 select 添加他们 phone 上的文件作为 TableLayout
中 TableRow
的路径和文件名。第一列有一个按钮( - )可选择删除新添加的 TableRow,第二列包含路径和文件名。
我尝试了什么: 我觉得我已经尝试了所有以编程方式调整各种 LayoutParams
和 Button
或 TextView
宽度和设置固定宽度的高度参数......至少对于按钮。但似乎没有任何效果。当我在这里搜索编程示例时,它总是布局 XML 代码,而不是 Java.
我仍在学习 Android,但我一直坚持这一点,并认为有人可以为我指明正确的方向。下面是一些图像和在其中创建 TableRows 和视图的代码。感觉有点傻我想不通。
添加前
添加后
单例 class 中的代码 方法创建 Button
和 TextView
视图到 TableRow
和 TableLayout
。第一个方法调用另外两个创建 Button 和 TextView
public static TableRow setupFilesTableRow(Context context, TableLayout table, String fileID, String fileName, boolean header) {
TableRow row = new TableRow(context);
if(header) {
row.addView(setupFilesAddRowButton(context, table));
row.addView(addRowTextViewToTable(context, fileName, true));
}else{
row.addView(setupDeleteRowButton(context, table));
for(int r=1; r < 2; r++){
row.addView(addRowTextViewToTable(context, fileName, false));
row.setClickable(true);
}
}
return row;
}
public static Button setupDeleteRowButton(Context context, TableLayout table){
Button btnDelete = new Button(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.MATCH_PARENT);
trLayoutParams.setMargins(3,3,3,3);
btnDelete.setBackgroundColor(Color.WHITE);
btnDelete.setLayoutParams(trLayoutParams);
btnDelete.setText("-");
btnDelete.setTypeface(Typeface.DEFAULT,Typeface.BOLD);
btnDelete.setGravity(Gravity.CENTER);
btnDelete.setPadding(5,5,5,5);
btnDelete.setOnClickListener(v -> {
deleteTableRows(table);
});
return btnDelete;
}
public static TextView addRowTextViewToTable(Context context, String value, boolean bold){
TextView tv;
tv = new TextView(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams();
trLayoutParams.setMargins(3,3,3,3);
tv.setText(String.valueOf(value));
if(bold) tv.setTypeface(null, Typeface.BOLD);
tv.setLayoutParams(trLayoutParams);
tv.setTextSize(12);
tv.setGravity(Gravity.CENTER);
tv.setPadding(8,8,8,8);
tv.setBackgroundColor(Color.WHITE);
return tv;
}
在我学会使用术语“动态”而不是“程序化”之后,我找到了一些帮助,结果解决了我的问题。以下 link 为我推断问题的解决方案提供了依据。 link下面是我对这个问题的回答。
灵感来源: http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/
解决方法:我在TableRow
的声明处申请LayoutParams
失败了。添加这些参数后,我可以使用 TableRow.LayoutParams
来帮助定义和控制单独的 Button
和 TextViews
,在我的特定情况下使用 .weight
和 .height
参数。查看更新后的代码和结果图片。
代码更新的可视化结果
代码更新为 setupFilesTableRow
TableRow row = new TableRow(context);
LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
row.setLayoutParams(ll);
setupDeleteRowButton
的代码更新(添加体重和身高有帮助)
Button btnDelete = new Button(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT);
trLayoutParams.setMargins(3,3,3,3);
trLayoutParams.weight = 1;
trLayoutParams.height =75;
btnDelete.setLayoutParams(trLayoutParams);
代码更新为 addRowTextViewToTable
*
TextView tv;
tv = new TextView(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(0, TableRow.LayoutParams.MATCH_PARENT);
trLayoutParams.setMargins(3,3,3,3);
trLayoutParams.weight = 5;
tv.setLayoutParams(trLayoutParams);