博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 自定义组合控件 简单导航栏
阅读量:6228 次
发布时间:2019-06-21

本文共 3513 字,大约阅读时间需要 11 分钟。

  hot3.png

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

导航栏包括:

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

首先是布局文件,如下:

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

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

/** * 导航栏组件,目前包括返回键,标题,右侧按钮.其中: * 
返回键已经实现按键监听 *
右侧按钮已实现按键监听 *
标题默认不可点击 * @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; } /** * 导航栏点击回调接口 *
如若需要标题可点击,可再添加 * @author Asia * */ public static interface ClickCallback{ /** * 点击返回按钮回调 */ void onBackClick(); void onRightClick(); } @Override public 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中包含一个回调接口,在使用时设置一个此接口即可.

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

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

主界面布局

主界面Java代码

public class MainActivity extends Activity {    @Override    protected 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() {                        @Override            public void onRightClick() {                DLog.d("点击了右侧按钮!");                ToastUtil.showShort(MainActivity.this, "点击了右侧按钮!");            }                        @Override            public void onBackClick() {                DLog.d("点击了返回按钮!");                ToastUtil.showShort(MainActivity.this, "点击了返回按钮!");                finish();            }        });    }}

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

你可能感兴趣的文章
Flymeos插桩适配教程
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>
微信支付申请90%的商户都卡在这儿了,申请微信支付,商户功能设置详细说明...
查看>>
高仿Instagram 页面效果android特效
查看>>
2016 年总结
查看>>
将String转化成Stream,将Stream转换成String
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>