zoukankan      html  css  js  c++  java
  • Android 自定义Tabbar

    由于需要自定义了一个组件,代码如下

    自定义tabbar

    public class TopTabbar extends LinearLayout implements OnClickListener {
     //namespace
     private final String nameSpace = "http://meiyitianabc.blog.163.com";
     //default for tab height .
     private int topContainerHeight = 40;
     //default for  content Layout .
     private int contentContainerHeight = 100;
     //tag .
     String TAG = TopTabbar.class.getName();
     //each tab item
     LinearLayout fistItem = null;
     LinearLayout secondItem = null;
     LinearLayout thirdItem = null;
     //tab title for each tab item
     TextView tv_title_1 = null;
     TextView tv_title_2 = null;
     TextView tv_title_3 = null;
     //the value for each tab text .
     private String title1;
     private String title2;
     private String tilte3;
     //
     LinearLayout contentContainer = null;
     //content container for each item clicked .
     View contentContainer1 = null;
     View contentContainer2 = null;
     View contentContainer3 = null;
     //click callback for  onClick .
     TabbarCallback tabOnClick = null;
     //
     LinearLayout topContainer = null;
     //bitmap 
     Bitmap bm_tabBg = null;
     //getter and setter methods .
     public TextView getTv_title_1() {
      return tv_title_1;
     }
     public TextView getTv_title_2() {
      return tv_title_2;
     }
     public TextView getTv_title_3() {
      return tv_title_3;
     }
     public LinearLayout getContentContainer() {
      return contentContainer;
     }
     public LinearLayout getTopContainer() {
      return topContainer;
     }
     public void setContentContainer1(View contentContainer1) {
      this.contentContainer1 = contentContainer1;
      this.contentContainer.addView(contentContainer1);
     }
     public void setContentContainer2(View contentContainer2) {
      this.contentContainer2 = contentContainer2;
      this.contentContainer.addView(contentContainer2);
     }
     public void setContentContainer3(View contentContainer3) {
      this.contentContainer3 = contentContainer3;
      this.contentContainer.addView(contentContainer3);
     }
     public void setTabOnClick(TabbarCallback tabOnClick) {
      this.tabOnClick = tabOnClick;
     }
     
     @Override
     public void addView(View child) {
      super.addView(child);
     }
     Context context = null;
     public TopTabbar(Context context,AttributeSet attr) {
      super(context);
      this.context = context;
      //
      this.setOrientation(LinearLayout.HORIZONTAL); 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      View view = inflater.inflate(R.layout.tabbar, this);
      int topContainerHeightRes = attr.getAttributeIntValue(nameSpace, "topContainerHeight", topContainerHeight);
      int contentContainerHeightRes = attr.getAttributeIntValue(nameSpace, "ContentContainerHeight", contentContainerHeight);
      //find top tab container ,then  set height .
      topContainer = (LinearLayout)view.findViewById(R.id.tabbar_layout_topContainer);
      topContainer.setMinimumHeight(topContainerHeightRes);
      topContainer.setId(R.string.tabContainer);
      //Find each item ,set id ,and use them  in activity code .
      fistItem = (LinearLayout) topContainer.findViewById(R.id.tabbar_linearlayout_fistItem);
      secondItem = (LinearLayout)topContainer.findViewById(R.id.tabbar_linearlayout_secondItem);
      thirdItem = (LinearLayout)topContainer.findViewById(R.id.tabbar_linearlayout_thirdItem);
      //set click event .
      fistItem.setOnClickListener(this);
      secondItem.setOnClickListener(this);
      thirdItem.setOnClickListener(this);
      //find each textView .
      tv_title_1 = (TextView)this.findViewById(R.id.tabbar_tv_title_1);
      tv_title_2 = (TextView)this.findViewById(R.id.tabbar_tv_title_2);
      tv_title_3 = (TextView)this.findViewById(R.id.tabbar_tv_title_3);
      //find content  container
      contentContainer = (LinearLayout)view.findViewById(R.id.tabbar_layout_ContentContainer);
      //set height .
      contentContainer.setMinimumHeight(contentContainerHeightRes);
      //find each content container .
      contentContainer1 = (LinearLayout)contentContainer.findViewById(R.id.tabbar_layout_ContentContainer_1);
      contentContainer2 = (LinearLayout)contentContainer.findViewById(R.id.tabbar_layout_ContentContainer_2);
      contentContainer3 = (LinearLayout)contentContainer.findViewById(R.id.tabbar_layout_ContentContainer_3);
      //set default view 
      //set whitch tab view should light .
      fistItem.setBackgroundResource(R.drawable.top_type_left_1);
      secondItem.setBackgroundResource(R.drawable.top_type_bg);
      thirdItem.setBackgroundResource(R.drawable.top_type_bg);
      //set whitch content view should visibile .
      contentContainer1.setVisibility(View.VISIBLE);
      contentContainer2.setVisibility(View.GONE);
      contentContainer3.setVisibility(View.GONE);
      //set id 
      int id = attr.getAttributeIntValue(nameSpace, "id", 0x12345);
      if(id==0x12345){
       Log.i("TopTabbar", "sorry ,TopTabbar id is not set , you can access it by default id 0x12345");
       this.setId(0x12345);
      }else{
       this.setId(id);
      }
     }
     @Override
     public void onClick(View v) {
      switch(v.getId()){
      case R.id.tabbar_linearlayout_fistItem:
       //set whitch tab view should light .
       fistItem.setBackgroundResource(R.drawable.top_type_left_1);
       secondItem.setBackgroundResource(R.drawable.top_type_bg);
       thirdItem.setBackgroundResource(R.drawable.top_type_bg);
       //set whitch content view should visibile .
       contentContainer1.setVisibility(View.VISIBLE);
       contentContainer2.setVisibility(View.GONE);
       contentContainer3.setVisibility(View.GONE);
       //set callback .
       tabOnClick.fistItemClickCallback();
       break;
      case R.id.tabbar_linearlayout_secondItem:
       //set whitch tab view should light .
       fistItem.setBackgroundResource(R.drawable.top_type_bg);
       secondItem.setBackgroundResource(R.drawable.top_type_middle_1);
       thirdItem.setBackgroundResource(R.drawable.top_type_bg);
       //set whitch content view should visibile .
       contentContainer1.setVisibility(View.GONE);
       contentContainer2.setVisibility(View.VISIBLE);
       contentContainer3.setVisibility(View.GONE);
       //set callback .
       tabOnClick.secondItemClickCallback();
       break;
      case R.id.tabbar_linearlayout_thirdItem:
       //set whitch tab view should light .
       fistItem.setBackgroundResource(R.drawable.top_type_bg);
       secondItem.setBackgroundResource(R.drawable.top_type_bg);
       thirdItem.setBackgroundResource(R.drawable.top_type_right_1);
       //set whitch content view should visibile .
       contentContainer1.setVisibility(View.GONE);
       contentContainer2.setVisibility(View.GONE);
       contentContainer3.setVisibility(View.VISIBLE);
       //set callback .
       tabOnClick.thirdItemClickCallback();
       break;
      }
     }
    }

    使用

     package com.appstore.ui;

    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import android.widget.Toast;

    import com.appstore.ui.commctrls.BaseActivity;
    import com.appstore.ui.commctrls.TabbarCallback;
    import com.appstore.ui.commctrls.TopTabbar;
    /**
     * test tabbar control .
     * @author zxy
     *
     */
    public class TopTabbabTest extends BaseActivity implements TabbarCallback {

        /** Called when the activity is first created. */
     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.tabviewtest);
            //id parameter is the same as id  you set in xml layout ,if not set you can  access it by default id 0x1234
            TopTabbar tb = (TopTabbar)findViewById(0x1234);
            //TopTabbar tb = new TopTabbar(this);
            if(tb==null){
             Log.i("toptabbar", "toptabbar is  null");
            }else{
             //set callback .
             tb.setTabOnClick(this);
             //set tab text
             tb.getTv_title_1().setText("tab1");
             tb.getTv_title_2().setText("tab2");
             tb.getTv_title_3().setText("tab3");
             //construct content view 
             LinearLayout contentView1 = new LinearLayout(this);
             TextView tv1 = new TextView(this);
             tv1.setText("fist content view .");
             contentView1.addView(tv1);
             contentView1.setVisibility(View.VISIBLE);
             
             LinearLayout contentView2 = new LinearLayout(this);
             TextView tv2 = new TextView(this);
             tv2.setText("second content view .");
             contentView2.addView(tv2);
             contentView2.setVisibility(View.GONE);
             
    //         LinearLayout contentView3 = new LinearLayout(this);
    //         TextView tv3 = new TextView(this);
    //         tv3.setText("third  content view .");
    //         contentView3.addView(tv3);
    //         contentView3.setVisibility(View.GONE);
             
             //set content 
             tb.setContentContainer1(contentView1);
             tb.setContentContainer2(contentView2);
             tb.setContentContainer3(getLocalActivityManager().startActivity(
                        "firstpage",
                        new Intent(this, GalleryTest.class)
                                .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP))
                        .getDecorView());
            }
        }

        //event click on fistitem
     @Override
     public void fistItemClickCallback() {
      Toast.makeText(this,"hello ,you clicked fist item .", Toast.LENGTH_SHORT).show();
     }
     //event click on secondItem
     @Override
     public void secondItemClickCallback() {
      Toast.makeText(this,"hello ,you clicked second  item .", Toast.LENGTH_SHORT).show();
     }
     //event click on thirdItem
     @Override
     public void thirdItemClickCallback() {
      Toast.makeText(this,"hello ,you clicked third item .", Toast.LENGTH_SHORT).show();
     }
    }

    效果

    Android 自定义Tabbar - meiyitianabc - 飞得更高!
  • 相关阅读:
    [BZOJ1222/Luogu2224][HNOI2001]产品加工
    [BZOJ1079/Luogu2476][SCOI2008]着色方案
    [BZOJ3098]Hash Killer II
    [BZOJ1818][CQOI2010]内部白点
    [BZOJ1497/Luogu4174][NOI2006]最大获利
    [BZOJ2330/Luogu3275][SCOI2011]糖果
    [BZOJ1208/Luogu2286][HNOI2004]宠物收养场
    [BZOJ1054/Luogu4289][HAOI2008]移动玩具
    Com组件介绍
    webBrowse官方说明
  • 原文地址:https://www.cnblogs.com/greywolf/p/2658454.html
Copyright © 2011-2022 走看看