2017-02-24 13 views
1

私の学士論文では、アンドロイドアプリケーションを実装したいと考えています。テスト目的のために、私はテーブルレイアウトを作成しました。行とセルを含むセルは、ユーザーの入力に依存します。 tablelayoutでいくつかの経験を得るために、私はプログラムで7つのセルを持つテーブルレイアウトを作成しました。最初の行には、それぞれがcolspan = 2のヘッダーセルがあります。Android TableLayout cell colspan

ここで、2番目の行のセルを右から左に段階的に削除します。 すべては問題ありません。私はもう一度2列目の細胞を取り除いた。画像:table with 5 cellsを参照してください。すべて順調。しかし、今すぐ再コンパイルするか、即座にリロードすると、これが発生します:table with 5cells, but wrong。ここで何が起こっていますか?私はコード内で何も変えなかった...何か魔法が起こったか?私はこの回避策をアンドロイド仮想デバイス(api 17)でテストしました。 Api 17が必要です。 api 25の仮想デバイスでは、エラーは発生しません。

誰かが私を助けることができますか?

は、ここでは、コードの一部です:FYI

TableRow.LayoutParams params = new TableRow.LayoutParams(); 
params.span = 2; 
params.weight = 1; 

TableLayout table = new TableLayout(context); 

TableRow row1 = new TableRow(context); 
TableRow row2 = new TableRow(context); 

TextView tv1 = new TextView(context); 
tv1.setText("header"); 
tv1.setWidth(300); 
tv1.setHeight(100); 
tv1.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
tv1.setBackground(darkBackground); 
tv1.setLayoutParams(params); 
row1.addView(tv1); 

TextView tv2 = new TextView(context); 
tv2.setText("header"); 
tv2.setWidth(300); 
tv2.setHeight(100); 
tv2.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
tv2.setBackground(darkBackground); 
tv2.setLayoutParams(params); 
row1.addView(tv2); 
+0

通常、コードで手動で作成するのではなく、ASレイアウトビルダ/ XMLを使用してレイアウトを作成することをお勧めします。レイアウトビルダーを使用すると、異なるデバイス画面でレイアウトを実行することなくレイアウトがどのように表示されるかを確認することもできます。 – nbokmans

+0

私のアプリケーションでは、内部レイアウトビルダは適用されません。ユーザーは、外部xmlファイルにテーブルを定義してインポートすることができます。表の構造はユーザーごとに異なる場合があります。 – Rotzloeffel

答えて

1

:私は解決策を見つけました。それはすべて背景です。 GradiantDrawable-Objectの定義が間違っているため、2番目の画像(5cellsのテーブルがあるが、間違っている)(最初の行、最初のセル)の背景(灰色)が完全な幅に収まらない。

GradiantDrawable background = new GradiantDrawable(); 
background.setColor(Color.rgb(235,235,235)); 
background.setStroke(1, Color.rgb(0,0,0)); 
// don't forget to set the following attribute: 
background.setShape(GradientDrawable.RECTANGLE);