2016-06-02 4 views
0

線形レイアウトの重力をプログラムで親の中心に変更する必要がある場合は、何らかの理由でそれがクラッシュ:レイアウトの重力をLinearLayoutに設定しようとするとClassCastExceptionが発生する

Non-fatal Exception: java.lang.ClassCastException 
android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams 

をI次のXMLを持っている:

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:animateLayoutChanges="true" 
     android:clickable="true" 
     android:orientation="vertical"> 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleType="centerCrop" 
      android:src="@drawable/bg02" /> 

     <LinearLayout 
      android:id="@+id/myLinearLayout" 
      android:layout_width="300dp" 
      android:layout_marginTop="30dp" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:orientation="vertical"> 

      ... 

      ... 

     </LinearLayout> 

</RelativeLayout> 

コード:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
        params.weight = 1.0f; 
        params.gravity = Gravity.CENTER; 

myLinearLayout.setLayoutParams(params); 
  • 私はそれが必要と思ったので、私もRelativeLayout.LayoutParamsLinearLayout.LayoutParamsを変えてみました親自体(この場合はRelativeLayout)に相対的であるが、それほど変わらない。
+2

..私はそれを試してみましたが、それは助けていない(私は記事の最後に書いたように)...おそらくあなたは間違ってインポートした 'LayoutParams' –

答えて

1

LinearLayoutRelativeLayout内部にあるので、あなたがRelativeLayoutのParam代わりのLinearLayoutのPARAMの、あなたがこのようなルールを追加に必要RelativeLayoutのPARAMに追加する必要がRelativeLayout.LayoutParams代わり

+0

インポートをチェックしますが、私はRelativeLayoutですべてLinearLayout.LayoutParamsを置き換えます。 LayoutParams – BVtp

+0

それ以外に、RelativeLayoutに変更すると、重力をパラメータに設定することはできません(とその点については重さ) – BVtp

0

LinearLayout.LayoutParamsである必要があります。

RelativeLayout.LayoutParams params = 
    new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); 
//params.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); 
//params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); 
+0

ほとんどの場合、レイアウトの内容の半分が左に揃えられています。 xml内に出力されます – BVtp

+0

レイアウトパラメータを追加すると、xml ..で定義したmargin&paddingが省略されますので、再度追加する必要があります。 – Mehta

+0

params.setMargins(0、30、0、0); // left、top、right、bottom – Mehta

0

LinearlayoutはRelayiveの子です前のレスポンダによって指摘されたレイアウト。リニアレイアウトをrelativelayoutの中央に配置する場合は、次のようにルールを追加できます。

リニアレイアウトを中央に配置すると仮定します。そうでなければ、あなたの目的に合ったルールを見つけることができます。

+0

最初の行は '互換性のない型。必須:android.widget.RelativeLayout.LayoutParams。見つかった:android.view.ViewGroup.LayoutParams' – BVtp

関連する問題