androidtag标签效果

TagFlowLayout类

public class TagFlowLayout : ViewGroup
    {
        private int mLineSpacing=16; 
        private int mTagSpacing=16; 
        private BaseAdapter mAdapter;
        private Android.Database.DataSetObserver mObserver; 
        public TagFlowLayout (Context context):base(context){

        }
        public TagFlowLayout(Context context, IAttributeSet attrs):base(context,attrs){

        }
        public TagFlowLayout(Context context, IAttributeSet attrs, int defStyle):base(context,attrs,defStyle) {

        }
        public void drawLayout() { 
            if (mAdapter == null || mAdapter.Count == 0) {
                return;
            }
            this.RemoveAllViews ();
            for (int i = 0; i < mAdapter.Count; i++) {
                View view = mAdapter.GetView(i,null,null);
                int position = i;
                this.AddView(view);
            }
        }

        protected override void OnMeasure (int widthMeasureSpec, int heightMeasureSpec)
        {

            //base.OnMeasure (widthMeasureSpec, heightMeasureSpec);
            int wantHeight = 0;
            int wantWidth=View.ResolveSize(0,widthMeasureSpec);

            int paddingLeft = this.PaddingLeft;
            int paddingRight = this.PaddingRight;
            int paddingTop = this.PaddingTop;
            int paddingBottom = this.PaddingBottom;

            int childLeft = paddingLeft;
            int childTop = paddingTop;
            int lineHeight = 0;

            for (int i = 0; i <this.ChildCount; i++) {
                 View childView=this.GetChildAt(i);
                if (childView.Visibility == ViewStates.Gone) {
                    continue;
                }
                LayoutParams paramss = childView.LayoutParameters;
                childView.Measure(GetChildMeasureSpec(widthMeasureSpec, paddingLeft + paddingRight, paramss.Width),GetChildMeasureSpec(heightMeasureSpec, paddingTop + paddingBottom, paramss.Height)
                );

                int childHeight = childView.Height;
                int childWidth = childView.Width;
                lineHeight = Math.Max(childHeight, lineHeight);

                if (childLeft + childWidth + paddingRight > wantWidth) {
                    childLeft = paddingLeft;
                    childTop += mLineSpacing + childHeight;
                    lineHeight = childHeight;
                } else {
                    childLeft += childWidth + mTagSpacing;
                }


            }
            wantHeight = childTop + lineHeight + paddingBottom;
            SetMeasuredDimension (wantWidth, ResolveSize (wantHeight, heightMeasureSpec));

        }
        protected override void OnLayout (bool changed, int l, int t, int r, int b)
        {
            int width = r - l;
            int paddingLeft = this.PaddingLeft;
            int paddingTop = this.PaddingTop;
            int paddingRight = this.PaddingRight;

            int childLeft = paddingLeft;
            int childTop = paddingTop;

            int lineHeight = 0;

            for (int i = 0, childCount = ChildCount; i < childCount; ++i) {

                 View childView =GetChildAt(i);

                if (childView.Visibility == ViewStates.Gone) {
                    continue;
                }

                int childWidth = childView.MeasuredWidth;
                int childHeight = childView.MeasuredHeight;
                lineHeight = Math.Max(childHeight, lineHeight);

                if (childLeft + childWidth + paddingRight > width) {
                    childLeft = paddingLeft;
                    childTop += mLineSpacing + lineHeight;
                    lineHeight = childHeight;
                }

                childView.Layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);
                childLeft += childWidth + mTagSpacing;
            }

        }
        protected override void OnDraw (Android.Graphics.Canvas canvas)
        {
            base.OnDraw (canvas);
        }
        protected override LayoutParams GenerateDefaultLayoutParams ()
        {
            return base.GenerateDefaultLayoutParams ();
        }
        public void setAdapter(BaseAdapter adapter){
            if (mAdapter == null) {
                mAdapter = adapter;
                if (mObserver == null) {
                    mObserver = new DataChangeObserver(this);
                    mAdapter.RegisterDataSetObserver(mObserver);
                }
                drawLayout();
            }
        }
    }

DataChangeObserver类

class DataChangeObserver:Android.Database.DataSetObserver{
        TagFlowLayout tagflowlayout;
        public DataChangeObserver(TagFlowLayout tagflowlayout)
        {
            this.tagflowlayout = tagflowlayout;
        }
        public override void OnChanged ()
        {
            base.OnChanged ();
            tagflowlayout.drawLayout ();
        }
        public override void OnInvalidated ()
        {
            base.OnInvalidated ();
        }
    }

TagBaseAdapter类

public class TagBaseAdapter : BaseAdapter
    {
        private Context mContext; 
        private List<String> mList; 
        public TagBaseAdapter(Context context, List<String> list) {
            this.mContext = context;
            this.mList = list;
        }
        public override int Count {
            get {
                return mList.Count;
            }
        }
        public override Java.Lang.Object GetItem (int position)
        {
            return mList [position];
        }
        public override long GetItemId (int position)
        {
            return position;
        }
        public override View GetView (int position, View convertView, ViewGroup parent)
        {
            ViewHolder holder;
            if (convertView == null) {
                convertView = LayoutInflater.From (mContext).Inflate (Resource.Layout.tagView, null);
                holder = new ViewHolder ();
                holder.tagBtn = (Button)convertView.FindViewById (Resource.Id.tag_btn);
                convertView.Tag = holder;
            } else {
                holder = (ViewHolder)convertView.Tag;
            }
            String text = mList[position]; 
            holder.tagBtn.Text = text;
            return convertView; 

        }
    }

Viewholder类

class ViewHolder:Java.Lang.Object
    {
        public Button tagBtn; 
    }

界面

<RelativeLayout
                        android:minWidth="25px"
                        android:minHeight="25px"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:id="@+id/relativeLayout1">
                        <com.ixiaomang.TagFlowLayout
                            android:id="@+id/container"
                            android:layout_width="match_parent"
                            android:paddingTop="5dp"
                            android:paddingBottom="5dp"
                            android:layout_height="wrap_content" />
                    </RelativeLayout>

mainactivity中主要代码

List<string> taglist= new List<string> (){"可爱","大懒虫","很认证","二货","超级有责任心","呆萌+2" };
            mContainer = (TagFlowLayout) FindViewById(Resource.Id.container);
            mAdapter = new TagBaseAdapter(this,taglist);
            mContainer.setAdapter(mAdapter))`
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tag的使用 package com.yarin.android.qiehuan; import android.app.AlertDialog; import android.app.Dialog; import android.app.TabActivity; import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; public class Activity01 extends TabActivity { //声明TabHost对象 TabHost mTabHost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //取得TabHost对象 mTabHost = getTabHost(); /* 为TabHost添加标签 */ //新建一个newTabSpec(newTabSpec) //设置其标签和图标(setIndicator) //设置内容(setContent) mTabHost.addTab(mTabHost.newTabSpec("test1") .setIndicator("TAB 1",getResources().getDrawable(R.drawable.img1)) .setContent(R.id.textview1)); mTabHost.addTab(mTabHost.newTabSpec("test2") .setIndicator("TAB 2",getResources().getDrawable(R.drawable.img2)) .setContent(R.id.textview2)); mTabHost.addTab(mTabHost.newTabSpec("test3") .setIndicator("TAB 3",getResources().getDrawable(R.drawable.img3)) .setContent(R.id.textview3)); //设置TabHost的背景颜色 mTabHost.setBackgroundColor(Color.argb(150, 22, 70, 150)); //设置TabHost的背景图片资源 //mTabHost.setBackgroundResource(R.drawable.bg0); //设置当前显示哪一个标签 mTabHost.setCurrentTab(0); //标签切换事件处理,setOnTabChangedListener mTabHost.setOnTabChangedListener(new OnTabChangeListener() { // TODO Auto-generated method stub @Override public void onTabChanged(String tabId) { Dialog dialog = new AlertDialog.Builder(Activity01.this) .setTitle("善谢谢提醒") .setMessage("现在选中了:"+tabId+"标签") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.cancel(); } }).create();//创建按钮 dialog.show(); } }); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值