本篇记录了navigation bar顶部导航栏的自定义方法,抛砖引玉,简单实现了常用的布局,在此基础上可添加较复杂的布局。
在res/values目录下style.xml文件:
在navigationbar.xml文件中布局:
左边一个ImageView
中间TextView
右边一个ImageView
代码如下:
调用xml布局,并实现NavigationBar协议方法。
private TextView tvTitle;
private ImageView leftImage;
private ImageView rightImage;
public NavigationBar(@NonNull Context context) {
super(context);
initView(context);
}
public NavigationBar(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public NavigationBar(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
private void initView(Context context) {
View view = inflate(context, R.layout.navigationbar, this);
tvTitle = view.findViewById(R.id.navigationbar_title);
leftImage = view.findViewById(R.id.navigationbar_leftImage);
rightImage = view.findViewById(R.id.navigationbar_rightImage);
}
此时已完成navigationbar的创建,但是为了统一维护,便于管理,再添加几个封装方法,以实现不同需求。
public void setTitle(String title) {
tvTitle.setText(title);
}
public void setLeftImage(Integer image) {
leftImage.setBackgroundResource(image);
}
public void init(String title, boolean isLeftVisiable, OnClickListener leftListener){
tvTitle.setText(title);
if (isLeftVisiable){
leftImage.setVisibility(VISIBLE);
leftImage.setOnClickListener(leftListener);
}else {
leftImage.setVisibility(INVISIBLE);
}
}
public void rightTabBar(boolean isRightVisiable, Integer image, OnClickListener rightListener){
rightImage.setBackgroundResource(image);
if (isRightVisiable){
rightImage.setVisibility(VISIBLE);
rightImage.setOnClickListener(rightListener);
}else {
rightImage.setVisibility(INVISIBLE);
}
}