在我的应用中,我的布局如下:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/belowAcionBar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal">
</LinearLayout>
</FrameLayout>
我需要动态设置LinearLayout belowAcionBar
的高度。此视图需要显示在ActionBar
下方。
使用以下代码设置高度:
View panelView = findViewById(R.id.belowAcionBar); // This gives object of LinearLayout
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) panelView.getLayoutParams();
params.height = 48; // In dp
panelView.setLayoutParams(params);
问题1:
由于belowAcionBar
是LinearLayout
,我首先尝试将LayoutParams
用作LinearLayout.LayoutParams
,而不是FrameLayout.LayoutParams
。
但它会导致运行时错误Can't cast FrameLayout.LayoutParams to LinearLayout.LayoutParams
。
为什么panelView.getLayoutParams()
为FrameLayout
?
问题2:
即使在使用上述代码后,我的观看次数belowAcionBar
似乎远远低于48dp
。似乎它被隐藏在ActionBar
后面。
问题3:
如果我将布局更改为:
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout android:orientation="vertical"
android:id="@+id/belowAcionBar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/purple_dark" >
</LinearLayout>
</LinearLayout>
</FrameLayout>
并将java代码更改为:
View panelView = findViewById(R.id.belowAcionBar);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) panelView.getLayoutParams();
params.height = 48; // In dp
panelView.setLayoutParams(params);
然后我的代码完美运行,但增加了额外的布局。它为什么现在正在运作?
提前致谢。