android toolbar教程,安卓自定义组合控件--toolbar,安卓控件--toolbar

安卓自定义组合控件--toolbar,安卓控件--toolbar

最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过感觉封装性不好,就又改成了自定义组合控件的方式。

使用的工具为android studio 2.2,简称AS吧

1.首先创建一个新的自定义控件,如下图。AS会创建3个文件,  一个java文件,一个layout中的xml文件(这个是布局文件),一个values中的xml文件(这个是属性文件)

f09f3d3e064cd6bbc5475c88a7c74f72.png

2. 修改布局文件,代码如下。这里使用了RelativeLayout,  并且宽度和高度都选择了match_parent, 真实的宽度是在调用控件的地方写。

布局很简单, 左边后退按钮(可定义onclick方法),中间标题,右边功能按钮(可隐藏,可更换图标,可定义onclick方法)

xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/toolbar_all1"android:layout_width="match_parent"android:layout_height="match_parent">

android:id="@+id/toolbar_left_button1"android:layout_width="20dp"android:layout_height="20dp"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:src="@mipmap/ic_top_back"/>

android:id="@+id/toolbar_title1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:textColor="@color/toolbar_text"android:textSize="@dimen/toolbar_text_size"/>

android:id="@+id/toolbar_right_button1"android:layout_width="30dp"android:layout_height="30dp"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="10dp"/>

3. 修改属性文件,这里就定义了一个属性titleText, 用于在布局文件中给toolbar设置title

4.修改java文件。ToolbarControl类是继承与Toolbar类的。定义了titleStr属性,并且生成getter和setter,这里要和属性文件中定义的属性名一致,类型也要一致,否则会有问题。

还定义了代码设置title,代码设置右边功能菜单的图标、onclick事件。以及左边后退按钮的onclick事件(本来想把后退封装在控件里面,但是没找到好的方法,只能从调用的地方添加个OnclickListenser,  如有方法封装到控件里面,请指教)

public class ToolbarControl extendsToolbar {private static final String TAG = ToolbarControl.class.getSimpleName();privateString titleText;

@BindView(R.id.toolbar_left_button1)publicImageView leftButton;

@BindView(R.id.toolbar_title1)publicTextView titleTextView;

@BindView(R.id.toolbar_right_button1)publicImageView rightButton;publicToolbarControl(Context context) {super(context);

init(context,null);

}publicToolbarControl(Context context, AttributeSet attrs) {super(context, attrs);

init(context, attrs);

}private voidinit(Context context, AttributeSet attrs) {

View view= LayoutInflater.from(context).inflate(R.layout.toolbar_control, this, true);

ButterKnife.bind(this, view);//很重要

setContentInsetsRelative(0, 0);// Load attributes

final TypedArray a = getContext().obtainStyledAttributes(

attrs, R.styleable.ToolbarControl, 0, 0);

titleText =a.getString(R.styleable.ToolbarControl_titleText);

Log.d(TAG, titleText);

titleTextView.setText(titleText);

a.recycle();

}public voidsetTitle(String titleStr) {if (titleTextView != null) {

titleTextView.setText(titleStr);

}

}public void setTitleByResourceId(intrid) {if (titleTextView != null) {

titleTextView.setText(rid);

}

}public void setRightButtonImage(intresourceId) {if (rightButton != null) {

rightButton.setImageResource(resourceId);

}

}public voidshowImage() {if (rightButton != null) {

rightButton.setVisibility(View.VISIBLE);

}

}public voidhideImage() {if (rightButton != null) {

rightButton.setVisibility(View.GONE);

}

}public voidhide() {this.setVisibility(View.GONE);

}public voidsetBackButtonOnClickListerner(OnClickListener listerner) {if (leftButton != null && listerner != null) {

leftButton.setOnClickListener(listerner);

}

}public voidsetButtonOnClickListener(OnClickListener listener) {if (rightButton != null && listener != null) {

rightButton.setOnClickListener(listener);

}

}public String getTitleText() {

return titleText;

}

public void setTitleText(String titleText) {

this.titleText =titleText;

}

}

5. 布局中引用,  这里要设置控件的颜色、height也设置成wrap_content,并设置minHeight为?attr/actionBarSize

6. 代码中初始化控件。 首先将空间设置为support actionbar,  之后禁止显示自动的title, 然后设置 后退按钮的事件(就是finish),设置右边功能菜单的图标,和点击事件

private voidinitToolBar() {

setSupportActionBar(toolbar);

getSupportActionBar().setDisplayShowTitleEnabled(false);

toolbar.setBackButtonOnClickListerner(newView.OnClickListener() {

@Overridepublic voidonClick(View view) {

AboutMeActivity.this.finish();

}

});

toolbar.setRightButtonImage(R.drawable.me);

toolbar.setButtonOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View view) {//你自己的功能

}

});

}

好了,一个完整的toolbar控件极其调用功能已经完成了。看下效果吧。

909dfc3f319b1ee9ba5c1852129d6505.png

如果有问题,请指教

http://www.dengb.com/Androidjc/1183330.htmlwww.dengb.comtruehttp://www.dengb.com/Androidjc/1183330.htmlTechArticle安卓自定义组合控件--toolbar,安卓控件--toolbar 最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值