2012-01-28 1 views
1

ボタンがテーブルにあり、プログラムで作成されるAndroidアプリケーションのボタンのサイズ(特に高さ)を変更する必要があります。私は約20種類のアプローチを試み、悲惨に失敗しました。テーブルの外にボタンを作成すると、問題なくサイズを変更できますが、テーブルに入るとすぐに、幅を変更することはできますが、高さは固定されたままです。プログラムでテーブルに置いたときにAndroidボタンのサイズが変更されない

LinearLayoutパラメータ、ViewGroupレイアウトパラメータ、TableLayoutパラメータなどを作成して使用し、そのコンストラクタ(例:WRAP_CONTENT)またはsetHeight()を使用して高さを設定しようとしました。また、単にbutton.setHeight()を呼び出してみました。テーブルのxmlマニフェストの設定も変更しました。ピクセル値とDpi値を使用しました。このすべてが失敗しました。ここで私は(ちょうどb.setHeight()への呼び出しを示す)これまで持っているものの基本である:これは正しくボタンになり

TableRow row = new TableRow(getApplicationContext()); 
row.setId(counter); 

TextView t = new TextView(getApplicationContext()); 
t.setText("BLH " + counter); 
t.setTextColor(Color.BLACK); 

//I have also tried table.getContext() in this constructor... 
Button b = new Button(getApplicationContext()); 
b.setOnClickListener(new Button.OnClickListener() { 

public void onClick(View v) 
{ 
     //blah blah blah 
}); 

//Convert from pixels to Dpi 
final float scale = getResources().getDisplayMetrics().density; 
int heightDp = (int) (33 * scale + 0.5f); 
int widthDp = (int) (60 * scale + 0.5f);  
b.setText(R.string.removeButtonText); 
b.setTextSize(12); 
b.setTag(counter); 
b.setHeight(heightDp); 
b.setWidth(widthDp);   
b.setId(counter); 

counter++; 
row.addView(t); 
row.addView(b); 

// add the TableRow to the TableLayout 
table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

がテーブルに置かれているのが、高さは関係なく変更されません私が使っている値。私のxmlファイルでは、ここではテーブルの宣言は次のようになります。私はstretchColumns、ここで他の設定をいじって試してみました

<TableLayout 
android:id="@+id/myTable" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:padding="20dp" 
android:stretchColumns="0"> 
</TableLayout> 

。もう一度、無駄に。誰も私のテーブルにプログラムで追加されたボタンの高さを変更することができない理由を誰も考えているが、テーブルの外では何の問題もない?私が見つけたことのないいくつかの設定や調整だと確信しています。私の知恵が終わったので、どんな助けもありがたいです。前もって感謝します。

答えて

3

私の問題は修正されました。それが注文の問題だったことが分かります。問題は、ボタンをテーブルに追加する前に高さを設定していたことです。これにより、ここで説明されているように、ボタンのLayoutParamsには親がありませんでした:ViewGroup.getLayoutParams()。ここで私は(表にボタンを追加し後に高さを、基本的に変更)を行うために必要なものです:

table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

    //now change the height so the buttons aren't so big... 
    final float scale = getResources().getDisplayMetrics().density; 
    int heightDp = (int) (33 * scale + 0.5f); 
    ViewGroup.LayoutParams params = b.getLayoutParams(); 
    params.height = heightDp; 
    b.setLayoutParams(params); 
    b.requestLayout(); 
    table.requestLayout(); 

最後の2行は、ローレンスの上に示唆されました。テーブルとボタンは、これらがなければ更新されたようだ。しかし、ちょうどその場合に更新するのは良い考えであるように思えました。

2

私はあなたがView.requestLayoutを呼び出すために必要だと思う。この

int heightDp = (int) (33 * scale + 0.5f); 
int widthDp = (int) (60 * scale + 0.5f); 
ViewGroup.LayoutParams bLp = new ViewGroup.LayoutParams(widthDp,heightDp); 
b.setLayoutParams(bLp); 

代わりの

b.setHeight(heightDp); 
b.setWidth(widthDp); 
+0

返信いただきありがとうございますblessenm。私はそれを前に試しました(そして、あなたのコードスニペットを上にして、もう一度試しました)。残念ながら、うまくいきません。何らかの理由でボタンが表示されない場合があります。 – blh83

1

を試してみて、これは自動的に子ビューを追加/削除するたびに実行されません。

+0

ありがとうございました。私は間違った時に高さを設定しようとしていたことが分かります。私はそれをテーブルに追加する前にそれを設定していたので、ボタンのLayoutParamsはnullだったので(親はありませんでした)、高さを変更しても効果はありませんでした。私はあなたの提案を加えて、すべてが後で更新されるようにしました。とても有難い。以下では、他の誰かがこのコードを参照する場合に備えて私のコードを掲載します。 – blh83

関連する問題