package com.prateekj.snooper.customviews; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.prateekj.snooper.R; import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.view.LayoutInflater.from; public class AccordionView extends LinearLayout { public static int COLLAPSE = 0; public static int EXPAND = 1; private View bodyView; private int state; private int headerText; private View headerView; public AccordionView(Context context) { super(context); } public AccordionView(Context context, AttributeSet attrs) { super(context, attrs); initAttributes(attrs); } public AccordionView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initAttributes(attrs); } @TargetApi(LOLLIPOP) public AccordionView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); initAttributes(attrs); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); initViews(); } public void onStateChange() { bodyView.setVisibility(state == COLLAPSE ? View.GONE : View.VISIBLE); ImageView statusIcon = (ImageView) headerView.findViewById(R.id.state_icon); statusIcon.setImageResource(state == COLLAPSE ? R.drawable.arrow_left_white : R.drawable.arrow_down_white); } private void initAttributes(AttributeSet attributeSet) { TypedArray typedArray = getContext().getTheme().obtainStyledAttributes(attributeSet, R.styleable.AccordionView, 0, 0); state = typedArray.getInteger(R.styleable.AccordionView_state, COLLAPSE); headerText = typedArray.getResourceId(R.styleable.AccordionView_headerText, R.string.accordion_header); typedArray.recycle(); } private void initViews() { setOrientation(VERTICAL); headerView = from(getContext()).inflate(R.layout.accordion_view_heading, this, false); ((TextView) headerView.findViewById(R.id.header_text)).setText(headerText); addView(headerView, 0); bodyView = findViewWithTag(getContext().getString(R.string.accordion_body)); MarginLayoutParams layoutParams = (MarginLayoutParams) bodyView.getLayoutParams(); int accordionViewBodyMargin = getResources().getDimensionPixelSize(R.dimen.accordion_view_body_margin); layoutParams.setMargins(accordionViewBodyMargin, 0, accordionViewBodyMargin, 0); onStateChange(); headerView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { toggleState(); onStateChange(); } }); } private void toggleState() { state = state == COLLAPSE ? EXPAND : COLLAPSE; } }