在动态编程期间,如何使 EditText 适合 Java 中的 Table 单元格?
How do I fit an EditText to a Table Cell in Java during dynamic programming?
问题: 我很难让 EditText 字段适应 table 单元格尺寸。
我尝试过的方法: 我已经尝试了很多建议,例如下面我的代码,在 Whosebug 上有说明,但几乎所有的都是静态的而不是动态的例子。我看了几个差不多的视频。
我正在尝试做的事情:我正在尝试为用户提供一个选项,将一行数据添加到 table 并填写领域。下面的代码运行良好,除了我似乎无法找到正确的方法来说明 LayoutParams
以适应单元格边界内的 EditText
。
for(int r=1; r<5;r++) {
EditText editText = new EditText(this);
editText.setBackgroundColor(Color.WHITE);
editText.setTextSize(12);
editText.setSingleLine();
editText.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT));
row.addView(editText);
}
<TableLayout
android:id="@+id/table_authors"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/colorDkGray"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_add_author"
android:layout_marginTop="15dp"
android:layout_marginEnd="5dp"
android:layout_marginStart="5dp"/>
在 EditNote
activity 中设置 table 的代码:
tableLayoutAuthors = findViewById(R.id.table_authors);
tableLayoutAuthors.addView(setupAuthorsTableRow("+", "Organization/First", "Middle Name", "Last Name","Suffix", true));
btnAddAuthor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tableLayoutAuthors.addView(setupAuthorsTableRow("-","", "", "", "", false));
}
});
您需要做一些调整:
在xmlTableLayout
中添加android:stretchColumns="*"
,表示拉伸所有列。
<TableLayout
android:id="@+id/table_authors"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="716dp"
android:orientation="vertical"
android:stretchColumns="*"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
您需要将 editText
宽度设置为 0。因为使用 WRAP_CONTENT
它会考虑必须换行的内容宽度,而不是单元格边界。
示例代码如下所示:
TableLayout tableLayoutAuthors = findViewById(R.id.table_authors);
TableRow row = new TableRow(this);
for (int r = 1; r < 5; r++) {
EditText editText = new EditText(this);
editText.setBackgroundColor(Color.WHITE);
editText.setTextSize(12);
editText.setText("test");
editText.setSingleLine();
editText.setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT));
row.addView(editText);
}
tableLayoutAuthors .addView(row);
在 Mayur Gajra 的帮助下,我找到了解决问题的方法。下面发布的内容解决了我的问题:
将此行添加到 XML:
android:stretchColumns="*"
更改为创建 TableRow.LayoutParams
的实例并为 editText
设置边距和填充:
for(int r=1; r<5;r++) {
EditText editText = new EditText(this);
// Change:
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams();
trLayoutParams.setMargins(3,3,3,3);
editText.setLayoutParams(trLayoutParams);
editText.setBackgroundColor(Color.WHITE);
editText.setTextSize(12);
editText.setGravity(Gravity.CENTER);
editText.setSingleLine();
// Change:
editText.setPadding(8, 8, 8, 8);
row.addView(editText);
row.setClickable(true);
}
问题: 我很难让 EditText 字段适应 table 单元格尺寸。
我尝试过的方法: 我已经尝试了很多建议,例如下面我的代码,在 Whosebug 上有说明,但几乎所有的都是静态的而不是动态的例子。我看了几个差不多的视频。
我正在尝试做的事情:我正在尝试为用户提供一个选项,将一行数据添加到 table 并填写领域。下面的代码运行良好,除了我似乎无法找到正确的方法来说明 LayoutParams
以适应单元格边界内的 EditText
。
for(int r=1; r<5;r++) {
EditText editText = new EditText(this);
editText.setBackgroundColor(Color.WHITE);
editText.setTextSize(12);
editText.setSingleLine();
editText.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT));
row.addView(editText);
}
<TableLayout
android:id="@+id/table_authors"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/colorDkGray"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_add_author"
android:layout_marginTop="15dp"
android:layout_marginEnd="5dp"
android:layout_marginStart="5dp"/>
在 EditNote
activity 中设置 table 的代码:
tableLayoutAuthors = findViewById(R.id.table_authors);
tableLayoutAuthors.addView(setupAuthorsTableRow("+", "Organization/First", "Middle Name", "Last Name","Suffix", true));
btnAddAuthor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tableLayoutAuthors.addView(setupAuthorsTableRow("-","", "", "", "", false));
}
});
您需要做一些调整:
在xml
TableLayout
中添加android:stretchColumns="*"
,表示拉伸所有列。<TableLayout android:id="@+id/table_authors" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="5dp" android:layout_marginTop="15dp" android:layout_marginEnd="5dp" android:layout_marginBottom="716dp" android:orientation="vertical" android:stretchColumns="*" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
您需要将
editText
宽度设置为 0。因为使用WRAP_CONTENT
它会考虑必须换行的内容宽度,而不是单元格边界。
示例代码如下所示:
TableLayout tableLayoutAuthors = findViewById(R.id.table_authors);
TableRow row = new TableRow(this);
for (int r = 1; r < 5; r++) {
EditText editText = new EditText(this);
editText.setBackgroundColor(Color.WHITE);
editText.setTextSize(12);
editText.setText("test");
editText.setSingleLine();
editText.setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT));
row.addView(editText);
}
tableLayoutAuthors .addView(row);
在 Mayur Gajra 的帮助下,我找到了解决问题的方法。下面发布的内容解决了我的问题:
将此行添加到 XML:
android:stretchColumns="*"
更改为创建 TableRow.LayoutParams
的实例并为 editText
设置边距和填充:
for(int r=1; r<5;r++) {
EditText editText = new EditText(this);
// Change:
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams();
trLayoutParams.setMargins(3,3,3,3);
editText.setLayoutParams(trLayoutParams);
editText.setBackgroundColor(Color.WHITE);
editText.setTextSize(12);
editText.setGravity(Gravity.CENTER);
editText.setSingleLine();
// Change:
editText.setPadding(8, 8, 8, 8);
row.addView(editText);
row.setClickable(true);
}