LinearLayout无法转换为CoordinatorLayout

时间:2016-07-27 18:14:47

标签: android xml android-activity android-linearlayout

我有问题。我想以编程方式设置margin params,但它不起作用。 我有这个xml样式表:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">


</android.support.design.widget.AppBarLayout>


<ImageView
    android:layout_width="1440px"
    android:layout_height="1000px"
    android:id="@+id/post_view_photo"
    android:transitionName="@string/transition_image"/>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical|start"
    android:layout_margin="@dimen/fab_margin"
    app:layout_anchor="@+id/post_view_photo"
    android:src="@android:drawable/stat_notify_chat"
    app:layout_anchorGravity="bottom|end" />
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_anchor="@+id/post_view_photo"
    app:layout_anchorGravity="bottom|start">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text_bar"
        android:background="@color/colorPrimary">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/username_text"
            android:layout_gravity="center_vertical|start"
            app:layout_anchor="@+id/post_view_photo"
            app:layout_anchorGravity="bottom|start"
            android:textSize="25dp"
            android:transitionName="@string/transition_username"/>
    </LinearLayout>
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginTop="808px"
    android:id="@+id/view_bottom_layout">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:id="@+id/post_user_image"
                android:src="@drawable/back"
                android:paddingTop="10px"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/post_view_maintext"/>
        </LinearLayout>

    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#414141"/>
</LinearLayout>

我想以编程方式设置边距。但是我得到了这个错误:

java.lang.ClassCastException: android.support.design.widget.CoordinatorLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams

我在我的活动中这样做:

LinearLayout bottomLayout = (LinearLayout)findViewById(R.id.view_bottom_layout);
                        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) bottomLayout.getLayoutParams();
                        params.setMargins(0,imageView.getHeight(),0,0);
                        bottomLayout.setLayoutParams(params);

我该怎么做才能解决这个问题?我发现什么都没有帮助我。谢谢!

2 个答案:

答案 0 :(得分:5)

LayoutParams始终与您找到的布局的父布局相关联。

由于问题中的布局文件被剪裁,我假设根据输出view_bottom_layout在CoordinateLayout内。

如果是这样,您需要CoordinateLayout的参数并设置它们:

                    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) bottomLayout.getLayoutParams();
                    params.setMargins(0,imageView.getHeight(),0,0);
                    bottomLayout.setLayoutParams(params);

答案 1 :(得分:1)

您实际上必须将getLayoutParams()投射到其父级,在您的情况下,它是Coordinator Layout