2014-09-05 4 views
0

Я хочу установить параметры LinearLayout после того, как будут вычислены все параметры вида.Настройка LayoutParams программно

Я пытаюсь установить высоту LinearLayout, связанную с высотой родительского представления. И высота родительского вида рассчитывается в соответствии с его layout_weight, поэтому я получить высоту по getMeasuredHeight();

Мой код:

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 

    super.onWindowFocusChanged(hasFocus); 
    RelativeLayout lay = (RelativeLayout) findViewById(R.id.alt); 
    LinearLayout bar = (LinearLayout) findViewById(R.id.barLay); 

    int layH = lay.getMeasuredHeight(); 
    int barH = layH/4; 
    LinearLayout.LayoutParams params = (LayoutParams) bar.getLayoutParams(); 
    params.height = barH; 
    bar.setLayoutParams(params); 
} 

Eclipse, отладчик останавливает программу на этой линии;

LinearLayout.LayoutParams params = (LayoutParams) bar.getLayoutParams(); 

Я не могу найти, что может быть проблемой? Я делаю что-то неправильно, чтобы установить параметры?

+1

контрольная панель внутри какой тип макета? – Loc

+0

Макет, который я хочу установить для параметров, - Linear, а его родительский элемент - Relative. Я попробую изменить relativeLayout на LinearLayout и написать результат здесь – ctarimli

+0

Это сработало хорошо! Спасибо @LocHa – ctarimli

ответ

0

Тип LayoutParams на самом деле задается родительским элементом представления, поэтому bar.getLayoutParams() должен возвращать объект типа RelativeLayout.LayoutParams. С помощью явного приведения к LinearLayout.LayoutParams я бы ожидать, что ваш LogCat содержать следующую строку:

Caused by: java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 

Изменение его это должно сделать трюк:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) bar.getLayoutParams(); 

или, поскольку высота в базе класса, не бросать его вообще:

ViewGroup.LayoutParams params = bar.getLayoutParams(); 
0

Попробуйте изменить этот

LinearLayout.LayoutParams params = (LayoutParams) bar.getLayoutParams(); 

к этому

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) bar.getLayoutParams(); 
+0

Пробовал, но все еще не работает – ctarimli

+0

Опубликовать logcat? что поможет – user1282637

+0

Logcat имеет 6000lines. Я не знаю, какую часть для публикации :( – ctarimli

0

После @LocHa спросил меня тип раскладки, я пытаюсь меняющегося типа родительского компоновщика к LinearLayout который был RelativeLayout, и, наконец, работал на меня.

+1

Вот почему вам нужно знать его родительский тип макета. Поскольку его родительский RelativeLayout. Поэтому вы должны отнести layoutParams к RelativeLayout.LayoutParams , – Loc

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