TableLayout仅在键盘显示时出现

时间:2015-12-07 09:35:13

标签: android keyboard android-tablelayout

在我的Android应用程序中,我正在使用TableLayout显示棋盘(大小是可变的)。用户可以通过Dialog输入棋盘的宽度和高度。当用户点击对话框的OK时,棋盘正在更新为该格式。但奇怪的是:当单击OK时键盘显示时TableLayout完全显示,但是当键盘未显示时单击OK时,TableLayout不会出现。我将在图片中显示问题:

这是不显示键盘的AlertDialog.Builder

This is the AlertDialog.Builder without showing the keyboard

在这种情况下,TableLayout没有显示

The TableLayout is not showing in this case

这是显示键盘的AlertDialog.Builder

This is the AlertDialog.Builder with showing the keyboard

TableLayout现在完美呈现

The TableLayout is showing perfectly now

这是当用户点击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;
        }
    }
}



}

我不明白为什么键盘显示时完全有效,以及隐藏键盘时无法正常工作的原因。我认为这根本不重要吗?

我希望有人可以帮助我!

0 个答案:

没有答案