在我的Android应用程序中,我正在使用TableLayout显示棋盘(大小是可变的)。用户可以通过Dialog输入棋盘的宽度和高度。当用户点击对话框的OK时,棋盘正在更新为该格式。但奇怪的是:当单击OK时键盘显示时TableLayout完全显示,但是当键盘未显示时单击OK时,TableLayout不会出现。我将在图片中显示问题:
这是不显示键盘的AlertDialog.Builder
在这种情况下,TableLayout没有显示
这是显示键盘的AlertDialog.Builder
TableLayout现在完美呈现
这是当用户点击OK时调用的函数,因此它会更新棋盘:
private void setupChessBoard(){
tableLayout.removeAllViews();
String[][] solution = new Algorithm(dimensionsDialog.getHeight(), dimensionsDialog.getWidth(), dimensionsDialog.getNumberOfQueens(), dimensionsDialog.getNumberOfBishops()).getSolution();
for(int i = 0 ; i < dimensionsDialog.getHeight(); i ++){
tableLayout.addView(new TableRowChess(this, dimensionsDialog.getWidth(), i, solution));
}
}
这是自定义的TableRow类:
public class TableRowChess extends TableRow {
private Context context;
private int numberOfColumns;
private int rowNumber;
private String[][] solution;
public TableRowChess(Context context, int numberOfColumns, int rowNumber, String[][] solution) {
super(context);
this.context = context;
this.numberOfColumns = numberOfColumns;
this.rowNumber = rowNumber;
this.solution = solution;
initializeTableRow();
initializeTextViews();
}
private void initializeTableRow(){
this.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) numberOfColumns));
}
private void initializeTextViews(){
TableRow.LayoutParams params = new TableRow.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f);
for(int i = 0; i < numberOfColumns; i ++){
SquareTextView tv = new SquareTextView(context);
tv.setLayoutParams(params);
tv.setGravity(Gravity.CENTER);
tv.setBackgroundResource(getCorrectBackground(i));
tv.setHeight(tv.getLayoutParams().width);
tv.setText(solution[rowNumber][i]);
tv.setTextAppearance(context, android.R.style.TextAppearance_Medium);
tv.setTypeface(null, Typeface.BOLD);
this.addView(tv);
}
}
private int getCorrectBackground(int columnNumber){
if((rowNumber % 2) == 0){
if((columnNumber % 2) == 0){
return R.drawable.square_white;
} else {
return R.drawable.square_brown;
}
} else {
if((columnNumber % 2) == 0){
return R.drawable.square_brown;
} else {
return R.drawable.square_white;
}
}
}
}
我不明白为什么键盘显示时完全有效,以及隐藏键盘时无法正常工作的原因。我认为这根本不重要吗?
我希望有人可以帮助我!