Android 以编程方式创建 Table
Android Creating Table Programmatically
我正在尝试生成具有给定行号和列号的数字 table。该程序从用户那里获取两个参数,并使用给定参数创建 table 行和列。每个单元格将有一个介于 1 到 100 之间的随机数值。
就我而言,我使用 2 个不同的 EditText 视图对我的 XML 进行编码,它们将成为我的参数。我将要使用四个按钮 "Create"、"Calculate"、"Reset"、"Exit"。当用户单击 "Create" 按钮时,将使用给定的行和列值生成 table。因此,我必须从我的 java 文件而不是 XML 文件创建我的 table。
到目前为止,这是我的代码:
public class MainActivity extends AppCompatActivity {
private Button btnCreate, btnCalculate, btnReset, btnExit;
private EditText txtColumn, txtRow;
private LinearLayout linLayout;
private TableLayout table;
private TextView txtResult;
private Random random;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnCreate = (Button) findViewById(R.id.btnCreate);
btnCalculate = (Button) findViewById(R.id.btnCalculate);
btnReset = (Button) findViewById(R.id.btnReset);
btnExit = (Button) findViewById(R.id.btnExit);
txtColumn = (EditText) findViewById(R.id.txtColumn);
txtRow = (EditText) findViewById(R.id.txtRow);
txtResult = (TextView) findViewById(R.id.txtResult);
txtColumn.requestFocus();
random = new Random();
TableLayout table = new TableLayout(this);
btnCalculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
btnCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
table.setLayoutParams(new TableLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
table.setShrinkAllColumns(true);
table.setStretchAllColumns(true);
int columnNumber = Integer.parseInt(txtColumn.getText().toString());
int rowNumber = Integer.parseInt(txtRow.getText().toString());
for(int i=0; i<rowNumber; i++) {
TableRow row = new TableRow();
for(int j=0; i<columnNumber; i++) {
int value = random.nextInt(100) + 1;
TextView tv = new TextView();
tv.setText(String.valueOf(value));
row.addView(tv);
}
table.addView(row);
}
}
});
btnExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.exit(0);
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
txtColumn.setText(null);
txtRow.setText(null);
txtResult.setText(null);
}
});
}
}
我在 "for" 循环中遇到错误。它说 "TableRow" 必须在里面获取 Context 参数。但是,我真的没明白它要什么样的参数。我试图以编程方式搜索 table 创建,但到目前为止运气不好。我该如何解决这个错误?
您需要在创建 table 行时传递上下文。试试下面的代码
for (int i=0; i < rowNumber; i++) {
TableRow row = new TableRow(MainActivity.this);
for (int j=0; j < columnNumber; j++) {
int value = random.nextInt(100) + 1;
TextView tv = new TextView(MainActivity.this);
tv.setText(String.valueOf(value));
row.addView(tv);
}
table.addView(row);
}
并且您还需要将 table 布局添加到 xml 的任何视图,例如在您的 xml 文件中添加如下所示的衬里布局
<LinearLayout
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
在 java 文件中投射该视图,如下所示
LinearLayout mainLayout = findViewById(R.id.mainLayout);
将您的 table 布局添加到此视图,如下所示
mainLayout.addView(table);
我正在尝试生成具有给定行号和列号的数字 table。该程序从用户那里获取两个参数,并使用给定参数创建 table 行和列。每个单元格将有一个介于 1 到 100 之间的随机数值。 就我而言,我使用 2 个不同的 EditText 视图对我的 XML 进行编码,它们将成为我的参数。我将要使用四个按钮 "Create"、"Calculate"、"Reset"、"Exit"。当用户单击 "Create" 按钮时,将使用给定的行和列值生成 table。因此,我必须从我的 java 文件而不是 XML 文件创建我的 table。
到目前为止,这是我的代码:
public class MainActivity extends AppCompatActivity {
private Button btnCreate, btnCalculate, btnReset, btnExit;
private EditText txtColumn, txtRow;
private LinearLayout linLayout;
private TableLayout table;
private TextView txtResult;
private Random random;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnCreate = (Button) findViewById(R.id.btnCreate);
btnCalculate = (Button) findViewById(R.id.btnCalculate);
btnReset = (Button) findViewById(R.id.btnReset);
btnExit = (Button) findViewById(R.id.btnExit);
txtColumn = (EditText) findViewById(R.id.txtColumn);
txtRow = (EditText) findViewById(R.id.txtRow);
txtResult = (TextView) findViewById(R.id.txtResult);
txtColumn.requestFocus();
random = new Random();
TableLayout table = new TableLayout(this);
btnCalculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
btnCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
table.setLayoutParams(new TableLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
table.setShrinkAllColumns(true);
table.setStretchAllColumns(true);
int columnNumber = Integer.parseInt(txtColumn.getText().toString());
int rowNumber = Integer.parseInt(txtRow.getText().toString());
for(int i=0; i<rowNumber; i++) {
TableRow row = new TableRow();
for(int j=0; i<columnNumber; i++) {
int value = random.nextInt(100) + 1;
TextView tv = new TextView();
tv.setText(String.valueOf(value));
row.addView(tv);
}
table.addView(row);
}
}
});
btnExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.exit(0);
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
txtColumn.setText(null);
txtRow.setText(null);
txtResult.setText(null);
}
});
}
}
我在 "for" 循环中遇到错误。它说 "TableRow" 必须在里面获取 Context 参数。但是,我真的没明白它要什么样的参数。我试图以编程方式搜索 table 创建,但到目前为止运气不好。我该如何解决这个错误?
您需要在创建 table 行时传递上下文。试试下面的代码
for (int i=0; i < rowNumber; i++) {
TableRow row = new TableRow(MainActivity.this);
for (int j=0; j < columnNumber; j++) {
int value = random.nextInt(100) + 1;
TextView tv = new TextView(MainActivity.this);
tv.setText(String.valueOf(value));
row.addView(tv);
}
table.addView(row);
}
并且您还需要将 table 布局添加到 xml 的任何视图,例如在您的 xml 文件中添加如下所示的衬里布局
<LinearLayout
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
在 java 文件中投射该视图,如下所示
LinearLayout mainLayout = findViewById(R.id.mainLayout);
将您的 table 布局添加到此视图,如下所示
mainLayout.addView(table);