• 安卓自定义类似TabHost的导航栏


    有时候为了项目需要我们要自定义一些导航控件,类似下面这样。

    下面给大家讲讲我是怎么实现的,

    1、素材准备(这个都是美工的事情)

    2、①资源文件共有五个

    如下:

    activity_main_first.xml(五点工作)

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_selected="true" android:drawable="@drawable/activity_main_first_down"></item>
        <item  android:drawable="@drawable/activity_main_first_up"></item>
    </selector>

    activity_main_four_item.xml(四项考核)

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_selected="true" android:drawable="@drawable/activity_main_four_item_down"></item>
      <item android:drawable="@drawable/activity_main_four_item_up"></item>
    </selector>

    activity_main_manage.xml(管理)

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_selected="true" android:drawable="@drawable/activity_main_manage_down"></item>
    <item android:drawable="@drawable/activity_main_manage_up"></item>
    </selector>

    activity_main_pk.xml(快乐PK)

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_selected="true" android:drawable="@drawable/activity_main_pk_down"></item>
       <item android:drawable="@drawable/activity_main_pk_up"></item>
    </selector>

    strings.xml文件中的id数据

    <resources>
    
        <string name="app_name">TabHostTest</string>
        <item name="fiveJob" type="id">1</item>
        <item name="fourpoint" type="id">2</item>
        <item name="manage" type="id">3</item>
        <item name="pk" type="id">4</item>
    </resources>

    ②、单个按钮的布局文件

    activity_main_modle_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
         <FrameLayout android:layout_width="wrap_content"
             android:layout_gravity="center"
             android:layout_height="wrap_content">
               <TextView 
            android:id="@+id/activity_main_module_item_bg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="17sp"
            android:background="@drawable/activity_main_module_item_masking"
            android:gravity="center"
          />
             <ImageView android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
                 android:id="@+id/img_modle_item"
                  android:scaleType="centerCrop"
                 android:src="@drawable/activity_main_first"/>
         </FrameLayout>
      
    </LinearLayout>

    ③、主activity布局文件

    main_activity.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:orientation="vertical" >
         <FrameLayout android:id="@+id/fragment_main"
             android:layout_width="fill_parent"
             android:layout_height="0dp"
             android:layout_weight="1"></FrameLayout> 
    <LinearLayout android:id="@+id/liner_main_modle"
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        
        android:background="@drawable/activity_main_module_background"
        android:layout_height="wrap_content"
    ></LinearLayout>
    </LinearLayout>

    3、主Activity代码实现

    public class MainActivity extends Activity implements OnClickListener{
      private LinearLayout mainMoudle;
      private int[] strInt=new int[]{R.id.fiveJob,R.id.fourpoint,R.id.manage,R.id.pk};
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            
            setContentView(R.layout.main_activity);
            mainMoudle=(LinearLayout)findViewById(R.id.liner_main_modle);
            InitModles();
        }
    
        private void InitModles()
        {
            DisplayMetrics metrics=new DisplayMetrics();
            MainActivity.this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
            LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(metrics.widthPixels/strInt.length,LinearLayout.LayoutParams.FILL_PARENT);
            
            for(int i=0;i<strInt.length;i++)
            {
                View view=getLayoutInflater().inflate(R.layout.activity_main_modle_item, null);
                view.setLayoutParams(params);
            switch(strInt[i])
            {
            case R.id.fiveJob:
                ((ImageView)view.findViewById(R.id.img_modle_item)).setImageResource(R.drawable.activity_main_first);
                view.setId(R.id.fiveJob);
                view.setOnClickListener(MainActivity.this);
                break;
            case R.id.fourpoint:
                ((ImageView)view.findViewById(R.id.img_modle_item)).setImageResource(R.drawable.activity_main_four_item);
                view.setId(R.id.fourpoint);
                view.setOnClickListener(MainActivity.this);
                break;
            case R.id.manage:
                ((ImageView)view.findViewById(R.id.img_modle_item)).setImageResource(R.drawable.activity_main_manage);
                view.setId(R.id.manage);
                view.setOnClickListener(MainActivity.this);
                break;
            case R.id.pk:
                ((ImageView)view.findViewById(R.id.img_modle_item)).setImageResource(R.drawable.activity_main_pk);
                view.setId(R.id.pk);
                view.setOnClickListener(MainActivity.this);
                break;
            }
            mainMoudle.addView(view);
            }
        }
    
        public void ResetAllButton()
        {
            for(int i=0;i<mainMoudle.getChildCount();i++)
            {
                ((LinearLayout)mainMoudle.getChildAt(i)).setSelected(false);
            }
        }
        
        public void setSelected(int id)
        {
            mainMoudle.findViewById(id).setSelected(true);
            
        }
        
        
        
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
            case R.id.fiveJob:
                ResetAllButton();
                setSelected(R.id.fiveJob);
                break;
            case R.id.fourpoint:
                ResetAllButton();
                setSelected(R.id.fourpoint);
                break;
            case R.id.manage:
                ResetAllButton();
                setSelected(R.id.manage);
                break;
            case R.id.pk:
                ResetAllButton();
                setSelected(R.id.pk);
                break;
            
            }
        }
        
        
        
        
    }
  • 相关阅读:
    VS2015 调试中断点突然失效的解决办法、VS调试时关闭调试让浏览器继续保留页面
    Postman调用WebService,包括头验证部分
    C# 正则表达式大全
    Webservice超时问题
    C# DateTime的 ParseExact和 TryParseExact 使用说明
    4、QT分析之调试跟踪系统
    5、QT分析之网络编程
    QIODevice (Qt中所有 I/O devices 的基类,QFile,QBuffer,QTcpSocket等)
    Qt 菜鸟的坑 QAbstractSocket::isValid()
    qt之QAbstractSocket
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3616774.html
Copyright © 2020-2023  润新知