17

私の最初のコード行は、オーバーライドされたメソッド内にありますonGlobalLayout():

img.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 100));

オーバーライドされたメソッドで ClassCastException が発生onGlobalLayout()-

エラーログ:

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>
4

3 に答える 3

30

画像には既にレイアウト パラメータがあります。ViewPagerそれらを新しいオブジェクト (この場合は間違った型であり、 であると予想されます)に置き換える代わりに、ViewPager.LayoutParams既存のレイアウト パラメータを次のように変更できます。

ViewGroup.LayoutParams params = img.getLayoutParams();
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
params.height = 100;
img.requestLayout();

で無条件に再レイアウトを要求onGlobalLayout()することは悪い考えであり、無限のレイアウト パスにつながることに注意してください。これが事実であるかどうかは、私自身は確認していません。

于 2013-09-02T09:15:19.713 に答える
0

こうすれば

img.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100));

アップデート

 LayoutParams params = img.getLayoutParams();
         params.width = LayoutParams.MATCH_PARENT;
         params.height = 100;
         img.setLayoutParams(params);
于 2013-09-02T09:05:46.490 に答える