私の最初のコード行は、オーバーライドされたメソッドonGlobalLayout()
の中にあります。
_img.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 100));
_
オーバーライドされたメソッドで発生するClassCastExceptiononGlobalLayout()
-
エラーログ:
_09-02 14:25:35.326: E/AndroidRuntime(5187): Java.lang.ClassCastException: Android.view.ViewGroup$LayoutParams cannot be cast to Android.support.v4.view.ViewPager$LayoutParams
09-02 14:25:35.326: E/AndroidRuntime(5187): at Android.support.v4.view.ViewPager.onMeasure(ViewPager.Java:1319)
09-02 14:25:35.326: E/AndroidRuntime(5187): at Android.view.View.measure(View.Java:15181)
09-02 14:25:35.326: E/AndroidRuntime(5187): at Android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.Java:617)
09-02 14:25:35.326: E/AndroidRuntime(5187): at Android.widget.RelativeLayout.onMeasure(RelativeLayout.Java:399)
09-02 14:25:35.326: E/AndroidRuntime(5187): at Android.view.View.measure(View.Java:15181)
09-02 14:25:35.326: E/AndroidRuntime(5187): at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:4814)
09-02 14:25:35.326: E/AndroidRuntime(5187): at Android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.Java:1390)
_
そして、他のSOの投稿に示されているように、上記のエラーを解決するために次のことを行うと:
_img.setLayoutParams(new ViewPager.LayoutParams(ViewPager.LayoutParams.MATCH_PARENT, 100));
_
次に、コンパイル時エラーが発生します。
_The constructor ViewPager.LayoutParams(int, int) is undefined
_
XmlのViewPagerは次のように定義されます。
_<Android.support.v4.view.ViewPager
Android:id="@+id/HView"
Android:layout_width="560dp"
Android:layout_height="255dp"
Android:layout_centerHorizontal="true"
Android:layout_marginLeft="160sp"
Android:layout_marginTop="110sp"
Android:layout_marginBottom="80sp">
</Android.support.v4.view.ViewPager>
_
画像にはすでにレイアウトパラメータがあります。それらを新しいオブジェクト(この場合は間違ったタイプであり、ViewPager
は_ViewPager.LayoutParams
_であると想定します)に置き換える代わりに、次のように既存のレイアウトパラメーターを変更できます。
_ViewGroup.LayoutParams params = img.getLayoutParams();
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
params.height = 100;
img.requestLayout();
_
onGlobalLayout()
で無条件に再レイアウトを要求することは悪い考えであり、無限のレイアウトパスにつながる可能性があることに注意してください。私はこれが事実であるかどうかを自分で確認していません。
使用しているLayoutParam
クラスが正しい親Layoutクラスのものであることを確認する必要があります。そして、子ビューに割り当てるサイズを知る必要があるViewGroup
の親として、ViewPager
が置かれているView
のLayoutParamsを設定する必要があります。たとえば、ViewGroup
がRelativeLayout
の場合、RelativeLayout.LayoutParams
クラスを使用する必要があります。
次のことを試すことができます。
img.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 100));
このようにします
img.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100));
[〜#〜] update [〜#〜]
LayoutParams params = img.getLayoutParams();
params.width = LayoutParams.MATCH_PARENT;
params.height = 100;
img.setLayoutParams(params);