切换视图可见性
Toggle View Visibility
我发现了很多关于 View
visibility
的问题。我已经知道 .GONE 和 .INVISIBLE
之间的区别。我不知道的是如何进行适当的切换以使它们 .VISIBLE/.GONE
每当单击按钮时。
这是我 need:I 有一个 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
,在按下相同的 button
时再次生成 .GONE
:
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,它似乎工作正常)。
对此有什么想法吗?
您必须再次设置第二次点击时设置为 GONE
的所有按钮的可见性,因为
第一次点击 => 将布局设置为可见并且所有按钮都已可见
第二次点击 => 设置布局以及所有按钮
第三次点击 => 将布局设置为可见,但按钮仍然不可见,这些按钮在第二次点击时设置为消失
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);
}
问题是您正在为所有单独的按钮设置 GONE
,但只在布局上而不是在按钮上设置 VISIBLE
。
当父布局设置为GONE
时,无需隐藏所有按钮。您可以从 else
案例
中删除以下代码
for ( int i = 0; i < feelingsButtonsLayout.getChildCount(); i++ ){
View view = feelingsButtonsLayout.getChildAt(i);
view.setVisibility(View.GONE);
}
我发现了很多关于 View
visibility
的问题。我已经知道 .GONE 和 .INVISIBLE
之间的区别。我不知道的是如何进行适当的切换以使它们 .VISIBLE/.GONE
每当单击按钮时。
这是我 need:I 有一个 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
,在按下相同的 button
时再次生成 .GONE
:
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,它似乎工作正常)。
对此有什么想法吗?
您必须再次设置第二次点击时设置为 GONE
的所有按钮的可见性,因为
第一次点击 => 将布局设置为可见并且所有按钮都已可见
第二次点击 => 设置布局以及所有按钮
第三次点击 => 将布局设置为可见,但按钮仍然不可见,这些按钮在第二次点击时设置为消失
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);
}
问题是您正在为所有单独的按钮设置 GONE
,但只在布局上而不是在按钮上设置 VISIBLE
。
当父布局设置为GONE
时,无需隐藏所有按钮。您可以从 else
案例
for ( int i = 0; i < feelingsButtonsLayout.getChildCount(); i++ ){
View view = feelingsButtonsLayout.getChildAt(i);
view.setVisibility(View.GONE);
}