Android tag Control

Source: Internet
Author: User
Tags security essentials

Android tag Control
Version: 1.0 Date: Copyright:©2014 some tags may need to be set in some applications to facilitate the query of certain information, such as mobile assistant or shopping software. In the early stage of software development, using TextView and Button is the simplest method. However, this method also has its own limitations, such as the inability to control line breaks and low coupling. In addition to solving these problems, it is best to encapsulate a class library for future use. First, create a Tag class,

import java.io.Serializable;public class Tag implements Serializable {           /**      *      */      private static final long serialVersionUID = 2684657309332033242L;           private int backgroundResId ;      private int id ;      private boolean isChecked ;      private int leftDrawableResId ;      private int rightDrawableResId ;      private String title;      public Tag() {               }      public Tag( int paramInt, String paramString) {           this .id = paramInt;           this .title = paramString;     }      public int getBackgroundResId() {           return this .backgroundResId ;     }      public int getId() {           return this .id ;     }      public int getLeftDrawableResId() {           return this .leftDrawableResId ;     }      public int getRightDrawableResId() {           return this .rightDrawableResId ;     }      public String getTitle() {           return this .title ;     }      public boolean isChecked() {           return this .isChecked ;     }      public void setBackgroundResId( int paramInt) {           this .backgroundResId = paramInt;     }      public void setChecked( boolean paramBoolean) {           this .isChecked = paramBoolean;     }      public void setId(int paramInt) {           this .id = paramInt;     }      public void setLeftDrawableResId( int paramInt) {           this .leftDrawableResId = paramInt;     }      public void setRightDrawableResId( int paramInt) {           this .rightDrawableResId = paramInt;     }      public void setTitle(String paramString) {           this .title = paramString;     }}
This class encapsulates the background image resource, id, and check of the label view. Create a new TagView class and inherit from ToggleButton,
import com.niceapp.lib.tagview.R;import android.content.Context;import android.util.AttributeSet;import android.widget.ToggleButton;public class TagView extends ToggleButton {           private boolean mCheckEnable = true;      public TagView(Context paramContext) {           super (paramContext);          init();     }      public TagView(Context paramContext, AttributeSet paramAttributeSet) {           super (paramContext, paramAttributeSet);          init();     }      public TagView(Context paramContext, AttributeSet paramAttributeSet,               int paramInt) {           super (paramContext, paramAttributeSet, 0);          init();     }      private void init() {          setTextOn( null );          setTextOff( null );          setText( "" );          setBackgroundResource(R.drawable. tag_bg );     }      public void setCheckEnable( boolean paramBoolean) {           this .mCheckEnable = paramBoolean;           if (!this .mCheckEnable ) {               super .setChecked( false);          }     }      public void setChecked( boolean paramBoolean) {           if (this .mCheckEnable ) {               super .setChecked(paramBoolean);          }     }}
This TagView is the label view, which displays the label information. The corresponding xml file is as follows, tag. xml:
 < com.niceapp.lib.tagview.widget.TagView xmlns:android ="http://schemas.android.com/apk/res/android"    android:layout_width= "wrap_content"    android:layout_height= "wrap_content"    android:drawablePadding= "5.0dip"    android:minHeight= "0.0dip"    android:paddingBottom= "4.5dip"    android:paddingLeft= "20.0dip"    android:paddingRight= "20.0dip"    android:paddingTop= "4.5dip"    android:textColor= "#ff000000"    android:textSize= "16.0sp" />
Display: There is an android-flowlayout control on github, which dynamically wraps the view based on the size of the subview,
Therefore, you can use this control to control the line feed without repeatedly inventing the wheel. The class implemented by the android-flowlayout function is FlowLayout. Therefore, the label control is implemented by inheriting this class.
import java.util.ArrayList;import java.util.List;import com.niceapp.lib.tagview.R;import android.content.Context;import android.util.AttributeSet;import android.util.TypedValue;import android.view.View;import android.view.View.OnClickListener;import android.widget.CompoundButton;/*** @author kince* */public class TagListView extends FlowLayout implements OnClickListener {     private boolean mIsDeleteMode;     private OnTagCheckedChangedListener mOnTagCheckedChangedListener;     private OnTagClickListener mOnTagClickListener;     private int mTagViewBackgroundResId;     private int mTagViewTextColorResId;     private final List
 
   mTags = new ArrayList
  
   ();     /**     * @param context     */     public TagListView(Context context) {          super(context);          // TODO Auto-generated constructor stub          init();     }     /**     * @param context     * @param attributeSet     */     public TagListView(Context context, AttributeSet attributeSet) {          super(context, attributeSet);          // TODO Auto-generated constructor stub          init();     }     /**     * @param context     * @param attributeSet     * @param defStyle     */     public TagListView(Context context, AttributeSet attributeSet, int defStyle) {          super(context, attributeSet, defStyle);          // TODO Auto-generated constructor stub          init();     }     @Override     public void onClick(View v) {          if ((v instanceof TagView)) {               Tag localTag = (Tag) v.getTag();               if (this.mOnTagClickListener != null) {                    this.mOnTagClickListener.onTagClick((TagView) v, localTag);               }          }     }     private void init() {     }     private void inflateTagView(final Tag t, boolean b) {          TagView localTagView = (TagView) View.inflate(getContext(),                    R.layout.tag, null);          localTagView.setText(t.getTitle());          localTagView.setTag(t);          if (mTagViewTextColorResId <= 0) {               int c = getResources().getColor(R.color.blue);               localTagView.setTextColor(c);          }          if (mTagViewBackgroundResId <= 0) {               mTagViewBackgroundResId = R.drawable.tag_bg;               localTagView.setBackgroundResource(mTagViewBackgroundResId);          }          localTagView.setChecked(t.isChecked());          localTagView.setCheckEnable(b);          if (mIsDeleteMode) {               int k = (int) TypedValue.applyDimension(1, 5.0F, getContext()                         .getResources().getDisplayMetrics());               localTagView.setPadding(localTagView.getPaddingLeft(),                         localTagView.getPaddingTop(), k,                         localTagView.getPaddingBottom());               localTagView.setCompoundDrawablesWithIntrinsicBounds(0, 0,                         R.drawable.forum_tag_close, 0);          }          if (t.getBackgroundResId() > 0) {               localTagView.setBackgroundResource(t.getBackgroundResId());          }          if ((t.getLeftDrawableResId() > 0) || (t.getRightDrawableResId() > 0)) {               localTagView.setCompoundDrawablesWithIntrinsicBounds(                         t.getLeftDrawableResId(), 0, t.getRightDrawableResId(), 0);          }          localTagView.setOnClickListener(this);          localTagView                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {                         public void onCheckedChanged(                                   CompoundButton paramAnonymousCompoundButton,                                   boolean paramAnonymousBoolean) {                              t.setChecked(paramAnonymousBoolean);                              if (TagListView.this.mOnTagCheckedChangedListener != null) {                                   TagListView.this.mOnTagCheckedChangedListener                                             .onTagCheckedChanged(                                                       (TagView) paramAnonymousCompoundButton,                                                       t);                              }                         }                    });          addView(localTagView);     }     public void addTag(int i, String s) {          addTag(i, s, false);     }     public void addTag(int i, String s, boolean b) {          addTag(new Tag(i, s), b);     }     public void addTag(Tag tag) {          addTag(tag, false);     }     public void addTag(Tag tag, boolean b) {          mTags.add(tag);          inflateTagView(tag, b);     }     public void addTags(List
   
     lists) {          addTags(lists, false);     }     public void addTags(List
    
      lists, boolean b) {          for (int i = 0; i < lists.size(); i++) {               addTag((Tag) lists.get(i), b);          }     }     public List
     
       getTags() {          return mTags;     }     public View getViewByTag(Tag tag) {          return findViewWithTag(tag);     }     public void removeTag(Tag tag) {          mTags.remove(tag);          removeView(getViewByTag(tag));     }     public void setDeleteMode(boolean b) {          mIsDeleteMode = b;     }     public void setOnTagCheckedChangedListener(               OnTagCheckedChangedListener onTagCheckedChangedListener) {          mOnTagCheckedChangedListener = onTagCheckedChangedListener;     }     public void setOnTagClickListener(OnTagClickListener onTagClickListener) {          mOnTagClickListener = onTagClickListener;     }     public void setTagViewBackgroundRes(int res) {          mTagViewBackgroundResId = res;     }     public void setTagViewTextColorRes(int res) {          mTagViewTextColorResId = res;     }     public void setTags(List
       lists) {          setTags(lists, false);     }     public void setTags(List
       lists, boolean b) {          removeAllViews();          mTags.clear();          for (int i = 0; i < lists.size(); i++) {               addTag((Tag) lists.get(i), b);          }     }     public static abstract interface OnTagCheckedChangedListener {          public abstract void onTagCheckedChanged(TagView tagView, Tag tag);     }     public static abstract interface OnTagClickListener {          public abstract void onTagClick(TagView tagView, Tag tag);     }}
     
    
   
  
 
The most important part of this class is the inflateTagView method. It parses the TagView and displays the tag to be displayed in the TagListView. The code for the last Activity is as follows:
Import java. util. arrayList; import java. util. list; import com. niceapp. lib. tagview. widget. tag; import com. niceapp. lib. tagview. widget. tagListView; import android. app. activity; import android. OS. bundle; public class MainActivity extends Activity {private TagListView mTagListView; private final List
 
  
MTags = new ArrayList
  
   
(); Private final String [] titles = {"Security Essentials", "Music", "parents", "essential for office workers", "360 mobile guard", "QQ ", "input method", "", "most beautiful application", "AndevUI", "mogujie.com"}; @ Override protected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. select_tag_activity); mTagListView = (TagListView) findViewById (R. id. tagview); setUpData (); mTagListView. setTags (mTags);} private void setUpData () {for (int I = 0; I <10; I ++) {Tag tag = new Tag (); tag. setId (I); tag. setChecked (true); tag. setTitle (titles [I]); mTags. add (tag );}}}
  
 
Real machine display effect is as follows: http://download.csdn.net/detail/wangjinyu501/7673827





Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.