Android增强的LinearLayout,带分隔线
来源:互联网 发布:淘宝装修队模板免费 编辑:程序博客网 时间:2024/05/21 22:49
Android增强的LinearLayout,带分隔线.类似ListView,但是不支持Adapter.
/** * 增强的线性布局<BR> * 1.添加分隔线功能 * * @author Hxuejie hxuejie@126.com */public class SuperLinearLayout extends LinearLayout {private Drawabledivider;private intdividerSize;private booleanisHeadDivider;private booleanisEndDivider;private StringdoubleDividers;private intdoubleDividerSpace;private List<View>dividerList;public SuperLinearLayout(Context context, AttributeSet attrs) {super(context, attrs);dividerList = new ArrayList<View>();TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.SuperLinearLayout);final int N = a.getIndexCount();for (int i = 0; i < N; i++) {int attr = a.getIndex(i);switch (attr) {case R.styleable.SuperLinearLayout_divider:divider = a.getDrawable(attr);break;case R.styleable.SuperLinearLayout_dividerSize:dividerSize = a.getDimensionPixelSize(attr, 1);break;case R.styleable.SuperLinearLayout_dividerHead:isHeadDivider = a.getBoolean(attr, true);break;case R.styleable.SuperLinearLayout_dividerEnd:isEndDivider = a.getBoolean(attr, true);break;case R.styleable.SuperLinearLayout_dividerDouble:doubleDividers = a.getString(attr);break;case R.styleable.SuperLinearLayout_dividerDoubleSize:doubleDividerSpace = a.getDimensionPixelSize(attr, 5);break;}}a.recycle();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {if (divider == null) {return;}// clearremoveAllDividers();// add dividersint count = getChildCountByVisible();if (count == 0) {return;}int index = 1;// Headif (isHeadDivider) {insertDivider(0, 0);++index;}// Betweenfor (int i = 1; i < count; ++i, ++index) {insertDivider(index++, 0);if (isDoubleDivider(i)) {insertDivider(index++, doubleDividerSpace);}}// Endif (isEndDivider) {insertDivider(-1, 0);}super.onMeasure(widthMeasureSpec, heightMeasureSpec);// reset divider size int mh, mw, dw, dh;for (View v : dividerList) {switch (getOrientation()) {case HORIZONTAL:dw = dividerSize;dh = getMeasuredHeight();break;default:case VERTICAL:dw = getMeasuredWidth();dh = dividerSize;break;}v.getLayoutParams().width = dw;v.getLayoutParams().height = dh;mh = MeasureSpec.makeMeasureSpec(dh, MeasureSpec.EXACTLY);mw = MeasureSpec.makeMeasureSpec(dw, MeasureSpec.EXACTLY);v.measure(mw, mh);}}/** * 得到可显示的子控件的数量 * * @return */private int getChildCountByVisible() {int count = 0;for (int i = 0; i < getChildCount(); ++i) {if (getChildAt(i).getVisibility() != View.VISIBLE) {continue;}++count;}return count;}/** * 插入分隔线 * * @param index * @param space */private void insertDivider(int index, int space) {View divider = createDivider();LayoutParams lp = createDividerLayoutParams();lp.topMargin = space;addViewInLayout(divider, index, lp);}/** * 删除所有分隔线 */private void removeAllDividers() {Iterator<View> it = dividerList.iterator();while (it.hasNext()) {View v = it.next();removeView(v);it.remove();}}/** * 检测插入的位置是否为双分隔线 * * @param index 插入位置 * @return */private boolean isDoubleDivider(int index) {return doubleDividers.contains(String.valueOf(index));}/** * 创建一条分隔线,并添加到分隔线列表 * * @return */private View createDivider() {View dv = new View(getContext());dv.setBackground(divider);dividerList.add(dv);return dv;}private LayoutParams createDividerLayoutParams() {LayoutParams lp;switch (getOrientation()) {case HORIZONTAL:lp = new LayoutParams(1, dividerSize);break;default:case VERTICAL:lp = new LayoutParams(dividerSize, 1);break;}return lp;}}-------------------------------------------------------------------------
XML自定义属性:
<declare-styleable name="SuperLinearLayout"> <attr name="divider" format="reference|color" /> <attr name="dividerSize" format="dimension" /> <attr name="dividerHead" format="boolean" /> <attr name="dividerEnd" format="boolean" /> <attr name="dividerDouble" format="string" /> <attr name="dividerDoubleSize" format="dimension" /></declare-styleable>
0 0
- Android增强的LinearLayout,带分隔线
- android LinearLayout添加分隔线
- android LinearLayout添加分隔线
- android LinearLayout添加分隔线
- LinearLayout添加分隔线
- LinearLayout增加分隔线
- 我的Android进阶之旅------>如何在多个LinearLayout中添加分隔线
- Android 带分隔符的EditText
- 九九乘法口诀表的输出,带分隔线
- LinearLayout的android:layout_weight
- Android的LinearLayout布局
- android的linearlayout
- android的LinearLayout杂记
- 如何在多个LinearLayout中添加分隔线?
- 如何在多个LinearLayout中添加分隔线
- 带图片的Toast 与LinearLayout View
- 带分割线的TextView和LinearLayout
- CSS 分隔线 中间带文字 分隔符
- iOS-分组UITableView删除崩溃问题(当删除section中最后一条数据崩溃的情况)
- Is It A Tree?(并查集问题)
- 关于block内存问题的分析
- CODEVS 1201 最小数和最大数
- 最近找了些理论,可以丰富自己的表达喔
- Android增强的LinearLayout,带分隔线
- Android_YouthArea之ApeendTextView
- struts接收url文件使用upload.parseRequest 获取文件为空的问题
- QT中结合实际例子谈谈QTableWidget中布局控件的方法
- Android App catch Exception
- 复杂类继承体系结构下,实际的类定义
- 一些显著性检测的数据库资料
- 内部类的使用
- Eclipse使用Maven插件创建Web项目时出错:Could not resolve archetype org.apache.maven.archetypes