从xml重新充气或重新加载布局

时间:2018-07-25 18:13:04

标签: android xml

我有一个类(例如classA),它扩展了framelayout,并且在该类的构造函数中,我调用了init方法,该方法会使布局xml膨胀。

我的xml几乎没有图像按钮,并已为其添加了侦听器。每当用户对其执行任何触摸操作时,按钮都会移动,因此它的x和y坐标会更改。当发生这种情况时,片段(classB)就会出现在classA之上。每当发生事件时,我都会隐藏该片段,并且必须在原始视图的顶部重新显示classA。

但是,当我重新显示classA时,它总是显示隐藏时存在的视图。我想要classA视图的原始布局,即希望classA视图刷新并从xml重新加载布局。我尝试使用invalidate(),但这没有帮助。我从classB调用resetView()方法将classA的视图重置为其原始布局。

XML布局(my_layout.xml)

<?xml version="1.0" encoding="utf-8"?>
<merge
    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"
    android:orientation="horizontal">

    <RelativeLayout
        android:id="@+id/my_RL"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/image_button_1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_gravity="left"
            android:layout_marginLeft="12"
            android:layout_alignParentStart="true"
            android:src="@drawable/image_icon"
            android:tint="@color/btn_color"
            android:visibility="visible"
            android:backgroundTint="@color/BackgroundPrimary"
            android:background="@drawable/btn_shape"
            />

        <LinearLayout
            android:id="@+id/chevron_right_bar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginLeft="btn_shape"
            android:layout_centerInParent="true"
            android:layout_toEndOf="@+id/image_button_1"
            android:layout_gravity="center">

            <ImageView
                android:id="@+id/chevron_right_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginLeft="6"
                android:alpha="2.0"
                android:contentDescription="@string/description_string"
                android:src="@drawable/chevron_green"
                android:visibility="visible"/>

            <ImageView
                android:id="@+id/chevron_right_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:alpha="2.0"
                android:layout_marginLeft="6"
                android:contentDescription="@string/description_string"
                android:src="@drawable/chevron_green"
                android:visibility="visible"/>

            <ImageView
                android:id="@+id/chevron_right_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="6"
                android:alpha="2.0"
                android:contentDescription="@string/description_string"
                android:src="@drawable/chevron_green"
                android:visibility="visible"/>
        </LinearLayout>

        <ImageButton
            android:id="@+id/placeholder_button"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:alpha="0.0"
            android:src="@drawable/image_icon"
            android:visibility="visible"
            android:backgroundTint="@color/BackgroundPrimary"
            tools:ignore="RelativeOverlap"
            android:background="@drawable/btn_shape"
            />

        <LinearLayout
            android:id="@+id/chevron_left_bar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="18"
            android:layout_centerInParent="true"
            android:layout_toStartOf="@+id/image_button_2"
            android:layout_gravity="center">

            <ImageView
                android:id="@+id/chevron_left_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginRight="6"
                android:alpha="2.0"
                android:contentDescription="@string/description_string"
                android:src="@drawable/chevron_red"
                android:visibility="visible"/>

            <ImageView
                android:id="@+id/chevron_left_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginRight="6"
                android:alpha="2.0"
                android:contentDescription="@string/description_string"
                android:src="@drawable/chevron_red"
                android:visibility="visible"/>

            <ImageView
                android:id="@+id/chevron_left_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginRight="6"
                android:alpha="2.0"
                android:contentDescription="@string/description_string"
                android:src="@drawable/chevron_red"
                android:visibility="visible"/>
        </LinearLayout>

        <ImageButton
            android:id="@+id/image_button_2"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_gravity="right"
            android:layout_marginRight="16"
            android:layout_alignParentEnd="true"
            android:src="@drawable/image_icon"
            android:tint="@color/some_color"
            android:visibility="visible"
            android:rotation="135"
            android:backgroundTint="@color/BackgroundPrimary"
            android:background="@drawable/btn_shape"
            />
    </RelativeLayout>
</merge>

我的框架布局课程

public class MyClass extends FrameLayout {
    private void initView(final Context context) {
        final LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mInflater.inflate(R.layout.my_layout, this, true);
    }

    public void resetView() {
        // Set the view to it's original layout.
        invalidate();
        requestLayout();
    }
}

是否可以通过编程方式重新加载或重新填充布局以再次显示原始视图?

0 个答案:

没有答案