我发现了很多关于View
visibility
的问题。我已经知道.GONE和。INVISIBLE
之间的区别。我不知道的是如何进行正确的切换来制作它们。VISIBLE/.GONE
每当点击一个按钮时。
以下是我的需求:我的linear layout
里面有buttons
个buttons
。我首先需要隐藏它们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,似乎工作正常)。
有关于此的任何想法吗?
答案 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);
}