在Android中隐藏运行时的线性布局

Vin*_*rya 4 android android-layout

我有以下布局

<merge>
    <LinearLayout
        android:id="@+id/ll_main"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        />
    <LinearLayout
        android:id="@+id/ll_sub"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        />  
</merge>
Run Code Online (Sandbox Code Playgroud)

我想要做的是在运行时显示/隐藏ll_sub布局,setVisibility()但它不起作用.

当我从xml中设置android:visibility="gone"(也是我已经检查过invisible)ll_sub然后它没有显示在屏幕上,这次当我用来setVisibility()在运行时显示这个布局时,它显示但是当我试图隐藏这个布局一旦它是显示然后它没有隐藏.

编辑

我试图通过单击按钮显示/隐藏此线性布局.

LinearLayout ll;
Button minimize;
int visibility=0;

@Override
public void onCreate(Bundle savedInstanceState)
{
    ll=(LinearLayout)findViewById(R.id.ll_sub);
    minimize=(Button)findViewById(R.id.minimize);
    minimize.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View view)
        {

            if(visibility==0)
            {
                visibility=2;
            }
            else
            {
                visibility=0;
            }
            ll.setVisibility(visibility);

        }
    });
}
Run Code Online (Sandbox Code Playgroud)

ska*_*bes 16

看起来您正在为更改视图可见性设置错误的常量.

GONE == 8
INVISIBLE == 4
VISIBLE == 0
Run Code Online (Sandbox Code Playgroud)

但是,您不应该依赖Android 碰巧指定的实际值来表示它们的常量.而是使用在视图类中定义的值:View.VISIBLE,View.INVISIBLE,和View.GONE.

// snip...
if(visibility == View.VISIBLE)
{
    visibility = View.GONE;
}
else
{
    visibility = View.VISIBLE;
}
ll.setVisibility(visibility);
Run Code Online (Sandbox Code Playgroud)

并且不要忘记调用invalidate()视图:)