如何在按钮单击时显示/隐藏布局

3

我希望在第一个RelativeLayout中有地图,在第二个RelativeLayout中有列表。我想要一开始只显示具有地图的布局和一个按钮,当我点击按钮时,从右侧打开具有ListView的布局,并在其顶部添加新按钮。之前的按钮将被隐藏,并且屏幕将分为两个不同的布局。我已经做了一些工作,但从一开始就只得到了半屏幕。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ListView_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="1" >

    <RelativeLayout
        android:id="@+id/rl_ListView1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.5" >

        <Button
            android:id="@+id/getdirection"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:text="Get Directions" />

        <fragment
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            class="com.google.android.gms.maps.MapFragment" >
        </fragment>
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rl_ListView2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.5"
        android:visibility="invisible" >

        <Button
            android:id="@+id/hide"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:text="Get Directions" />

        <ListView
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/white"
            android:visibility="invisible" />
    </RelativeLayout>

</LinearLayout>

MainActivity

 show = (TextView)findViewById(R.id.getdirection);
         show1 = (TextView)findViewById(R.id.hide);
         rt = (RelativeLayout)findViewById(R.id.rl_ListView2);
show.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub

                            if(rt.getVisibility()==View.INVISIBLE)
                            {
                                rt.setVisibility(View.VISIBLE);

                            }
                           show.setVisibility(View.INVISIBLE);


                        }
                    });
show1.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub

                            if(rt.getVisibility()==View.VISIBLE)
                            {
                                rt.setVisibility(View.INVISIBLE);

                            }
                           show1.setVisibility(View.INVISIBLE);


                        }
                    });

在按钮点击时将布局的可见性设置为可见。 - Giant
尝试使用visibility属性的GONE选项,而不是INVISIBLE。 - Haresh Chhelana
5个回答

4
尝试这个:
从一开始由于权重属性,您将在一半屏幕中得到layout1。您可以尝试在一开始时不给出权重,并在按钮点击时以编程方式给出。
button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        button1.setVisibility(View.GONE);  //hide old button
        layout2.setVisibility(View.VISIBLE);  //show layout2
        //set Relativelayout 1 to half screen
        RelativaLayout.LayoutParams params = layout1.getLayoutParams(); 
        params.weight = 0.5;
        layout1.setLayoutParams(params);
    }
});

希望这有所帮助。

@PurpleDroid 我的问题是在活动开始时只有地图和一个按钮会显示在屏幕上,当点击按钮时,屏幕会分成两半。一半显示地图,另一半显示列表。 - user3683036
我不知道为什么,但 params.weight 给我返回错误,似乎没有将 weight 作为 param 的属性。 - user3683036
@user3683036 尝试使用LinearLayout.LayoutParams而不是RelativeLayout.LayoutParams。参考 - MysticMagicϡ
它对我没有帮助。@PurpleDroid - user3683036

1
将可见性设置为“Gone”而不是“Invisible”

0

你可以尝试使用Amiya建议的isShown()

<b>
button2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
   if(button1.isShown()) {

   // Your_Staff
    }
    else{
          // Your_Staff
    }
}
});
</b>

0
 button.setOnClickListener(this);
    public void onClick(View v) {
    layoutid.setVisibility(View.GONE);
    }

你想要实现什么,以及发生了什么事情,我无法理解你上面的问题。 - Giant
@Hak,我的问题是在活动开始时只有地图和一个按钮会显示在屏幕上,而在按钮点击时屏幕会分成两半。一半显示地图,另一半显示列表。现在在启动时我得到了分屏,但我希望在按钮点击时才出现。 - user3683036

0
从我的角度来看,您没有在两个RelativeLayout中将方向设置为垂直的LinearLayout。我还建议您将地图和Button也放在FrameLayout中,而不是RelativeLayout中。

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