-1

FrameLayoutの縦横比をPercentRelativeLayoutにプログラムで設定したいとします。 プログラムでPercentageRelativeLayoutの縦横比を設定する

<android.support.percent.PercentRelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:background="#000" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <FrameLayout 
     app:layout_widthPercent="100%" 
     app:layout_aspectRatio="178%" //aspect ratio 
     android:orientation="vertical" 
     android:id="@+id/liveTV_frame" 
     android:layout_marginBottom="50dp" 
     android:layout_centerInParent="true" 
     android:background="@android:color/background_dark" 
     android:keepScreenOn="true"> 
    </FrameLayout> 
</android.support.percent.PercentRelativeLayout> 
をしかし、私はプログラム的にそれを設定する必要があります。

私はすでにxmlでみました、それが働いています。

どうすればいいですか?画分を使用せずに、ただ私は私の答えを手の込んだ@azizbekian回答から

+0

[this](http://stackoverflow.com/questions/32292656/percentrelativelayout-how-to-set-the-height-programatically)解決策を手に入れることができます。 –

+0

@ジョイハード、あなたのcmtsに感謝します。しかし、高さではなくアスペクト比を設定する必要があります。 –

+3

何の理由もなく、人々がなぜこの質問をd​​ownvoteするのですか? –

答えて

3
PercentRelativeLayout layout = ...; 
PercentRelativeLayout.LayoutParams layoutParams 
      = (PercentRelativeLayout.LayoutParams) layout.getLayoutParams(); 
layoutParams.getPercentLayoutInfo().aspectRatio = ...; // float value 
layout.requestLayout(); 
+0

あなたの答えをありがとう。しかし、浮動小数点値は何ですか?私はフロートとして178%を設定する必要があります。 –

+0

その値がどのようにカウントされているかを見ることができます(https://github.com/android/platform_frameworks_support/blob/master/percent/src/android/support/percent/PercentLayoutHelper.java#L234)。 – azizbekian

+0

ありがとうございました@azizbekian、今うまく動作します。 –

0

、割合の設定float値:

<item name="aspect_ratio" type="fraction">178%</item> 
:あなたはほどXMLでの画分を指定

PercentRelativeLayout.LayoutParams params = (PercentRelativeLayout.LayoutParams) mFlPromoVideoContainer.getLayoutParams(); 
     PercentLayoutHelper.PercentLayoutInfo info = params.getPercentLayoutInfo(); 
     info.widthPercent = 1f; 
     info.aspectRatio = 1.78f;//178% 
     mFlPromoVideoContainer.requestLayout(); 

Javaの場合

PercentRelativeLayout.LayoutParams params = (PercentRelativeLayout.LayoutParams) mFlPromoVideoContainer.getLayoutParams(); 
     PercentLayoutHelper.PercentLayoutInfo info = params.getPercentLayoutInfo(); 
     info.widthPercent = 1f; 
     info.aspectRatio = getResources().getFraction(R.fraction.aspect_ratio, 1, 1); 
     mFlPromoVideoContainer.requestLayout(); 
関連する問題