美化你的APP——从Toolbar開始
Toolbar是什么
Toolbar是Google在Android 5.0中推出的一款替代ActionBar的View。ActionBar必须得作为Activity内容的一部分,而Toolbar能够放在不论什么层次。
Toolbar比ActionBar支持很多其它的功能,从開始到终点,Toolbar包括以下可选的元素:
- 一个导航button。 能够是一个向前的button、导航菜单button。等等。
- 一个logo图片
- 标题和副标题
- 一个或多个自己定义一View
- 一个menu
以下先以一张图片来介绍一下Toolbar的布局。例如以下:
怎样使用Toolbar
简单使用
如今。我用Android Studio创建一个Module,默认的,它会为我生成一个带Toolbar的Activity,其界面例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0MzEzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="Toolbar" title="">
当中顶部就是ToolBar。
关于使用。有两点须要说明:
1. Activity须要继承自AppCompatActivity,Activity使用没有ActionBar的theme
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
}
以下是theme主题设置:
android:theme="@style/AppTheme.NoActionBar"
- 在布局文件里使用Toolbar控件
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?
attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
稍复杂一点使用
以下的使用将显示Toolbar的各个元素。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0MzEzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="Toolbar" title="">
当中从左到右依次为Navigation Icon、App Icon、Title和SubTitle以及菜单。
当中导航图标、应用图标、标题这些既能够在XML中定义。也能够在代码中定义。要让Toolbar支持Menu。能够重写Activity的onCreateContextMenu中载入menu,然后给Toolbar设置一个MenuListener就可以,例如以下:
ublic class MainActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setOnMenuItemClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
Toast.makeText(this, "Search", Toast.LENGTH_SHORT).show();
break;
case R.id.action_add:
Toast.makeText(this, "Add", Toast.LENGTH_SHORT).show();
break;
case R.id.action_setting:
Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show();
break;
}
return false;
}
}
当中假设要想给导航button,添加返回的功能,须要重写onOptionsItemSelected方法,例如以下:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Toolbar让标题居中显示
非常多应用,没有使用ActionBar。而是使用了自己定义的Topbar。
使用Toolbar后发现,有些布局可能也无法实现。或者说不好实现,比方说将Title至于Toolbar中间。Toolbar提供了titleMargin属性通过设置Marigin能够达到Title文本居中的效果,只是以下我的方案是在Toolbar中间加入一个TextView。效果例如以下:
当中实现是通过一个ToolbarHelper来实现的,事实上现例如以下:
public class ToolbarHelper {
public static void addMiddleTitle(Context context, CharSequence title, Toolbar toolbar) {
TextView textView = new TextView(context);
textView.setText(title);
Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER_HORIZONTAL;
toolbar.addView(textView, params);
}
}
这样就能够实现一种效果,比方QQ
这样上图中的“动态”两字我们就能够使用Toolbar的title属性。而中间的好友动态就能够通过加入TextView的方式来实现。
至于其它功能,也能够通过Toolbar来加入View来实现。
源代码请见Github
美化你的APP——从Toolbar開始的更多相关文章
- 从今天開始学习iOS开发(iOS 7版)--实现一款App之Foundation框架的使用
iOSFoundation框架 当你着手为你的应用编写代码的时候,你会发现有很多可供使用的Objective-C的框架类,当中尤其重要的就是基础框架类.它为平台全部的应用提供基础服务.基础框架类中包括 ...
- APP 打包測试流程 从零開始
前言: 苹果应用打包測试一直是件令人头疼的事.尤其是第一次打包的时候,因为苹果官网是全英文性且缺少仔细的步骤指引.刚開始学习的人往往要花费非常多时间去干一件三分钟就能搞定的事. 今天我们来透彻的解说一 ...
- iOS9中怎样在日历App中创建一个随意时间之前開始的提醒(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) 四.创建随意时间之前開始的提醒 如今我们找到了指定源中的指定日 ...
- 兼容,原来在这里就已经開始--------Day34
看了两天,算是将w3cschool的javascript部分浏览了一遍.在脑海中大约有了一点概念,也才真切体会到:一入江湖深似海.欲穷此路难上难啊,至少如今看起来是遥遥无期.太多不懂, 太多茫然,只是 ...
- ExtJs自学教程(1):一切从API開始
题 记 该系列文章不側重全方位的去介绍ExtJs的使用,仅仅是側重于解决ExtJs问题的思考方法.写的人不用长篇大论,学的人则可以自立更生.l 学习的人仅仅要有一些CSS的javascript的基础 ...
- 開始折腾cocos2d-x,使用批处理来创建项目
開始抽出时间学习cocos2d-x了.尽管C和C++还都不咋地.只是在开发中学习记忆也许会更深吧. so决定从今天開始正式学习的用自己的空暇时间折腾它了.正好这个五一没什么事.昨天搭建了一下开发环境. ...
- 从零開始开发Android版2048 (一)初始化界面
自学Android一个月多了,一直在工作之余零零散散地看一些东西.感觉经常使用的东西都有些了解了,可是一開始写代码总会出各种奇葩的问题.感觉还是代码写得太少.这样继续杂乱地学习下去进度也太慢了,并且学 ...
- iPhone开发【一】从HelloWorld開始
转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/8013553 作者:张燕广 从经典的HelloWorld開始踏入iPhon ...
- extjs desktop startmenu (開始菜单)
extjs desktop 的開始菜单 二级菜单,仅仅是简单演示实现原理,如 须要动态生成,自己改造就可以,下面基本方法原理: 首先 建立一个js文件 生成開始菜单数据: function Get ...
随机推荐
- hdu 1565&hdu 1569(网络流--最小点权值覆盖)
方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- LeetCode OJ--Rotate Image
http://oj.leetcode.com/problems/rotate-image/ 将矩阵顺时针旋转90度.要求为原地算法. 注意对输入的测试,矩阵为空,长度为1,为2时…… #include ...
- shell - cut 使用举例
cut 使用举例 说明:此命令是对输入的每行字符串进行按照指定字符或者指定字节或者指定字段进行截取,并输出到标准输出. 参数如下: -b:以字节单位分割,这个参数不适用于中文,因为一个英文占用1个字节 ...
- Software Engineering | Factory method pattern
工厂对象通常包含一个或多个方法,用来创建这个工厂所能创建的各种类型的对象.这些方法可能接收参数,用来指定对象创建的方式,最后返回创建的对象. 有时,特定类型对象的控制过程比简单地创建一个对象更复杂.在 ...
- JDK1.8中的Lambda表达式和Stream
1.lambda表达式 Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正 ...
- Windows系统Python包的安装
本文针对于Python初学者,Python老鸟请绕道. 最近同时尝试在Windows10.MacOS.Ubuntu三个系统上安装Python相关的包,整体比较,Ubuntu最简单,Windows10最 ...
- cocos2d-x step by step(3) Double Kill
喏,咱们已经调通hello world 了,然后呢,咱们做一些高大上的东西,那做什么呢,做一个打乒乓球的小东西,啊哈! 这就是最终界面了,没画一个球形 就用一个白色方框代替吧. 啊哈! public ...
- win7 更改同步时间的网址
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\D ...
- 赵雅智_android_frame动画
在開始实例解说之前,先引用官方文档中的一段话: Frame动画是一系列图片依照一定的顺序展示的过程,和放电影的机制非常相似.我们称为逐帧动画.Frame动画能够被定义在XML文件里,也能够全然编码实现 ...
- 从TCP协议的原理来谈谈rst复位攻击
在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接.四次握手如何把全双工的连接关闭掉.滑动窗体是怎么数据传输的.TCP的flag标志位里RST在哪些情况下出现.以下我会画一些尽量简化的 ...