[英]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.