2014-09-05 60 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 2014-09-05 14:21:46

+0

我想要设置参数的布局是“线性”,其父项是“相对”。我会尝试将relativeLayout更改为LinearLayout并将结果写入此处 – ctarimli 2014-09-05 14:39:14

+0

这很好用!谢谢@LocHa – ctarimli 2014-09-05 14:43:05

回答

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 2014-09-05 14:02:23

+0

发布logcat?这将有助于 – user1282637 2014-09-05 14:04:27

+0

Logcat有6000lines我不知道哪些部分要发布:( – ctarimli 2014-09-05 14:17:46

0

后@LocHa问我布局的类型,我尝试改变父布局的类型的LinearLayout这是RelativeLayout的,最后它为我工作。

+1

这就是为什么你需要知道它的父类型布局,因为它的父类是RelativeLayout所以你必须将layoutParams转换为RelativeLayout.LayoutParams 。 – Loc 2014-09-05 14:46:41