无法设置ScrollView的可见性

时间:2016-03-22 09:00:21

标签: java android scrollview

我创建了一个自动创建Button的XML元素,然后是一个内部包含LinearLayout的ScrollView。按下按钮时,应该更改颜色并更改ScrollView的可见性。现在,它只会更改Button的颜色,但Scroll View中的Text保持可见。

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

我的代码:

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

}

3 个答案:

答案 0 :(得分:1)

AndroidAnnotations的背景添加颜色。试试这个:

sv

因为您的代码没有提及文字,所以我认为文本位于final ScrollView sv = new ScrollView(context); sv.setBackgroundColor(0xffffff);//make it not transparent :) 的不同层中,如果scrollview位于其上,则通过设置bgcolor可以使其失明文本。

答案 1 :(得分:1)

目前,您正在设置ScrollView的可见性,但不会设置其子级的可见性。您可以尝试单独隐藏ScrollView的所有子项,如this answer中所示:

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

所以这个想法很简单:让孩子们一个接一个地设置能见度。当然,如果需要的话,你可以和孩子们一起做更多的事情。

答案 2 :(得分:0)

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

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

可能setLayoutParams会覆盖setVisibility

设置的公开程度