在Toolbar的使用简介

Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与Actionbar 相比, Toolbar 明显要灵活的多。它不像 Actionbar 一样,一定要固定在Activity的顶部,而是可以放到界面的任意位置。除此之外,在设计 Toolbar 的时候,Google也留给了开发者很多可定制修改的余地,这些可定制修改的属性在API文档中都有详细介绍,如:

  • 设置导航栏图标;
  • 设置App的logo;
  • 支持设置标题和子标题;
  • 支持添加一个或多个的自定义控件;
  • 支持Action Menu;
前面提到 Toolbar 是在 Android 5.0 才开始加上的,Google 为了将这一设计向下兼容,自然也少不了要推出兼容版的 Toolbar 。为此,我们需要在工程中引入 appcompat-v7 的兼容包,使用android.support.v7.widget.Toolbar 进行开发
  1. 我们在使用 Toolbar 时候需要先隐藏掉系统原先的导航栏,网上很多人都说给Activity设置一个NoActionBar的Theme。但个人觉得有点小题大做了,所以这里我直接在BaseActivity中调用 supportRequestWindowFeature(Window.FEATURE_NO_TITLE) 去掉了默认的导航栏(注意,我的BaseActivity是继承了AppCompatActivity的,如果是继承Activity就应该调用 requestWindowFeature(Window.FEATURE_NO_TITLE) );

  2. 如果你想修改标题和子标题的字体大小、颜色等,可以调用 setTitleTextColor 、setTitleTextAppearance 、 setSubtitleTextColor 、 setSubtitleTextAppearance这些API;

  3. 自定义的View位于 title 、 subtitle 和 actionmenu 之间,这意味着,如果 title 和subtitle 都在,且 actionmenu选项 太多的时候,留给自定义View的空间就越小;

  4. 导航图标和 app logo 的区别在哪?如果你只设置 导航图标 ( or app logo ) 和 title 、subtitle ,会发现 app logo 和 title 、 subtitle 的间距比较小,看起来不如 导航图标 与 它们两搭配美观;

  5. 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>


为了便于对toolbar的复用,采用include的方法添加进主布局

<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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值