2016-12-24 14 views
0

FrameLayoutでカスタムビューlyricViewを使用しています。これは、通常の場合にはうまく機能:いくつかの理由LayoutParamsの変更をプログラムでサポートするためのカスタムビューの作成

enter image description here

、私はlyricviewは2つのサイズでshowすることができたい、単一ラインサイズとフルスクリーンsize.Iユーザーが2つの間で切り替えることができるようで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のレイアウトを変更することができません。なぜなら、それが動作すれば歌詞は画面の中央に描画されるからです。

したがって、lyricViewをLayoutParamsの変更をプログラムでサポートする方法を教えてください。

答えて

0

ソリューション:

  1. 私はXMLであなたが歌詞表示に32dpの高さを設定しており、プログラムの中で、あなたがフレームレイアウトのレイアウトのparamsを変更していることに気づきます。歌詞ビューの高さはまだ32 dpですので、フレームレイアウトではない歌詞ビューのレイアウトパラメータを変更してください。

  2. 動作しない場合は、プログラムの歌詞ビューでrequestLayout()を呼び出してみてください。

0

私は問題がiconContainer.getHeight()

であると思いますが、あなたは、この行は、特定のビューの高さを作り出しますか?このコードがiconContainerよりも前に実行された場合(最も可能性の高いケース)、getHeightの場合は0が返されます。

viewTreeObserverGlobalLayoutChangeListenerを追加し、iconContainerを追加し、リスナーで高さを取得し、その高さを使用する必要があります。

関連する問題