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

2023-09-05 07:07:46 作者:做你的小女人

我希望我的的DatePicker 按钮可以是无形的,在开始时。当我preSS我的魔力按钮,我想setVisibility(View.Visible);

这里的问题是,当我 setVisibility(View.GONE) setVisibility(View.INVISIBLE)没有什么变化和组分仍然是可见的。

 最后的DatePicker DP2 =(DatePicker的)findViewById(R.id.datePick2);
最终按钮BTN2 =(按钮)findViewById(R.id.btnDate2);

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

btn2.setOnClickListener(新View.OnClickListener(){
    公共无效的onClick(查看为arg0){
        TextView的TXT2 =(TextView中)findViewById(R.id.txt2);
        txt2.setText(你选择了+ dp2.getDayOfMonth()
            +/+(dp2.getMonth()+ 1)+/+ dp2.getYear());
    }
});
 

解决方案

我看到相当多的东西是错误的。对于初学者,你没有你的魔法按钮定义并没有事件处理程序。

此外,你不应该使用:

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

使用只有一两个。从的Andr​​oid文档:

  

View.GONE这种观点是不可见的,并且不承担任何空间   布局的目的。

     

View.INVISIBLE这种观点是无形的,但它仍然   占用空间布局的目的。

自定义Group,解决Group setVisibility后,子View再次设置setVisibility无效的问题

在你的榜样,你是覆盖 View.GONE 分配与 View.INVISIBLE 之一。

尝试更换:

 最后的DatePicker DP2 =新的DatePicker(本)
 

 的DatePicker DP2 =(DatePicker的)findViewById(R.id.datePick2);
 

同样,对于其他部件:

 公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        的LinearLayout LL =新的LinearLayout(本);
        ll.setOrientation(LinearLayout.VERTICAL);

        最后的DatePicker DP2 =新的DatePicker(本);
        最终按钮BTN2 =新的按钮(这一点);
        最终按钮magicButton =新的按钮(这一点);
        最后的TextView TXT2 =新的TextView(TestActivity.this);

        dp2.setVisibility(View.GONE);
        btn2.setVisibility(View.GONE);
        btn2.setText(设定日期);

        btn2.setOnClickListener(新View.OnClickListener(){
            公共无效的onClick(查看为arg0){
                txt2.setText(你选择了
                    + dp2.getDayOfMonth()+/+(dp2.getMonth()+1)
                    +/+ dp2.getYear());
            }
        });

        magicButton.setText(神奇按钮);
        magicButton.setOnClickListener(新View.OnClickListener()
            公共无效的onClick(查看为arg0){
                dp2.setVisibility(View.VISIBLE);
                btn2.setVisibility(View.VISIBLE);
            }
        });

    ll.addView(DP2);
    ll.addView(BTN2);
    ll.addView(magicButton);
    ll.addView(TXT2);

    的setContentView(Ⅱ);
}
 

I want my DatePicker and the button to be invisible in the begining. And when I press my magic button I want to setVisibility(View.Visible);

The problem here is when I setVisibility(View.GONE) or setVisibility(View.INVISIBLE) nothing changes and the component is still visible.

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());
    }
});

解决方案

I see quite a few things wrong. For starters, you don't have your magic button defined and there is no event handler for it.

Also you shouldn't use:

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

Use only one the two. From Android documentation:

View.GONE This view is invisible, and it doesn't take any space for layout purposes.

View.INVISIBLE This view is invisible, but it still takes up space for layout purposes.

In your example, you are overriding the View.GONE assignment with the View.INVISIBLE one.

Try replacing:

final DatePicker dp2 = new DatePicker(this)

with:

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

Similarly for other widgets:

    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);
}