Toolbar自定义样式,别致的布局,可复用

前言

昨天,偶然了解到官方提供在support.v7里面的Toolbar,带着好奇、兴奋的心态开始了一段“撸程”,下面就是填坑的节奏,说好的幸福呢

遇到的那些坑

1、自定义toolbar_layout布局的时候,没有提示layout_gravity属性(因为设置的Title要居中),在类里面也没有这个View id的提示;
2、action bar都是图片View,怎么去动态的改变它的icon呢,从而使这个Toolbar更加可重复利用。(图片模糊请见谅)
Toolbar自定义样式,别致的布局,可复用_第1张图片

效果图:(前后对照)

Toolbar自定义样式,别致的布局,可复用_第2张图片Toolbar自定义样式,别致的布局,可复用_第3张图片

代码

导包
compile 'com.android.support:appcompat-v7:22.1.0'
主题样式:styles.xml


    
自定义布局:toolbar_layout.xml



    

菜单部分,res/menu/toolbar_menu.xml


    

    
界面:activity_main.xml直接,下面是MainActivity.java
package com.example.jekin.toolbar;

import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initToolbar();
    }

    private void initToolbar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.id_toolbar);
        TextView titleText = (TextView) findViewById(R.id.toolbar_title);
        toolbar.setTitle("");
        titleText.setText("佳琪卫浴");
        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case android.R.id.home:
                Toast.makeText(this, "返回", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.action_share:
                Toast.makeText(this, "分享", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.action_commit:
                Toast.makeText(this, "完成", Toast.LENGTH_SHORT).show();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.toolbar_menu, menu);

        MenuItem commitItem = menu.findItem(R.id.action_commit);
        commitItem.setTitle("完成");
        MenuItem shareItem = menu.findItem(R.id.action_share);
        shareItem.setIcon(R.mipmap.show_share_icon);
        return true;
    }
}

总结

第一个问题解决方法就是直接敲,个人也不知道为什么as没有提示。第二呢,可以查看MenuItem类里面有setIcon方法...有问题请多多指教,吃饭去了

补充

发现个问题,就是定义menu的时候,里面有个title的属性,如果长按此控件就会提示title里面的内容,去掉的方法:
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.toolbar_menu, menu);
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                final View v = findViewById(R.id.action_share);

                if (v != null) {
                    v.setOnLongClickListener(new View.OnLongClickListener() {
                        @Override
                        public boolean onLongClick(View v) {
                            return false;
                        }
                    });
                }
            }
        });
        return true;
    }





你可能感兴趣的:(知识集锦)