知识养成了思想,思想同时又在融化知识。这篇文章主要讲述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());
}
});
答案我看到了很多错误。对于初学者,您没有定义魔术按钮,也没有事件处理程序。
【Android(为什么setVisibility(View.GONE); 或setVisibility(View.INVISIBLE); 不工作)】你不应该使用:
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)
显得虚假。推荐阅读
- 经过多少内存消耗Android抛出OutOfMemoryException
- 如何围绕Android LinearLayout创建边框()
- Fab按钮带有显示阴影的图标(Android 4.1)
- 如何使用Android自定义视图中的属性设置调整膨胀布局的大小()
- 在android studio中删除重构xml中的空格行
- 如何设置背景图片Android xml文件的透明度
- 开发人员犯的10个最常见的Bootstrap错误
- Ractive.js-简化Web应用程序
- 一种尺寸适合某些尺寸(响应式Web设计图像解决方案指南)