为什么80%的码农都做不了架构师?>>>   

最近在做项目的过程中,发现项目中好多界面的导航栏都很类似或者一样,但是每次都要重复写同样的代码,觉得很不爽,所以就简单地自定义了一下导航栏控件.
先上图:

导航栏包括:

  • 返回按钮
  • 标题
  • 右侧按钮(功能不确定)

首先是布局文件,如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/rl_chat_title"android:layout_width="match_parent"android:layout_height="50dp"android:background="@drawable/land_navigation"android:layout_alignParentTop="true"><ImageView android:id="@+id/iv_nav_back"android:layout_width="50dp"android:layout_height="50dp"android:padding="13dp"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:src="@drawable/icon_back"/><TextView android:id="@+id/tv_nav_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_vertical"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="@string/app_name"/><ImageView android:id="@+id/iv_nav_right"android:layout_width="50dp"android:layout_height="50dp"android:padding="13dp"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:src="@drawable/icon_setting1"/>
</RelativeLayout>

布局包含两个ImageView和一个TextView.

然后自定义类NavigationView继承RelativeLayout并实现OnClickListener接口.

/*** 导航栏组件,目前包括返回键,标题,右侧按钮.其中:* </br>返回键已经实现按键监听* </br>右侧按钮已实现按键监听* </br>标题默认不可点击* @author Asia**/
public class NavigationView extends RelativeLayout implements OnClickListener{public NavigationView(Context context){this(context, null);}private ImageView backView;private TextView titleView;private ImageView rightView;public NavigationView(Context context, AttributeSet attrs) {super(context, attrs);View view = LayoutInflater.from(context).inflate(R.layout.navigation_view, this, true);backView = (ImageView) view.findViewById(R.id.iv_nav_back);backView.setOnClickListener(this);titleView = (TextView) view.findViewById(R.id.tv_nav_title);rightView = (ImageView) view.findViewById(R.id.iv_nav_right);rightView.setOnClickListener(this);}/*** 获取返回按钮* @return*/public ImageView getBackView() {return backView;}/*** 获取标题控件* @return*/public TextView getTitleView() {return titleView;}/*** 设置标题* @param title*/public void setTitle(String title){titleView.setText(title);}/*** 获取右侧按钮,默认不显示* @return*/public ImageView getRightView() {return rightView;}private ClickCallback callback;/*** 设置按钮点击回调接口* @param callback*/public void setClickCallback(ClickCallback callback) {this.callback = callback;}/*** 导航栏点击回调接口* </br>如若需要标题可点击,可再添加* @author Asia**/public static interface ClickCallback{/*** 点击返回按钮回调*/void onBackClick();void onRightClick();}@Overridepublic void onClick(View v) {int id = v.getId();if (id == R.id.iv_nav_back) {callback.onBackClick();return;}if (id == R.id.iv_nav_right) {callback.onRightClick();return;}}
}

NavigationView中包含一个回调接口,在使用时设置一个此接口即可.

/*** 导航栏点击回调接口* </br>如若需要标题可点击,可再添加* @author Asia**/
public static interface ClickCallback{/*** 点击返回按钮回调*/void onBackClick();void onRightClick();
}

如何使用呢?下面实际使用的过程.

主界面布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.asi.customview.view.NavigationView android:id="@+id/nav_main"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" />
</LinearLayout>

主界面Java代码

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initView();}private NavigationView navigationView;private void initView() {navigationView = (NavigationView) super.findViewById(R.id.nav_main);navigationView.setTitle("Title");navigationView.setClickCallback(new ClickCallback() {@Overridepublic void onRightClick() {DLog.d("点击了右侧按钮!");ToastUtil.showShort(MainActivity.this, "点击了右侧按钮!");}@Overridepublic void onBackClick() {DLog.d("点击了返回按钮!");ToastUtil.showShort(MainActivity.this, "点击了返回按钮!");finish();}});}
}

转载于:https://my.oschina.net/yaly/blog/514635

Android 自定义组合控件 简单导航栏相关推荐

  1. Android 自定义组合控件小结

    Android 自定义组合控件小结 引言 接触Android UI开发的这段时间以来,对自定义组合控件有了一定的了解,为此小结一下,本文小结内容主要讨论的是如何使用Android SDK提供的布局和控 ...

  2. Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件

    目标:实现EditText和Button组合成带有清空EditText内容功能的复合控件,可以通过代码设置自定义控件的相关属性. 实现效果为: (1)在res/layout目录下编写自定义组合控件的布 ...

  3. Android自定义组合控件---教你如何自定义下拉刷新和左滑删除

    绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一 ...

  4. Android自定义组合控件

    目标:实现textview和ImageButton组合,可以通过Xml设置自定义控件的属性. 1.控件布局:以Linearlayout为根布局,一个TextView,一个ImageButton. Xm ...

  5. Android 手机卫士--自定义组合控件构件布局结构

    由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...

  6. Android View体系(十)自定义组合控件

    相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...

  7. Android Studio自定义组合控件

    在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件.  本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太 ...

  8. Android自定义组合布局,Android 流式布局 + 自定义组合控件

    自定义组合控件 package yanjupeng.bawei.com.day09.two; import android.content.Context; import android.util.A ...

  9. Android自定义View 自定义组合控件

    自定义组合控件: 以三国杀游戏武将为例,包括武将头像,血条,装备区 1.先定义该组合的XML文件布局 1 <?xml version="1.0" encoding=" ...

  10. 自定义组合控件:下拉选择框

    Spinner 自定义组合控件之下拉选择框 项目概述 下拉选择框主要是通过在EditText 下用PopupWindow 动态显示ListView 控件来实现的.下拉选择框可以方便用户的输入效率,以此 ...

最新文章

  1. ASP.NET MVC 4 (十三) 基于表单的身份验证
  2. 做了几道Linux笔试题1
  3. 代码注入之远程线程篇
  4. Java内存管理之软引用(Soft Reference)
  5. 【注意】关于Redis存在远程命令执行漏洞的安全公告
  6. Using rqt_console and roslaunch
  7. 字符串匹配——枚举法
  8. Java 8 方法引用 (Method Reference)快速介绍与示例
  9. XManager 远程访问 Ubuntu16.04 图形界面
  10. STM32串口接收以及发送大全
  11. NumPy.npy与pandas DataFrame
  12. MSOCache文件,带你一文看懂。
  13. Android Studio中的typo波浪线提示
  14. php服务映射到端口,映射php错误
  15. 从产业互联网的角度,解读360智慧商业发布“春雨计划”
  16. 小南迎宾机器人使用说明
  17. 24.STM32的IO口扩展PCF8574
  18. java处理图片与base64编码互相转换
  19. GPT分区-----Linux系统
  20. android登陆按钮图片素材,Android精美登录界面设计

热门文章

  1. [VBA]_更改单元格背景颜色
  2. 对“最大子序列和问题”的一点思考
  3. Android UI学习之---Button
  4. linux内核C -- 第05课:零长度数组
  5. Linux内核入门(一)——体系架构
  6. ZooKeeper之ZkClient使用示例
  7. java 封闭类型_java – 如何获取封闭类?
  8. 华为鸿蒙系统和奔驰公司,华为已行动,又是一个千亿BG,奔驰已经加入
  9. python3 shell脚本开发_python3 subprogress 模块的使用 代替shell编写脚本
  10. python部署到服务器上解析不到模块_在服务器上部署kafka-python包