Java 如何更改子级为GridLayout的RelativeLayout的宽度?

Java 如何更改子级为GridLayout的RelativeLayout的宽度?,java,android,xml,android-layout,Java,Android,Xml,Android Layout,这个想法是在RelativeLayout上的一个触摸听者的帮助下,改变它自身的大小(宽度和高度)。RelativeLayout中的子项是一个GridLayout,它本身由多个FrameLayout组成(我想这与此无关)。GridLayout的宽度和高度设置为与父项匹配(如RelativeLayout)。理论上,GridLayout应该在运行时根据其父级进行更改 但每当我尝试更改RelativeLayout的参数时,我都会收到以下错误消息: android.widget.RelativeLayou

这个想法是在RelativeLayout上的一个触摸听者的帮助下,改变它自身的大小(宽度和高度)。RelativeLayout中的子项是一个GridLayout,它本身由多个FrameLayout组成(我想这与此无关)。GridLayout的宽度和高度设置为与父项匹配(如RelativeLayout)。理论上,GridLayout应该在运行时根据其父级进行更改

但每当我尝试更改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">
我已尝试将RelativeLayout.LayoutParams更改为其他类,以解决异常错误。但我只是遇到了其他类似的异常错误。我想我可能错过了什么

甚至可以使用上述XML布局结构并在运行时生成所需的行为吗

编辑


也许我应该提到,带有GridLayout的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" />

您想为自己设置
LayoutParams

视图的
LayoutParams
应为该视图的父视图的类型

由于您的
RelativeLayout
包含在
ConstraintLayout
中,因此您的
LayoutParams
应为
ConstraintLayout.LayoutParam


对于仅具有宽度/高度的
LayoutParams
,您可以使用
ViewGroup。LayoutParams

显示代码的其余部分,FrameLayout类型的任何字段,还显示堆栈跟踪指出异常是在哪一行引发的?堆栈跟踪本身也会很好哦,哇,实际上我发现我确实在其他地方设置了一个与我上面描述的场景完全无关的FrameLayout,导致了错误(很抱歉)。摆脱了这个问题,编辑了这个问题,因为我仍然得到一个异常错误,请参见上文。这和我亲戚的父母有关。还扩展了XML文件,这样您就可以看到ConstrainedLayout了。我在谷歌上搜索,不知怎么的,我显然遇到了这个错误,因为我正在调用RelativeLayout的父级。但我只想更改保存GridLayout的RealtiveLayout的大小。如何执行此操作?尝试使用ViewGroup.LayoutParams时出现异常错误,无法将其设置为constraint.Buuut,将其设置为ConstraintLayout.LayoutParams效果非常好。非常感谢,我花了好几个小时才把这件事做好。
<?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)