2012-09-28 7 views
1

У меня TableLayout следующим образом:Как установить высоту ячейки как ее ширину в android TableLayout?

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:stretchColumns="1"> 

<TableRow> 
    <Button 
    android:id="@+id/b1" 
    android:layout_width="0dip" 
    android:layout_height="fill_parent" 
    android:layout_weight="1" 
    android:gravity="center" /> 
    <Button 
    android:id="@+id/b2" 
    android:layout_width="0dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:gravity="center" /> 
    <Button 
    android:id="@+id/b3" 
    android:layout_width="0dip" 
    android:layout_height="fill_parent" 
    android:layout_weight="1" 
    android:gravity="center" /> 
</TableRow> 
</TableLayout> 

Каждая кнопка имеет ту же ширину. Я хочу, чтобы высота этих кнопок была точно такой же, как и их ширина. Я пытался сделать это programmally по:

Button b1 = (Button) findViewById(R.id.b1); 
b1.setHeight(b1.getWidth()); 

, но он не работает (он дал мне значение 0). Я полагаю, потому что, когда я это делаю (внутри метода onCreate), кнопка еще не установлена.

+0

Это является аналогичные вопросы, которые могут дать вам решение: http://stackoverflow.com/questions/2948212/android-layout-with-sqare-buttons –

ответ

1

Во-первых, вы правы, вы получаете значение 0, потому что экран не рисовал еще при попытке получить кнопку width.

Как я вижу, единственная возможность сделать это, как вы хотите, - дать им предеревую ценность в файле XML.

Например:

<Button 
    android:id="@+id/b1" 
    android:layout_width="25dip" 
    android:layout_height="25dip" 
    android:gravity="center" /> 

Установите ширину и высоту programmally:

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 

btnWidth = metrics.heightPixels/3 - 50;//gap 
btnHeight = btnWidth; 

Button b1 = (Button) findViewById(R.id.b1); 
b1.setHeight(btnWidth); 
b1.setWidth(btnWidth); 
+0

проблема в том, что я хочу 3 квадрата, которые будут по всей ширине экрана – LiorZ

+0

@LiorZ Вы правы, если вы используете этот метод, вы не можете использовать 'android: layout_weight '. Таким образом, вы не дадите всем кнопкам равную ширину с самого начала? Вы можете сделать это в файле xml или при создании экрана, получить ширину вашего устройства, разделить его на 3 и добавить небольшой промежуток между ними, а затем установить его программно. –

+0

Я не знаю ширины с начала, потому что я хочу, чтобы кнопки были в равной ширине и будут по всей ширине экрана, и я могу сделать это только с помощью xml. Я попытался сделать это программно, разделив экран на 3 и разместив кнопки с этим значением, но макет метода использует целые числа, а ширина кнопок может быть двойной, поэтому она создает уродливые пробелы. Но когда я использую xml, он решает проблему. – LiorZ

Смежные вопросы