我创建了一个自动创建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();
}
}
答案 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