Кнопка Android не изменяет размер при программной установке в таблицу - PullRequest
1 голос
/ 28 января 2012

Мне нужно изменить размер (в частности, высоту) кнопки в приложении для Android, где кнопка находится в таблице и создается программным способом.Я перепробовал около 20 различных подходов и потерпел неудачу.Если я создаю кнопку вне таблицы, я могу без проблем изменить размер, но как только она попадает в таблицу, высота остается неизменной, хотя я могу изменить ширину.

Я попытался создатьи используя параметры 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-файле вот как выглядит объявление таблицы:

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

Я пробовал возиться с stretchColumns и другими настройками здесь;опять безрезультатно.У кого-нибудь есть идеи, почему я не могу программно изменить высоту кнопки, добавленной в мою таблицу, но у меня нет проблем с этим вне таблицы?Я уверен, что это некая настройка или настройка, которую я просто не нашел.Любая помощь ценится, как я в моем уме.Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 29 января 2012

Я исправил свою проблему. Оказывается, это был вопрос заказа. Проблема в том, что я устанавливал высоту до добавления кнопки в таблицу. Это привело к тому, что у 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 голосов
/ 28 января 2012

Попробуйте это

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);  
1 голос
/ 29 января 2012

Я думаю, вам нужно позвонить View.requestLayout , это не выполняется автоматически каждый раз, когда вы добавляете / удаляете дочерние представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...