如何在Android中一次隐藏Layout中的所有元素?

4

我正在使用eclipse开发Android应用程序。

我有一个XML文件,其中有两个并排的线性布局。左边的布局有几个按钮,这些按钮可以让右边的内容可见。然而,我不仅希望这些按钮可以使特定的内容可见,还要隐藏(setVisibility.GONE)该布局中的所有其他内容。我已经尝试过removeAllViews,但这对我来说不太合适,因为它会删除它们。所以我的想法是将每个单独的内容都隐藏(设置可见性为gone),然后将我希望显示的内容可见。我提出这个问题的原因是,对于所有12个按钮的24个内容,设置可见性为gone需要太长时间。

提前致谢

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/alap"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/imageView3"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/imageView4" >

        <LinearLayout
            android:layout_width="197dp"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/lewis" />

            <Button
                android:id="@+id/first"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/first" />

            <Button
                android:id="@+id/second"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/second" />

        </LinearLayout>
    </ScrollView>

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:scaleType="center"
        android:src="@drawable/cpr1" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:scaleType="center"
        android:src="@drawable/epizodok" />

    <LinearLayout
        android:id="@+id/def"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/imageView3"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/scrollView2"
        android:layout_toRightOf="@+id/scrollView2"
        android:orientation="vertical"
        android:visibility="visible" >

        <ImageView
            android:id="@+id/image1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/lewis"
            android:visibility="gone" />

        <ImageView
            android:id="@+id/image2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"
            android:visibility="gone" />

    </LinearLayout>

</RelativeLayout>

分享你的布局代码... - Pankaj Kumar
д»ҺActivityдёӯиҜ»еҸ–@+id/defзҡ„LinearLayout idпјҢ然еҗҺи®ҫзҪ®иҜҘеёғеұҖзҡ„еҸҜи§ҒжҖ§гҖӮиҝҷе°ҶжҳҫзӨә/йҡҗи—ҸиҜҘеёғеұҖдёӯзҡ„жүҖжңүи§ҶеӣҫгҖӮ - Pankaj Kumar
你能把它转换成代码吗?ID 是 "def"。这样做不会隐藏布局吗? - BarniPro
@PankajKumar 我已经成功编写了以下代码 codeView def = (View) findViewById(R.id.def); def.setVisibility(View.GONE);code 但是这会隐藏整个布局,而我只想隐藏所有子元素,而不是布局本身。 - BarniPro
你是正确的。在这里,你可以获得帮助:https://dev59.com/sWw05IYBdhLWcg3wuUGY - Pankaj Kumar
3个回答

9

请尝试以下操作...

<LinearLayout
        android:id="+id/ll"
        android:layout_width="197dp"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <!-- All content which you hide/show put here -->

</LinearLayout>

现在你的类文件中读取了这个。


(注:保留HTML标记)
LinearLayout ll = (LinearLayout) findViewById(R.id.ll);

根据您的要求,您可以隐藏/显示此布局及其所有内容。

例如:要隐藏,请执行以下操作:

ll.setVisibility(View.GONE);

为展示而作。
ll.setVisibility(View.VISIBLE);

当您隐藏/显示LinearLayout时,与此布局相关的所有内容也会自动隐藏/显示。

6

简单来说,只需在您的“def”线性布局中再添加一个垂直布局。根据您的需要更改其可见性即可。

<LinearLayout
        android:id="@+id/def"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/imageView3"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/scrollView2"
        android:layout_toRightOf="@+id/scrollView2"
        android:orientation="vertical"
        android:visibility="visible" >
     <LinearLayout
        android:id="@+id/Subdef"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <ImageView
            android:id="@+id/image1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/lewis"
            android:visibility="gone" />

        <ImageView
            android:id="@+id/image2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"
            android:visibility="gone" />
</LinearLayout>
    </LinearLayout>

5
不需要隐藏视图,而是使用ViewFlipper概念。只需在您的xml文件中声明视图翻转器,并使用两个线性布局,如下所示:
    <Viewflipper android:id="@+id/myViewFlipper" android:layout_height="wrap_content" android:layout_width="match_parent">
    <LinearLayout android:id="@+id/layout1" android:layout_height="wrap_content" android:layout_width="match_parent"></LinearLayout>
    <LinearLayout android:id="@+id/layout2" android:layout_height="wrap_content" android:layout_width="match_parent"></LinearLayout>
   </Viewflipper>

在你的Java代码中获取ViewFlipper引用,可以按照如下方式进行:
Viewflipper mFlipper = (Viewflipper)findViewById(R.id.myViewFlipper);

使用mFlipper.showNext()和mFlipper.showPrevious()方法来隐藏和显示你的布局,就是这样。

谢谢您的回答,我遇到的唯一问题是用户可能不想继续前往下一个。我使用了子布局。 - BarniPro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接