2017-12-11 5 views
0

アイデアは、RelativeLayout上のタッチリスナーの助けを借りて、自身のサイズ(幅と高さ)を変更することです。 RelativeLayoutの中の子はGridLayoutです。それ自体は複数のFrameLayouts(これは関係ないと思います)から構成されています。 GridLayoutの幅と高さはmatch_parentに設定されています(RelativeLayoutの場合のように)。理論では、GridLayoutは実行時にその親に応じて変更する必要があります。GridLayoutを子として持つRelativeLayoutの幅を変更するにはどうすればよいですか?

しかし、私は、私は、このエラーメッセージを取得RelativeLayoutのパラメータ変更しようとするたびに:

android.widget.RelativeLayout $ LayoutParamsがandroid.support.constraint.ConstraintLayout $ LayoutParams

にキャストすることはできませんここで

は、XMLレイアウトの関連する部分である

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/maingrid"> 


     <GridLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:columnCount="4" 
      android:rowCount="4" 
      android:id="@+id/grid"> 

      <FrameLayout 
       android:layout_width="0dp" 
       android:layout_height="0dp" 
       android:layout_columnWeight="1" 
       android:layout_rowWeight="1"> 

ここでは、コードです

  private RelativeLayout Wall = findViewById(R.id.maingrid); 

      Wall.setLayoutParams(new RelativeLayout.LayoutParams(newWidth,newHeight)); 

RelativeLayout.LayoutParamsを例外エラーを回避しようとする他のクラスに変更しようとしました。しかし私はちょうど私の方法で投げられた他の同様の例外エラーを得る。私は何かが欠けているかもしれないと思う。

は、グリッドレイアウトを持つXMLファイルをに含まれていること

編集


多分

私が言及しているはずですが、上記のXMLレイアウト構造を使用して、実行時に必要な行動を生成することも可能です

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.example.lucy.pixelli.MainActivity" 
    tools:showIn="@layout/activity_main"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </RelativeLayout> 

    <include layout="@layout/grid" /> 

以下の主なレイアウトは、これは完全なエラーメッセージ

です
FATAL EXCEPTION: main 
Process: com.example.lucy.pixelli, PID: 11119 
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.support.constraint.ConstraintLayout$LayoutParams 
at android.support.constraint.ConstraintLayout.getViewWidget(ConstraintLayout.java:877) 
at android.support.constraint.ConstraintLayout.setChildrenConstraints(ConstraintLayout.java:643) 
at android.support.constraint.ConstraintLayout.updateHierarchy(ConstraintLayout.java:631) 
at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:971) 
at android.view.View.measure(View.java:19978) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6127) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
at android.view.View.measure(View.java:19978) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6127) 
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714) 
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:786) 
at android.view.View.measure(View.java:19978) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6127) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) 
at android.view.View.measure(View.java:19978) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6127) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
at android.view.View.measure(View.java:19978) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6127) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
at android.view.View.measure(View.java:19978) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6127) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
at android.view.View.measure(View.java:19978) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6127) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:694) 
at android.view.View.measure(View.java:19978) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2405) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1457) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1720) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1333) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6675) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:887) 
at android.view.Choreographer.doCallbacks(Choreographer.java:699) 
at android.view.Choreographer.doFrame(Choreographer.java:634) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:873) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6349) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)  
+0

ViewGroup.LayoutParamsはあなたのコードの残りの部分を表示するタイプのすべてのフィールドを使用できますか?スタックトレース自体もうまくいくでしょう。 – elmorabea

+0

ああ、実際に、上記のシナリオとはまったく無関係にFrameLayoutを設定していて、エラーが発生していることが分かりました。それを取り除き、質問を編集しました。なぜなら、上記の例外エラーがまだ表示されているからです。それは私のRelativeLayoutの親と関係があります。 XMLファイルを拡張して、ConstrainedLayoutが見えるようにしました。 – user3498845

+0

私は、RelativeLayoutの親への呼び出しを行っているため、どうやらこのエラーが発生しています。しかし、私が望むのは、GridLayoutを保持するRealtiveLayoutのサイズを変更することだけです。それ、どうやったら出来るの ? – user3498845

答えて

0

LayoutParamsRelativeLayoutに設定します。

LayoutParamsは、そのビューの親の型である必要があります。

RelativeLayoutConstraintLayoutに含まれているため、LayoutParamsConstraintLayout.LayoutParamである必要があります。あなたが持っているでframeLayout

のみ width/heightLayoutParamsについては

、あなただけのスタックトレースは、例外がで投げられると言うんどのラインを示しても、

+0

ViewGroupを使用して試行しました。LayoutParamsに制約に設定できない例外エラーが発生しました。 – user3498845

+0

Buuut、ConstraintLayout.LayoutParamsに設定すると完全に動作します。どうもありがとうございました。 – user3498845

関連する問題