setVisibility(View.VISIBLE)失效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了setVisibility(View.VISIBLE)失效相关的知识,希望对你有一定的参考价值。

我在主页面xml文件中引入一个XML头部文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="@drawable/top_background">

<LinearLayout
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:paddingRight="3dp"

android:gravity="center" >
<Button
android:id="@+id/edit_button"
android:layout_width="40dp"
android:layout_height="30dp"
android:gravity="center"
android:background="@drawable/top_button_style"
android:visibility="invisible"
android:textColor="#ffffff"
android:text="编辑" /> ///// 按钮设置为隐藏状态
</LinearLayout>
</RelativeLayout>
按钮设置为隐藏状态
代码中根据需求把button设置为显示
LayoutInflter inflater = LayoutInflater.from(this);
RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.top, null);
Button editButton = (Button)layout.findViewById(R.id.edit_button);
layout.setVisibility(View.VISIBLE);
layout.requestLayout();
运行显示无效,求解
ayout.setVisibility(View.VISIBLE); 数据有点急写错了,应该是

editButton.setVisibility(View.VISIBLE);

参考技术A editButton.setVisibility(View.VISIBLE);追问

不行的,有这样写,没效果

追答

你可以把代码全部贴出来看看,xml文件的代码就不要了

Android:为什么setVisibility(View.GONE);或setVisibility(View.INVISIBLE);不工作

我希望我的DatePicker和按钮在开始时看不见。当我按下我的魔法按钮时,我想设置可见性(View.Visible);

这里的问题是当我setVisibility(View.GONE)setVisibility(View.INVISIBLE)没有任何变化,组件仍然可见。

final DatePicker dp2 = (DatePicker) findViewById(R.id.datePick2);
final Button btn2 = (Button) findViewById(R.id.btnDate2);

dp2.setVisibility(View.GONE);
dp2.setVisibility(View.INVISIBLE);
btn2.setVisibility(View.GONE);
btn2.setVisibility(View.INVISIBLE);

btn2.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        TextView txt2 = (TextView) findViewById(R.id.txt2);
        txt2.setText("You selected " + dp2.getDayOfMonth()
            + "/" + (dp2.getMonth() + 1) + "/" + dp2.getYear());
    }
});
答案

我看到了很多错误。对于初学者,您没有定义魔术按钮,也没有事件处理程序。

你不应该使用:

dp2.setVisibility(View.GONE);
dp2.setVisibility(View.INVISIBLE); 

仅使用两者中的一个。来自Android documentation

View.GONE此视图不可见,并且不需要任何空间用于布局。

View.INVISIBLE此视图不可见,但它仍占用布局空间。

在您的示例中,您将使用View.GONE覆盖View.INVISIBLE赋值。


尝试更换:

final DatePicker dp2 = new DatePicker(this)

有:

DatePicker dp2 = (DatePicker) findViewById(R.id.datePick2);  

与其他小部件类似:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);

        final DatePicker dp2 = new DatePicker(this);
        final Button btn2 = new Button(this);
        final Button magicButton = new Button(this);
        final TextView txt2 = new TextView(TestActivity.this);

        dp2.setVisibility(View.GONE);
        btn2.setVisibility(View.GONE);
        btn2.setText("set Date");

        btn2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                txt2.setText("You selected "
                    + dp2.getDayOfMonth() + "/" + (dp2.getMonth() + 1) 
                    + "/" + dp2.getYear());
            }
        });

        magicButton.setText("Magic Button");
        magicButton.setOnClickListener(new View.OnClickListener()    
            public void onClick(View arg0) {
                dp2.setVisibility(View.VISIBLE);
                btn2.setVisibility(View.VISIBLE);
            }
        });

    ll.addView(dp2);
    ll.addView(btn2);
    ll.addView(magicButton);
    ll.addView(txt2);

    setContentView(ll);
}
另一答案

您可以将其视为CSS样式可见性和显示。

<div style="visibility:visible; display:block">
    This is View.VISIBLE : Content is displayed normally.
</div>

<div style="visibility:hidden; display:block">
    This is View.INVISIBLE : Content is not displayed, but div still takes up place, but empty.
</div>

<div style="display:none">
    This is View.GONE : Container div is not shown, you can say the content is not displayed.
</div>
另一答案

首先看看你的代码:

dp2.setVisibility(View.GONE);
dp2.setVisibility(View.INVISIBLE);
btn2.setVisibility(View.GONE);
btn2.setVisibility(View.INVISIBLE);

在这里,您将可见性设置为相同的字段,这就是问题所在。我给那个sample demo一个样本

另一答案

今天我有一个场景,我正在执行以下操作:

myViewGroup.setVisibility(View.GONE);

就在下一帧,我正在其他地方执行if检查以查看该视图的可见性状态。你猜怎么着?以下条件正在通过:

if(myViewGroup.getVisibility() == View.VISIBLE) {
    // this if check was fulfilled magically
}

放置你看到的断点,可见性会变为GONE,但在下一帧上它会神奇地变成VISIBLE。我试图了解这是怎么回事。

原来有一个动画应用于这个视图,内部导致视图改变它对VISIBLE的可见性,直到完成动画:

public void someFunction() {
    ...
    TransitionManager.beginDelayedTransition(myViewGroup);
    ...

    myViewGroup.setVisibility(View.GONE);
}

如果你进行调试,你会看到myViewGroup确实将其可见性改为GONE,但是在下一帧上它会再次变为可见,以便动画运行。

因此,如果您遇到这种情况,请确保您没有在动画视图中执行if检查。

您可以通过View.clearAnimation()删除视图上的所有动画。

另一答案

View.GONE此视图不可见,并且不需要任何空间用于布局。

View.INVISIBLE此视图不可见,但它仍占用布局空间。

dp2.setVisibility(View.GONE);
dp2.setVisibility(View.INVISIBLE);
btn2.setVisibility(View.GONE);
btn2.setVisibility(View.INVISIBLE);
另一答案

View.GONE使视图不可见,而视图不占用布局中的空间。 View.INVISIBLE使视图不可见仍然占用空间。

你首先在同一个视图上使用GONE然后INVISIBLE。因为代码是按顺序执行的,首先视图变为GONE然后它被仍然占用空间的INVISIBLE类型覆盖。

您应该在按钮上添加按钮侦听器,并在onClick()方法内部使视图可见。这应该是你在onCreate()方法中根据我的逻辑。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_setting);

    final DatePicker dp2 = (DatePicker) findViewById(R.id.datePick2);
    final Button btn2 = (Button) findViewById(R.id.btnDate2);

    dp2.setVisibility(View.INVISIBLE);
    btn2.setVisibility(View.INVISIBLE);

    bt2.setOnClickListener(new View.OnCLickListener(){ 
    @Override
    public void onClick(View view)
    {
        dp2.setVisibility(View.VISIBLE);
        bt2.setVisibility(View.VISIBLE);
    }
  });
}

我认为这应该很容易。希望这可以帮助。

另一答案

因为您将可见性设置为true或false。尝试将setVisible(0)视为真实。 and setVisible(4)显得虚假。

以上是关于setVisibility(View.VISIBLE)失效的主要内容,如果未能解决你的问题,请参考以下文章

Android:为什么setVisibility(View.GONE);或setVisibility(View.INVISIBLE);不工作

在视图动画时调用 setVisibility

将 Single<Boolean> 转换为布尔值 (Kotlin)

ListView: setvisibility() 强制刷新所有行

为啥 setVisibility() 在 onResumeFragments() 中不起作用?

View.setVisibility 中的 java.util.ConcurrentModificationException