安卓自定义类似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;
        
        }
    }
    
    
    
    
}
原文地址:https://www.cnblogs.com/wolipengbo/p/3616774.html