Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与Actionbar 相比, Toolbar 明显要灵活的多。它不像 Actionbar 一样,一定要固定在Activity的顶部,而是可以放到界面的任意位置。除此之外,在设计 Toolbar 的时候,Google也留给了开发者很多可定制修改的余地,这些可定制修改的属性在API文档中都有详细介绍,如:
- 设置导航栏图标;
- 设置App的logo;
- 支持设置标题和子标题;
- 支持添加一个或多个的自定义控件;
- 支持Action Menu;
-
我们在使用 Toolbar 时候需要先隐藏掉系统原先的导航栏,网上很多人都说给Activity设置一个NoActionBar的Theme。但个人觉得有点小题大做了,所以这里我直接在BaseActivity中调用 supportRequestWindowFeature(Window.FEATURE_NO_TITLE) 去掉了默认的导航栏(注意,我的BaseActivity是继承了AppCompatActivity的,如果是继承Activity就应该调用 requestWindowFeature(Window.FEATURE_NO_TITLE) );
-
如果你想修改标题和子标题的字体大小、颜色等,可以调用 setTitleTextColor 、setTitleTextAppearance 、 setSubtitleTextColor 、 setSubtitleTextAppearance这些API;
-
自定义的View位于 title 、 subtitle 和 actionmenu 之间,这意味着,如果 title 和subtitle 都在,且 actionmenu选项 太多的时候,留给自定义View的空间就越小;
-
导航图标和 app logo 的区别在哪?如果你只设置 导航图标 ( or app logo ) 和 title 、subtitle ,会发现 app logo 和 title 、 subtitle 的间距比较小,看起来不如 导航图标 与 它们两搭配美观;
-
Toolbar和其他控件一样,很多属性设置方法既支持代码设置,也支持在xml中设置(这里也是最最最最最坑爹的地方,如何坑爹法,请接着往下看);
今天先分享怎么简单配置toolbar
功能代码
package com.zhuandian.dianzicheng;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.zhuandian.dianzicheng.GuideView.AboutUs;
import com.zhuandian.dianzicheng.pay.PayActivity;
import com.zhuandian.dianzicheng.pay.PriceList;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import cn.pedant.SweetAlert.SweetAlertDialog;
public class MainActivity extends Activity implements View.OnClickListener {
private Toolbar mToolbar;
private TextView addTextView;
private TextView weightTextview;
private TextView priceTextView;
private MediaPlayer mediaPlayer=null;
private TextView sumPriceTextView;
private double sumPirce=0;
// private Handler handler=new Handler()
// {
// @Override
// public void handleMessage(Message msg) {
// String data=(String)msg.obj;
// Log.v("info5", "收到handle的消息啦");
//
// if(msg.what==1)
// {
// Log.v("xiedong","type0");
// weightTextview.setText(data);
// }
//
if(msg.what==GET_INFO_TYPE1)
{
Log.v("xiedong","type0");
parseType1Str(data);
}
// }
// };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
mToolbar= (Toolbar) findViewById(R.id.toolbar);
mToolbar.setTitle("智能电子秤");
mToolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
//修改主标题的颜色、外观
mToolbar.setTitleTextAppearance(this, R.style.AppTheme);
mToolbar.inflateMenu(R.menu.menu_main); //右上角的三个小圆点菜单
//初始化控件
initViw();
// MyTask myTask= new MyTask();
// myTask.execute();
// new Thread(){
//
// @Override
// public void run() {
// try {
// String info=getInfo();
//
//
String info="31;{005.00AT+CIPSEND=0";
// //31; {005.00AT+CIPSEND=0
// String info1=info.replaceAll("([0-9]{2}).\\d{0,1}\\{\\d+\\.\\d+[A-Z]{2}\\+[A-Z]{1,10}=\\d", "$1");
// String info2=info.replaceAll(".+\\{([0-9]+\\.[0-9]+).+", "$1");
String info1=info.replaceAll("(\\d{1,3}).+", "$1");
System.out.println(info1);
//
// Message msg=new Message();
// msg.what=1;
// msg.obj=info1;
// handler.sendMessage(msg);
weightTextview.setText(info1);
priceTextView.setText(info2);
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }.start();
//给toolbar上的三个小圆点菜单设置监听事件
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent mIntent;
switch (item.getItemId())
{
case R.id.payme :
mIntent= new Intent(MainActivity.this,PayActivity.class);
//数据传递
Bundle bundle = new Bundle();
double price=sumPirce;
bundle.putDouble("price",price);
mIntent.putExtras(bundle);
startActivity(mIntent);
break;
case R.id.price_list :
mIntent= new Intent(MainActivity.this,PriceList.class);
startActivity(mIntent);
break;
case R.id.aboutus :
mIntent= new Intent(MainActivity.this,AboutUs.class);
startActivity(mIntent);
break;
}
return true;
}
});
}
class MyTask extends AsyncTask<Void,Void,String>{
@Override
protected String doInBackground(Void... params) {
String info1="";
String info2="";
Log.i("xiedong","doInBackground");
try {
String info=getInfo();
// String info = "12080.92AT+CIPSEND=0,3000081";
String aa[] =info.split("=");
info=aa[0];
Log.i("xie",info+"原始串");
// 13081.82AT+CIPSEND=0,3000081
info=info.replaceAll("([0-9]{5}\\.[0-9]{2}).+","$1");
Log.i("xiedong",info+"删除后");
info1=info.replaceAll("(\\d{2}).+", "$1");
info2=info.replaceAll("\\d\\d([0-9]{3}\\.[0-9]{2}).*", "$1");
Log.i("xiedong",info1+"哈哈"+info2+"正则后");
// 11^�|099.05AT+CIPSEND=0
String info="31;{005.00AT+CIPSEND=0";
// //31; {005.00AT+CIPSEND=0
// info1=info.replaceAll("([0-9]{2}).+\\d{0,1}.\\d+\\.\\d+[A-Z]{2}\\+[A-Z]{1,10}=\\d", "$1");
// info2=info.replaceAll(".+.([0-9]+\\.[0-9]+).+", "$1");
// String info1=info.replaceAll("(\\d{1,3}).+", "$1");
// System.out.println(info1);
// System.out.println(info2);
} catch (Exception e) {
e.printStackTrace();
}
return info1+","+info2;
// return "123,34";
}
@Override
protected void onPreExecute() {
weightTextview.setText("获取重量中...");
priceTextView.setText("");
sumPriceTextView.setText("");
}
@Override
protected void onPostExecute(String s) {
Log.i("xiedongonPostExecute",s+"一开始");
String [] info =s.split(",");
// String [] info ={"123","3454"};
if( info.length > 1 ) {
Log.i("xiedong onPostExecute",info[0]+"呵呵>"+info[1]);
weightTextview.setText("重量\n"+info[1]+"g");
priceTextView.setText(info[0]);
double a=Double.parseDouble(info[0]);
double b=Double.parseDouble(info[1]);
// int b=Integer.parseInt(info[1]);
// String sum=(String)a*b;
sumPriceTextView.setText(a*b+"");
sumPirce+=a*b;
// if("".equals(GlobalVariable.a1))
// {
//
// GlobalVariable.a1=info1;
// GlobalVariable.a2=info2;
//
// Log.i("xiedong",GlobalVariable.a1+" "+GlobalVariable.a2);
// }
// if("".equals(GlobalVariable.b1))
// {
// GlobalVariable.b1=info1;
// GlobalVariable.b2=info2;
// Log.i("xiedong",GlobalVariable.b1+" "+GlobalVariable.b2);
// }
// if("".equals(GlobalVariable.c1))
// {
// GlobalVariable.c1=info1;
// GlobalVariable.c2=info2;
// Log.i("xiedong",GlobalVariable.c1+" "+GlobalVariable.c2);
// }
// if("".equals(GlobalVariable.d1))
// {
// GlobalVariable.d1=info1;
// GlobalVariable.d2=info2;
// Log.i("xiedong",GlobalVariable.d1+" "+GlobalVariable.d2);
// }
}else {
weightTextview.setText("未取到数据");
priceTextView.setText("0");
}
}
}
private void initViw() {
sumPriceTextView= (TextView) findViewById(R.id.sumprice);
weightTextview = (TextView) findViewById(R.id.weight);
priceTextView= (TextView) findViewById(R.id.price);
addTextView = (TextView) findViewById(R.id.addsum);
addTextView.setOnClickListener(this);
weightTextview.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.addsum :
Log.i("xiedong","add sucess");
new SweetAlertDialog(this, SweetAlertDialog.SUCCESS_TYPE)
.setTitleText("添加成功")
.setContentText("当前账单数目为"+sumPirce+"元")
.show();
mediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.voice);
mediaPlayer.start();
break;
case R.id.weight :
Log.i("xiedong","onclick");
MyTask myTask= new MyTask();
myTask.execute();
break;
}
}
/**
* 把单价及类型添加进全部变量
*/
private void addprice() {
}
private String getInfo() throws IOException {
Socket socket = new Socket("192.168.4.1",8080);
// OutputStream out = socket.getOutputStream();
//
//
// out.write("tcp演示:哥们又来了!".getBytes());
// 21?9{004.59AT+CIPSEND=0,31;{005.00AT+CIPSEND=0,
//读取服务端返回的数据,使用socket读取流。
InputStream in = socket.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(text);
//关闭资源。 vb
socket.close();
return text;
}
}
主布局文件
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<span style="color:#ff0000;"><include layout="@layout/toolbar"/></span>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bgcolor"
android:gravity="center">
<TextView
android:id="@+id/weight"
android:layout_width="180dp"
android:layout_height="180dp"
android:gravity="center"
style="@style/textstyle"
android:background="@drawable/shape_textview_green"
android:text="点击获\n取重量"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2"
android:gravity="center"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="70dp"
android:layout_height="70dp"
android:gravity="center"
style="@style/textstyle"
android:background="@drawable/shape_textview"
android:text="单价"
/>
<TextView
android:id="@+id/price"
android:layout_width="70dp"
android:layout_height="70dp"
android:gravity="center"
style="@style/textstyle"
android:background="@drawable/shape_textview_blue"
android:text=""
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="70dp"
android:layout_height="70dp"
android:gravity="center"
style="@style/textstyle"
android:background="@drawable/shape_textview_blue"
android:text="总价"
/>
<TextView
android:id="@+id/sumprice"
android:layout_width="70dp"
android:layout_height="70dp"
android:gravity="center"
style="@style/textstyle"
android:background="@drawable/shape_textview_red"
android:text=""
/>
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/addsum"
android:layout_width="70dp"
android:layout_height="70dp"
android:gravity="center"
style="@style/textstyle"
android:background="@drawable/shape_textview_green"
android:text="添加\n账单"
android:layout_gravity="right"
/>
</LinearLayout>
</LinearLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/toolbarColor"
android:subtitle="456"
android:title="123"
xmlns:android="http://schemas.android.com/apk/res/android">
<!--自定义控件-->
<!--<TextView-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:text="Clock" />-->
</android.support.v7.widget.Toolbar>
引用Toolbar控件时一定要注意引对包,是在v7支持包下的Toolbar