切换视图可见性

时间:2017-03-03 13:13:09

标签: android view toggle visibility

我发现了很多关于View visibility的问题。我已经知道.GONE和。INVISIBLE之间的区别。我不知道的是如何进行正确的切换来制作它们。VISIBLE/.GONE每当点击一个按钮时。

以下是我的需求:我的linear layout里面有buttonsbuttons。我首先需要隐藏它们linear layout,所以我将<LinearLayout android:id="@+id/feelings_layout" android:layout_below="@+id/feeling_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:visibility="gone"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/happy_btn" android:layout_width="0dp" android:layout_weight="1" android:layout_height="46dp" android:text="Happy"/> <Button android:id="@+id/sad_btn" android:layout_width="0dp" android:layout_weight="1" android:layout_height="46dp" android:text="Sad"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/love_btn" android:layout_width="0dp" android:layout_weight="1" android:layout_height="46dp" android:text="in love"/> <Button android:id="@+id/mad_btn" android:layout_width="0dp" android:layout_weight="1" android:layout_height="46dp" android:text="mad"/> </LinearLayout> </LinearLayout> 设置为已消失:

VISIBLE

然后,当点击一个按钮时,我会点击GONE,当按下相同的button时再次{。1}}:

Button feelingsButton = (Button)contentView.findViewById(R.id.feeling_btn);
    feelingsButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "button clicked", Toast.LENGTH_LONG).show();
            feelingsButtonsLayout = (LinearLayout)contentView.findViewById(R.id.feelings_layout);
            if(feelingsButtonsLayout.getVisibility() == View.GONE){
                Log.d("-----------", "gone");
                feelingsButtonsLayout.setVisibility(View.VISIBLE);

            }else{
                Log.d("-----------", "not gone");
                for ( int i = 0; i < feelingsButtonsLayout.getChildCount();  i++ ){
                    View view = feelingsButtonsLayout.getChildAt(i);
                    view.setVisibility(View.GONE);
                }
                feelingsButtonsLayout.setVisibility(View.GONE);
            }
        }
    });

所有内容似乎都运行良好,但是当我第三次点击同一个按钮,期望它生成布局VISIBLE时,即使我的log说明了该视图,它也不会再显示是gone(仅查看Logcat,似乎工作正常)。

有关于此的任何想法吗?

2 个答案:

答案 0 :(得分:2)

您必须再次设置所有按钮的可见性,这些按钮在第二次点击时设置为GONE,因为

第一次点击=&gt;设置布局可见,所有按钮都已显示

第二次点击=&gt;设置布局以及所有按钮

第三次点击=&gt;设置布局可见但按钮仍然不可见,在第二次单击时设置为已消失

  if(feelingsButtonsLayout.getVisibility() == View.GONE){
                Log.d("-----------", "gone");
                for ( int i = 0; i < feelingsButtonsLayout.getChildCount();  i++ ){
                    View view = feelingsButtonsLayout.getChildAt(i);
                    view.setVisibility(View.VISIBLE);
                }
                feelingsButtonsLayout.setVisibility(View.VISIBLE);

            }else{
                Log.d("-----------", "not gone");
                for ( int i = 0; i < feelingsButtonsLayout.getChildCount();  i++ ){
                    View view = feelingsButtonsLayout.getChildAt(i);
                    view.setVisibility(View.GONE);
                }
                feelingsButtonsLayout.setVisibility(View.GONE);
            } 

您可以移除这两个循环,只需设置container布局可见性

即可
  if(feelingsButtonsLayout.getVisibility() == View.GONE){
                Log.d("-----------", "gone");
                feelingsButtonsLayout.setVisibility(View.VISIBLE);

            }else{
                Log.d("-----------", "not gone");
                feelingsButtonsLayout.setVisibility(View.GONE);
            } 

答案 1 :(得分:1)

问题是您要将GONE设置为所有单个按钮,但仅在布局上设置VISIBLE而不是在按钮上设置。{/ p>

当父布局设置为GONE时,无需隐藏所有按钮。您可以从else案例中删除以下代码

for ( int i = 0; i < feelingsButtonsLayout.getChildCount();  i++ ){
                View view = feelingsButtonsLayout.getChildAt(i);
                view.setVisibility(View.GONE);
            }