package com.dtr.settingview.lib; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.LinearLayout; import com.dtr.settingview.lib.entity.SettingViewItemData; import com.dtr.settingview.lib.item.BasicItemViewH; import com.dtr.settingview.lib.item.BasicItemViewV; import com.dtr.settingview.lib.item.CheckItemViewH; import com.dtr.settingview.lib.item.CheckItemViewV; import com.dtr.settingview.lib.item.ImageItemView; import com.dtr.settingview.lib.item.SwitchItemView; import com.dtr.settingview.lib.item.SwitchItemView.onSwitchItemChangedListener; import com.dtr.settingviewlib.R; public class SettingView extends LinearLayout { private Context mContext; private ImageView mTopDivider; private ImageView mBottomDivider; private boolean iOSStyleable = true; private List<SettingViewItemData> mItemViews = null; private onSettingViewItemClickListener mItemClickListener; private onSettingViewItemSwitchListener mItemSwitchListener; public SettingView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; mItemViews = new ArrayList<SettingViewItemData>(); setOrientation(LinearLayout.VERTICAL); mTopDivider = new ImageView(context); mTopDivider.setBackgroundResource(R.drawable.divider); mBottomDivider = new ImageView(context); mBottomDivider.setBackgroundResource(R.drawable.divider); readAttrs(attrs); } private void readAttrs(AttributeSet attrs) { TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.SettingView); if (a.hasValue(R.styleable.SettingView_iOSStyle)) { iOSStyleable = a.getBoolean(R.styleable.SettingView_iOSStyle, false); } a.recycle(); } public void setAdapter(List<SettingViewItemData> listData) { if (!listData.isEmpty()) { mItemViews = listData; int size = mItemViews.size(); LinearLayout.LayoutParams dividerLps = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); // Add Top Divider addView(mTopDivider, dividerLps); // Add Content if (size > 0) { for (int i = 0; i < size; i++) { SettingViewItemData item = mItemViews.get(i); initItemView(item, i); if (i != (size - 1)) { addDivider(iOSStyleable); } } } // Add Bottom Divider addView(mBottomDivider, dividerLps); } } private void addDivider(boolean iOSStylable) { ImageView divider = new ImageView(mContext); divider.setScaleType(ScaleType.FIT_XY); divider.setBackgroundColor(getResources().getColor(R.color.setting_view_item_bg_normal)); divider.setImageResource(R.drawable.divider); LayoutParams lps = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); lps.gravity = Gravity.RIGHT; if (iOSStyleable) { int paddingLeft = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.setting_view_min_height), getResources().getDisplayMetrics()) + (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.setting_view_lr_padding), getResources().getDisplayMetrics()); divider.setPadding(paddingLeft, 0, 0, 0); } addView(divider, lps); } private void initItemView(SettingViewItemData data, final int index) { FrameLayout itemView = data.getItemView(); if (itemView instanceof SwitchItemView) { ((SwitchItemView) itemView).fillData(data.getData()); ((SwitchItemView) itemView).setOnSwitchItemChangedListener(new onSwitchItemChangedListener() { @Override public void onSwitchItemChanged(boolean isChecked) { // TODO Auto-generated method stub if (null != mItemSwitchListener) { mItemSwitchListener.onSwitchChanged(index, isChecked); } } }); itemView.setClickable(false); } else { itemView.setClickable(data.isClickable()); itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (null != mItemClickListener) { mItemClickListener.onItemClick(index); } } }); if (itemView instanceof BasicItemViewH) { ((BasicItemViewH) itemView).fillData(data.getData()); } else if (itemView instanceof BasicItemViewV) { ((BasicItemViewV) itemView).fillData(data.getData()); } else if (itemView instanceof ImageItemView) { ((ImageItemView) itemView).fillData(data.getData()); } else if (itemView instanceof CheckItemViewH) { ((CheckItemViewH) itemView).fillData(data.getData()); } else if (itemView instanceof CheckItemViewV) { ((CheckItemViewV) itemView).fillData(data.getData()); } } int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.setting_view_min_height), getResources().getDisplayMetrics()); LinearLayout.LayoutParams lps = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height); addView(itemView, lps); } public interface onSettingViewItemClickListener { void onItemClick(int index); } public void setOnSettingViewItemClickListener(onSettingViewItemClickListener listener) { this.mItemClickListener = listener; } public interface onSettingViewItemSwitchListener { public void onSwitchChanged(int index, boolean isChecked); } public void setOnSettingViewItemSwitchListener(onSettingViewItemSwitchListener listener) { this.mItemSwitchListener = listener; } public FrameLayout getItemView(int index) { return (FrameLayout) getChildAt(2 * index + 1); } public void modifyTitle(String title, int index) { FrameLayout itemView = getItemView(index); if (itemView instanceof SwitchItemView) { ((SwitchItemView) itemView).getmTitle().setText(title); } else { if (itemView instanceof BasicItemViewH) { ((BasicItemViewH) itemView).getmTitle().setText(title); } else if (itemView instanceof BasicItemViewV) { ((BasicItemViewV) itemView).getmTitle().setText(title); } else if (itemView instanceof ImageItemView) { ((ImageItemView) itemView).getmTitle().setText(title); } else if (itemView instanceof CheckItemViewH) { ((CheckItemViewH) itemView).getmTitle().setText(title); } else if (itemView instanceof CheckItemViewV) { ((CheckItemViewV) itemView).getmTitle().setText(title); } } } public void modifySubTitle(String subTitle, int index) { FrameLayout itemView = getItemView(index); if (itemView instanceof BasicItemViewH) { ((BasicItemViewH) itemView).getmSubTitle().setText(subTitle); } else if (itemView instanceof BasicItemViewV) { ((BasicItemViewV) itemView).getmSubTitle().setText(subTitle); } else if (itemView instanceof CheckItemViewV) { ((CheckItemViewV) itemView).getmSubTitle().setText(subTitle); } } public void modifyDrawable(Drawable drawable, int index) { FrameLayout itemView = getItemView(index); if (itemView instanceof SwitchItemView) { ((SwitchItemView) itemView).getmDrawable().setImageDrawable(drawable); } else { if (itemView instanceof BasicItemViewH) { ((BasicItemViewH) itemView).getmDrawable().setImageDrawable(drawable); } else if (itemView instanceof BasicItemViewV) { ((BasicItemViewV) itemView).getmDrawable().setImageDrawable(drawable); } else if (itemView instanceof ImageItemView) { ((ImageItemView) itemView).getmDrawable().setImageDrawable(drawable); } else if (itemView instanceof CheckItemViewH) { ((CheckItemViewH) itemView).getmDrawable().setImageDrawable(drawable); } else if (itemView instanceof CheckItemViewV) { ((CheckItemViewV) itemView).getmDrawable().setImageDrawable(drawable); } } } public void modifyInfo(Drawable drawable, int index) { FrameLayout itemView = getItemView(index); if (itemView instanceof ImageItemView) { ((ImageItemView) itemView).getmImage().setImageDrawable(drawable); } } }