2016-12-24 57 views
0

我在FrameLayout中使用自定义视图lyricView。它运作良好,在正常情况下:制作自定义视图以编程方式支持更改LayoutParams

enter image description here

出于某种原因,我想lyricview可以显示两种尺寸,单线规模和全屏size.I上的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"/> 
    
  • 抒情效果很好

enter image description here

点击(全屏模式)

  • 代码段后

         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; 
    
  • 变化layoutparameters不行

enter image description here

显然,我无法更改歌词布局失败,因为如果歌词正常工作,歌词将被画在屏幕的中心。

那么,如何让lyricView支持以编程方式更改LayoutParams?

回答

0

解决方案:

  1. 我注意到,在XML中已设置32dp的高度,以抒情视图和程序要更改框架布局的布局PARAMS。请更改歌词视图的布局参数而非帧格式,因为歌词视图的高度仍然为32 dp。

  2. 如果它不起作用请尝试在程序中的歌词视图上调用requestLayout()

0

我认为这个问题是iconContainer.getHeight()

你确定这条线生产的某些观点的高度?如果这段代码在iconContainer布局之前运行(这是最可能的情况),则getHeight将得到0。

如果出现这个问题,您应该在iconContainerviewTreeObserver上添加GlobalLayoutChangeListener,在侦听器中获取高度并使用该高度。

相关问题