自定义toolbar
来源:互联网 发布:sql server 按天分组 编辑:程序博客网 时间:2024/04/19 22:09
---
layout: post
title: 自定义toolbar
category: 代码
tags: android 控件
keywords:
description:
---
##程序功能
下面先来两张程序运行的图片。
程序主要实现的功能就是通过点击开关组件来切换toolbar样式。
运用了自定义toolbar。
##代码
###`mainactivity.java`代码
package com.example.whoami.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
MyToolBar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (MyToolBar) findViewById(R.id.toolbar);
ToggleButton toggleButton = (ToggleButton) this.findViewById(R.id.toggleButton);
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
//通过开关的值来控制toolbar的样式
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b){
setStyle1();
}else{
setStyle2();
}
}
});
}
//样式一(界面像是一个搜索输入框,带一个放大镜图标)
public void setStyle1(){
toolbar.setTitleHiddent();
toolbar.setSearchShow();
}
//样式二(界面显示一个返回图标,一个标题,改标题通过xml设置,还有一个+号图标
public void setStyle2(){
toolbar.setSerchHiddent();
toolbar.setTitleShow();
}
}
###主界面对于的布局`activity_main.xml`
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
>
<com.example.whoami.myapplication.MyToolBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="@color/colorAccent"
android:id="@+id/toolbar"
app:title="主页"
app:isTitleShow="false"
app:rightButtonIcon="@android:drawable/ic_menu_add"
>
</com.example.whoami.myapplication.MyToolBar>
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New ToggleButton"
android:id="@+id/toggleButton"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="185dp" />
</RelativeLayout>
###MyToolbar.java
新建一个类`MyToolbar.java`,继承toolbar。代码如下
package com.example.whoami.myapplication;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.TintTypedArray;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class MyToolBar extends Toolbar{
//布局解析器
private LayoutInflater inflater;
EditText mSearchView;
TextView mTitle;
Button mRightButton;
View mview;
public MyToolBar(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
setContentInsetsRelative(10,10);//设置toolbar里面组件的边距,一个重要的属性,注意。
//自定义属性,在varles文件夹里面新建一个attrs.xml
//使用该文件里面的属性来给我们自定义控件赋值
//读取attrs.xml文件的MyToolBar节点
final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
R.styleable.MyToolBar, 0, 0);
//读取清单文件app:rightButtonIcon属性,并赋值给我们+号图片赋值
final Drawable navIcon = a.getDrawable(R.styleable.MyToolBar_rightButtonIcon);
//读取app:isTitleShow属性,设置初始界面显示的主题(有两个主题)
final Boolean isTitleShow = a.getBoolean(R.styleable.MyToolBar_isTitleShow,false);
//设置主题(所以可以通过isTitleShow来设置初始主题,也可以通过开关的空间切换主题
setStyle(isTitleShow);
Toast.makeText(getContext(), "navIcon="+navIcon, Toast.LENGTH_SHORT).show();
setmRightButtonIcon(navIcon);
a.recycle();
}
private void setStyle(Boolean isTitleShow) {
if(isTitleShow){
setTitleShow();
setSerchHiddent();
}else{
setTitleHiddent();
setSearchShow();
}
}
private void initView() {
if(mview ==null) {
inflater = LayoutInflater.from(getContext());
mview = inflater.inflate(R.layout.toolbar, null);
mSearchView= (EditText) mview.findViewById(R.id.toolbar_searchview);
mTitle = (TextView) mview.findViewById(R.id.toolbar_title);
mRightButton = (Button) mview.findViewById(R.id.toolbar_rightButton);
LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL);
addView(mview, lp);
}
}
//下面这两个方法主要就是为自定义控件设置标题
@Override
public void setTitle(int resId) {
setTitle(getContext().getText(resId));
}
@Override
public void setTitle(CharSequence title) {
initView();
if (mTitle != null){
mTitle.setText(title);
}
}
public void setmRightButtonIcon(Drawable icon){
if(mRightButton!= null){
mRightButton.setBackground(icon);
}
}
public void setSearchShow(){
mSearchView.setVisibility(VISIBLE);
setNavigationIcon(null);
}
public void setTitleHiddent(){
mTitle.setVisibility(GONE);
mRightButton.setVisibility(GONE);
}
public void setSerchHiddent(){
mSearchView.setVisibility(GONE);
setNavigationIcon(android.R.drawable.ic_media_rew);
}
public void setTitleShow(){
mTitle.setVisibility(VISIBLE);
mRightButton.setVisibility(VISIBLE);
}
}
###value文件夹里面的`styles.xml`代码如下
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorAccent</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@color/yellow</item>
</style>
<color name="yellow">#ffffff</color>
</resources>
###源代码下载百度云下载
[地址一](http://pan.baidu.com/s/1skJRgVr)。
layout: post
title: 自定义toolbar
category: 代码
tags: android 控件
keywords:
description:
---
##程序功能
下面先来两张程序运行的图片。
程序主要实现的功能就是通过点击开关组件来切换toolbar样式。
运用了自定义toolbar。
##代码
###`mainactivity.java`代码
package com.example.whoami.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
MyToolBar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (MyToolBar) findViewById(R.id.toolbar);
ToggleButton toggleButton = (ToggleButton) this.findViewById(R.id.toggleButton);
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
//通过开关的值来控制toolbar的样式
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b){
setStyle1();
}else{
setStyle2();
}
}
});
}
//样式一(界面像是一个搜索输入框,带一个放大镜图标)
public void setStyle1(){
toolbar.setTitleHiddent();
toolbar.setSearchShow();
}
//样式二(界面显示一个返回图标,一个标题,改标题通过xml设置,还有一个+号图标
public void setStyle2(){
toolbar.setSerchHiddent();
toolbar.setTitleShow();
}
}
###主界面对于的布局`activity_main.xml`
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
>
<com.example.whoami.myapplication.MyToolBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="@color/colorAccent"
android:id="@+id/toolbar"
app:title="主页"
app:isTitleShow="false"
app:rightButtonIcon="@android:drawable/ic_menu_add"
>
</com.example.whoami.myapplication.MyToolBar>
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New ToggleButton"
android:id="@+id/toggleButton"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="185dp" />
</RelativeLayout>
###MyToolbar.java
新建一个类`MyToolbar.java`,继承toolbar。代码如下
package com.example.whoami.myapplication;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.TintTypedArray;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class MyToolBar extends Toolbar{
//布局解析器
private LayoutInflater inflater;
EditText mSearchView;
TextView mTitle;
Button mRightButton;
View mview;
public MyToolBar(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
setContentInsetsRelative(10,10);//设置toolbar里面组件的边距,一个重要的属性,注意。
//自定义属性,在varles文件夹里面新建一个attrs.xml
//使用该文件里面的属性来给我们自定义控件赋值
//读取attrs.xml文件的MyToolBar节点
final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
R.styleable.MyToolBar, 0, 0);
//读取清单文件app:rightButtonIcon属性,并赋值给我们+号图片赋值
final Drawable navIcon = a.getDrawable(R.styleable.MyToolBar_rightButtonIcon);
//读取app:isTitleShow属性,设置初始界面显示的主题(有两个主题)
final Boolean isTitleShow = a.getBoolean(R.styleable.MyToolBar_isTitleShow,false);
//设置主题(所以可以通过isTitleShow来设置初始主题,也可以通过开关的空间切换主题
setStyle(isTitleShow);
Toast.makeText(getContext(), "navIcon="+navIcon, Toast.LENGTH_SHORT).show();
setmRightButtonIcon(navIcon);
a.recycle();
}
private void setStyle(Boolean isTitleShow) {
if(isTitleShow){
setTitleShow();
setSerchHiddent();
}else{
setTitleHiddent();
setSearchShow();
}
}
private void initView() {
if(mview ==null) {
inflater = LayoutInflater.from(getContext());
mview = inflater.inflate(R.layout.toolbar, null);
mSearchView= (EditText) mview.findViewById(R.id.toolbar_searchview);
mTitle = (TextView) mview.findViewById(R.id.toolbar_title);
mRightButton = (Button) mview.findViewById(R.id.toolbar_rightButton);
LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL);
addView(mview, lp);
}
}
//下面这两个方法主要就是为自定义控件设置标题
@Override
public void setTitle(int resId) {
setTitle(getContext().getText(resId));
}
@Override
public void setTitle(CharSequence title) {
initView();
if (mTitle != null){
mTitle.setText(title);
}
}
public void setmRightButtonIcon(Drawable icon){
if(mRightButton!= null){
mRightButton.setBackground(icon);
}
}
public void setSearchShow(){
mSearchView.setVisibility(VISIBLE);
setNavigationIcon(null);
}
public void setTitleHiddent(){
mTitle.setVisibility(GONE);
mRightButton.setVisibility(GONE);
}
public void setSerchHiddent(){
mSearchView.setVisibility(GONE);
setNavigationIcon(android.R.drawable.ic_media_rew);
}
public void setTitleShow(){
mTitle.setVisibility(VISIBLE);
mRightButton.setVisibility(VISIBLE);
}
}
###value文件夹里面的`styles.xml`代码如下
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorAccent</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@color/yellow</item>
</style>
<color name="yellow">#ffffff</color>
</resources>
###源代码下载百度云下载
[地址一](http://pan.baidu.com/s/1skJRgVr)。
[地址二](http://pan.baidu.com/s/1c18MrUK),提取码:632s
其他地址:http://xiejingxun.com/2016/06/05/android-mytoolbar.html
0 0
- 自定义toolbar
- 自定义toolbar
- 自定义ToolBar
- 自定义ToolBar
- 自定义ToolBar
- 自定义ToolBar
- 自定义Toolbar
- 自定义Toolbar
- 自定义toolbar
- 自定义toolbar
- 自定义toolbar
- 自定义ToolBar
- 自定义toolbar
- Adnroid Toolbar 自定义Toolbar布局
- jsf自定义toolbar组件
- jsf自定义toolbar组件
- jsf自定义toolbar组件
- jsf自定义toolbar组件
- 【刷题之路】矩阵最小路径
- Oracle入门1
- JAVA 实现 TP-LINK路由器拨号
- svn中设置文件夹链接
- 父子页面的信息传递
- 自定义toolbar
- Intent的Action属性大全
- iOS 为分类添加属性
- Sqoop导入数据到HDFS中(大数据存储系统)
- 说说Android中的Settings.Secure
- 二叉树相关算法的总结
- 【设计模式】Proxy 代理模式
- 深度学习FPGA实现基础知识9(Deep Learning(深度学习)Matlab工具箱下载、安装、测试)
- Cacti编译安装错误: Warning: strtotime(): It is not safe to rely on the system's timezone settings.