我希望我的DatePicker
和按钮在一开始就是不可见的。当我按下我的魔术按钮时,我想要setVisibility(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());
}
});
发布于 2011-09-08 13:08:54
我看到了相当多的错误。对于初学者来说,你没有定义你的魔法按钮,也没有为它定义事件处理程序。
另外,你也不应该使用:
dp2.setVisibility(View.GONE);
dp2.setVisibility(View.INVISIBLE);
只使用两个中的一个。来自Android documentation
View.GONE此视图是不可见的,并且不会占用任何布局空间。
View.INVISIBLE此视图不可见,但它仍会出于布局目的占用空间。
在您的示例中,您将用View.INVISIBLE
赋值覆盖View.GONE
赋值。
尝试替换:
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);
}
发布于 2017-01-03 23:16:52
今天我有一个场景,其中我执行了以下操作:
myViewGroup.setVisibility(View.GONE);
就在下一帧中,我在其他地方执行if
检查,以查看该视图的可见性状态。你猜怎么着?正在通过以下条件:
if(myViewGroup.getVisibility() == View.VISIBLE) {
// this `if` was fulfilled magically
}
放置断点你可以看到,可见性变成了GONE
,但就在下一帧它神奇地变成了VISIBLE
。我在试着理解这该死的事情是怎么发生的。
原来有一个动画应用于此视图,这在内部导致视图将其可见性更改为VISIBLE
,直到动画完成:
public void someFunction() {
...
TransitionManager.beginDelayedTransition(myViewGroup);
...
myViewGroup.setVisibility(View.GONE);
}
如果进行调试,您将看到myViewGroup
确实将其可见性更改为GONE
,但在下一帧中,为了运行动画,它将再次变为可见。
因此,如果您遇到这种情况,请确保您没有在动画视图中执行if
检查。
您可以通过View.clearAnimation()
移除视图上的所有动画。
发布于 2013-03-04 11:10:35
你可以把它看作是一种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>
https://stackoverflow.com/questions/7348150
复制相似问题