繁体   English   中英

无法设置ScrollView的可见性

[英]can't set Visibility of ScrollView

我制作了一个XML元素,该元素自动创建一个Button,然后自动创建一个内部带有LinearLayout的ScrollView。 按下按钮后,应该可以更改颜色并更改ScrollView的可见性。 现在,它仅更改按钮的颜色,但滚动视图中的文本保持可见。

在我通过XML创建Button和ScrollView并通过主活动中的onCreate()方法创建onClickListeners之前,这是onClickListeners的。

我的代码:

public class AccordionWidget extends LinearLayout{


    public AccordionWidget(Context c, AttributeSet attrs) {
        super(c, attrs);

        final Context context = c;

        final Button btn = new Button(context);
        final LinearLayout ll = new LinearLayout(context);
        final ScrollView sv = new ScrollView(context);

        TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.accordion);

        LayoutParams btnparams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        btn.setText(a.getString(R.styleable.accordion_text));
        btn.setBackgroundColor(ContextCompat.getColor(context, R.color.button_not_pressed));
        LayoutParams llparams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        llparams.weight = 1f;
        LayoutParams swparams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

        btn.setLayoutParams(btnparams);
        ll.setOrientation(LinearLayout.VERTICAL);
        ll.setLayoutParams(llparams);
        sv.setVisibility(View.GONE);
        sv.setLayoutParams(swparams);

        this.addView(sv);
        this.addView(btn);
        sv.addView(ll);

        btn.setOnClickListener(new OnClickListener() {
            boolean btnstate = false;
            @Override
            public void onClick(View v) {
                if (btnstate) {
                    btn.setBackgroundColor(ContextCompat.getColor(context, R.color.button_pressed));
                    sv.setVisibility(View.VISIBLE);
                    btnstate = false;
                } else {
                    btn.setBackgroundColor(ContextCompat.getColor(context, R.color.button_not_pressed));
                    sv.setVisibility(View.GONE);
                    btnstate = true;
                }
            }
        });

        a.recycle();
    }

}

sv背景添加颜色。 尝试这个:

final ScrollView sv = new ScrollView(context);
sv.setBackgroundColor(0xffffff);//make it not transparent :)

因为您的代码没有提到文本,所以我假设文本位于scrollview不同层,并且如果scrollview位于其顶部,则通过设置bgcolor可以使文本scrollview

当前,您正在设置ScrollView的可见性,而不是其子级的可见性。 您可以尝试分别隐藏ScrollView所有子级, 如此答案所示:

for ( int i = 0; i < sv.getChildCount();  i++ ){
    View view = sv.getChildAt(i);
    view.setVisibility(View.GONE);
}

因此,想法很简单:让孩子一个接一个并设置可见性。 当然,如果需要,您可以与孩子们做更多的事情。

您是否尝试过交换这两行:

sv.setVisibility(View.GONE);
sv.setLayoutParams(swparams);

也许setLayoutParams覆盖了setVisibility设置的可见性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM