导航栏包括:
- 返回按钮
- 标题
- 右侧按钮(功能不确定)
首先是布局文件,如下:
布局包含两个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(); } }); }}