首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓:为什么setVisibility(View.GONE);或者setVisibility(View.INVISIBLE);不能工作

安卓:为什么setVisibility(View.GONE);或者setVisibility(View.INVISIBLE);不能工作
EN

Stack Overflow用户
提问于 2011-09-08 20:39:27
回答 11查看 288.7K关注 0票数 66

我希望我的DatePicker和按钮在一开始就是不可见的。当我按下我的魔术按钮时,我想要setVisibility(View.Visible);

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

代码语言:javascript
运行
复制
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());
    }
});
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-09-08 21:08:54

我看到了相当多的错误。对于初学者来说,你没有定义你的魔法按钮,也没有为它定义事件处理程序。

另外,你也不应该使用:

代码语言:javascript
运行
复制
dp2.setVisibility(View.GONE);
dp2.setVisibility(View.INVISIBLE); 

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

View.GONE此视图是不可见的,并且不会占用任何布局空间。

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

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

尝试替换:

代码语言:javascript
运行
复制
final DatePicker dp2 = new DatePicker(this)

通过以下方式:

代码语言:javascript
运行
复制
DatePicker dp2 = (DatePicker) findViewById(R.id.datePick2);  

对于其他小部件也是如此:

代码语言:javascript
运行
复制
    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);
}
票数 124
EN

Stack Overflow用户

发布于 2017-01-04 07:16:52

今天我有一个场景,其中我执行了以下操作:

代码语言:javascript
运行
复制
myViewGroup.setVisibility(View.GONE);

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

代码语言:javascript
运行
复制
if(myViewGroup.getVisibility() == View.VISIBLE) {
    // this `if` was fulfilled magically
}

放置断点你可以看到,可见性变成了GONE,但就在下一帧它神奇地变成了VISIBLE。我在试着理解这该死的事情是怎么发生的。

原来有一个动画应用于此视图,这在内部导致视图将其可见性更改为VISIBLE,直到动画完成:

代码语言:javascript
运行
复制
public void someFunction() {
    ...
    TransitionManager.beginDelayedTransition(myViewGroup);
    ...

    myViewGroup.setVisibility(View.GONE);
}

如果进行调试,您将看到myViewGroup确实将其可见性更改为GONE,但在下一帧中,为了运行动画,它将再次变为可见。

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

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

票数 13
EN

Stack Overflow用户

发布于 2013-03-04 19:10:35

你可以把它看作是一种CSS风格的可见性和显示。

代码语言:javascript
运行
复制
<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>
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7348150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档