Android 自定义组合控件 简单导航栏
为什么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 自定义组合控件 简单导航栏相关推荐
- Android 自定义组合控件小结
Android 自定义组合控件小结 引言 接触Android UI开发的这段时间以来,对自定义组合控件有了一定的了解,为此小结一下,本文小结内容主要讨论的是如何使用Android SDK提供的布局和控 ...
- Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件
目标:实现EditText和Button组合成带有清空EditText内容功能的复合控件,可以通过代码设置自定义控件的相关属性. 实现效果为: (1)在res/layout目录下编写自定义组合控件的布 ...
- Android自定义组合控件---教你如何自定义下拉刷新和左滑删除
绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一 ...
- Android自定义组合控件
目标:实现textview和ImageButton组合,可以通过Xml设置自定义控件的属性. 1.控件布局:以Linearlayout为根布局,一个TextView,一个ImageButton. Xm ...
- Android 手机卫士--自定义组合控件构件布局结构
由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...
- Android View体系(十)自定义组合控件
相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...
- Android Studio自定义组合控件
在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件. 本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太 ...
- Android自定义组合布局,Android 流式布局 + 自定义组合控件
自定义组合控件 package yanjupeng.bawei.com.day09.two; import android.content.Context; import android.util.A ...
- Android自定义View 自定义组合控件
自定义组合控件: 以三国杀游戏武将为例,包括武将头像,血条,装备区 1.先定义该组合的XML文件布局 1 <?xml version="1.0" encoding=" ...
- 自定义组合控件:下拉选择框
Spinner 自定义组合控件之下拉选择框 项目概述 下拉选择框主要是通过在EditText 下用PopupWindow 动态显示ListView 控件来实现的.下拉选择框可以方便用户的输入效率,以此 ...
最新文章
- ASP.NET MVC 4 (十三) 基于表单的身份验证
- 做了几道Linux笔试题1
- 代码注入之远程线程篇
- Java内存管理之软引用(Soft Reference)
- 【注意】关于Redis存在远程命令执行漏洞的安全公告
- Using rqt_console and roslaunch
- 字符串匹配——枚举法
- Java 8 方法引用 (Method Reference)快速介绍与示例
- XManager 远程访问 Ubuntu16.04 图形界面
- STM32串口接收以及发送大全
- NumPy.npy与pandas DataFrame
- MSOCache文件,带你一文看懂。
- Android Studio中的typo波浪线提示
- php服务映射到端口,映射php错误
- 从产业互联网的角度,解读360智慧商业发布“春雨计划”
- 小南迎宾机器人使用说明
- 24.STM32的IO口扩展PCF8574
- java处理图片与base64编码互相转换
- GPT分区-----Linux系统
- android登陆按钮图片素材,Android精美登录界面设计
热门文章
- [VBA]_更改单元格背景颜色
- 对“最大子序列和问题”的一点思考
- Android UI学习之---Button
- linux内核C -- 第05课:零长度数组
- Linux内核入门(一)——体系架构
- ZooKeeper之ZkClient使用示例
- java 封闭类型_java – 如何获取封闭类?
- 华为鸿蒙系统和奔驰公司,华为已行动,又是一个千亿BG,奔驰已经加入
- python3 shell脚本开发_python3 subprogress 模块的使用 代替shell编写脚本
- python部署到服务器上解析不到模块_在服务器上部署kafka-python包