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

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

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; }
} }

安卓自定义类似TabHost的导航栏的更多相关文章

  1. 安卓ROOT后禁用/隐藏导航栏/虚拟按键

    安卓ROOT后禁用/隐藏导航栏/虚拟按键 提醒:提前装好EASY TOUCH 等类似工具. 用ROOT EXPLORER 或 ROOT BROWSER system\bulid.prop 最后加一行: ...

  2. [置顶] bootstrap自定义样式-bootstrap侧边导航栏的实现

    前言 bootstrap自带的响应式导航栏是向下滑动的,有时满足不了个性化的需求,需要做一个类似于android drawerLayout 侧滑的菜单,这就是我要实现的bootstrap自定义侧滑菜单 ...

  3. 自定义bootstrap样式-9行样式自定义漂亮大气bootstrap导航栏

    有人说前端发展太快,框架太多,各有所需,各有所长.看看这幅图,估计都知道这些框架,但是大部分公司中实际要用到的也就那么几个. 发展再快,框架再多.还是得回到原点,不就是Html+Css+JavaScr ...

  4. Android自定义View——实现字母导航栏

    1.自定义View实现字母导航栏 2.ListView实现联系人列表 3.字母导航栏滑动事件处理 4.字母导航栏与中间字母的联动 5.字母导航栏与ListView的联动 1.先看主布局,方便后面代码的 ...

  5. ios 实现自定义状态栏StatusBar 和 导航栏navigationBar 的状态和颜色

    很多app中可以看到不同与导航栏的状态栏的颜色,他妈的真绕嘴. 一.更改状态栏颜色 (StatusBar) 就是比如导航栏是红色的状态栏是绿色的. 要实现这样的效果其实很简单,就是添加一个背景view ...

  6. ios --xib自定义,解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题

    在使用xib自定义view的时候,个人习惯性的直接使用xib中的约束,所以自然而然的要打开Autolayout.以前在使用的时候没有发现什么问题,最近项目中使用的时候突然发现在导航栏透明的情况下,出现 ...

  7. 使用bootstrap3.0搭建一个具有自定义风格的侧边导航栏

    由于工作变动,新的项目组,可能会涉及到更多的类似于后台管理系统这一类的项目,而且开发可能更加偏向于传统型的开发,希望今后能够在新的项目中能够用得上vuejs吧! 接手项目的时候,就是一个后台管理系统, ...

  8. mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习

    以前的我是没有做笔记的习惯的,学习了后觉得自己能记住,但是最近发现很多学的东西都忘记了,所有现在一有新的知识,就记下来吧. 最近又做一个mono for android 的项目 这次调整比较大,上次做 ...

  9. iOS:自定义工具栏、导航栏、标签栏

    工具栏为UIToolBar,导航栏UINavigationBar,标签栏UITabBar.它们的样式基本上时差不多的,唯一的一点区别就是,工具栏一般需要自己去创建,然后添加到视图中,而导航栏和标签栏不 ...

随机推荐

  1. C#入门经典-第15章ListBox,CheckedListBox

  2. Popular Products

    Popular Products 描述 Given N lists of customer purchase, your task is to find the products that appea ...

  3. DIV撑开

    引用自:http://radzhang.iteye.com/blog/1678734 在CSS排版中,如果一个层中的层使用了float浮动的话,那么就有可能会出现外层没有被内层撑开的情况,如以下代码所 ...

  4. Jfreet 自动删除生成的图片

    jfreechart有自动删除的啊,会话失效就会自动删除的,我刚测试了啊,在web.xml里注册 <listener> <listener-class>org.jfree.ch ...

  5. Android - Get Bluetooth UUID for this device

    Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join th ...

  6. CG之菲涅尔效果简单实现

    菲涅尔效果,指当光到达两种材质的接触面时,一些光在接触面的表面被反射出去,而另一部分光将发生折射穿过接触面. 现在要用shader来实现这种效果,如果要精确地描述这种底层的物理,其计算公式是非常复杂的 ...

  7. c# mouseenter mousemove区别?

    onmousedown 当用户用任何鼠标按钮单击对象时触发. onmouseenter 当用户将鼠标指针移动到对象内时触发. onmouseleave 当用户将鼠标指针移出对象边界时触发. onmou ...

  8. 关于python 函数参数

    函数参数:必选参数.默认参数.可选参数.关键字参数 1.默认参数 默认参数可以简化函数的调用.设置默认参数时,有几点要注意: 一是必选参数在前,默认参数在后,否则Python的解释器会报错: 二是如何 ...

  9. Android Studio:Gradle DSL method not found: 'runProguard()'

    Android Studio发布了新的1.0版,更新之后却发现原来在0.8下面正常的项目编译失败了,从报错上来看是卡在gradle上面. Gradle DSL method not found: 'r ...

  10. 方法的标签_With携带

    方法中参数的标签: 标签的由来:1.标签也是方法名的一部分:2.为了提高程序的阅读性:OC方法允许我们给每个参数添加一个标签来说明当前参数的含义: 标签的作用:标签是为了标识变量的,因此标签名和变量名 ...