我在FrameLayout中使用自定义视图lyricView。它在正常情况下运作良好:
出于某种原因,我希望lyricview可以以两种尺寸,单行尺寸和全屏尺寸显示。我在FrameLayout上注册一个OnClickListener,这样用户可以通过点击窗口在两种尺寸之间切换。所以我尝试在程序中更改LayoutParams。
点击之前(单线模式)
布局文件
<io.hefuyi.listener.widget.LyricView
android:id="@+id/lyric_view"
android:layout_marginTop="55dp"
android:layout_width="match_parent"
android:layout_height="32dp"
android:layout_gravity="center"
android:visibility="visible"/>
歌词效果很好
代码段
FrameLayout.LayoutParams lyricLayout = (FrameLayout.LayoutParams) lyricView.getLayoutParams();
lyricLayout.height = FrameLayout.LayoutParams.MATCH_PARENT;
lyricLayout.topMargin = DensityUtil.dip2px(mContext, 55);
lyricLayout.bottomMargin = iconContainer.getHeight();
lyricView.setLayoutParams(lyricLayout);
isLyricFullScreen = true;
更改布局参数不起作用
显然,我没有改变lyricview布局失败,因为如果它有效,歌词将在屏幕中心绘制。
那么,如何让lyricView以编程方式支持更改LayoutParams?
答案 0 :(得分:0)
解决方案:
我注意到在xml中你已经将32dp的高度设置为歌词视图,而在程序中你正在改变帧布局的布局参数。请更改歌词视图的布局参数而不是帧布局,因为歌词视图的高度仍为32 dp。
如果不起作用,请尝试在程序中的歌词视图中调用requestLayout()
。
答案 1 :(得分:0)
我认为问题出在iconContainer.getHeight()
你确定这条线会产生某个视图的高度吗?如果这段代码在iconContainer
布局之前运行(这是最可能的情况),那么getHeight
将得到0。
如果出现此问题,您应该向GlobalLayoutChangeListener
viewTreeObserver
添加iconContainer
,在听众中获取高度并使用该高度。