【官网翻译】设置ToolBar

一.设置ToolBar

  1. 在app下的gradle添加,v7包的支持,参考链接
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    testCompile 'junit:junit:4.12'
    //compile dep
    compile com.android.support:appcompat-v7:24.2.1//V7包
}
  1. 将Activity继承AppCompatActivity.
public class ToolbarActivity extends AppCompatActivity {
  // ...
}

3.在manifest.xml文件中,添加主题

<application
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    />

4.在布局文件中添加.toolbar控件

<android.support.v7.widget.Toolbar
   android:id="@+id/my_toolbar"
   android:layout_width="match_parent"
   android:layout_height="?attr/actionBarSize"
   android:background="?attr/colorPrimary"
   android:elevation="4dp"
   android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
   app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

5.在toobarActivity中添加代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(myToolbar);
    }

二、添加toolbar的Actions

  1. AppBar允许你添加button操作一些动作,资源
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- "Mark Favorite", should appear as action button if possible -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>
  • app: showAsAction 显示在Appbar上的状态.
    ifroom:代表如果有足够的控件就显示在bar上,没有的话,就则点到menu的多项选择按钮中。
    never:表示不显示在appbar上,折叠到menu的多项选择按钮中。

2.Action Buttons的回调事件处理,onOptionsItemSelected()


public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.example_menu, menu);
    return true;
}

  • 给Menu设置Action操作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
	case R.id.action_settings:
		Toast.makeText(this, "setting", Toast.LENGTH_SHORT).show();
		return true;
	case R.id.action_favorite:
		Toast.makeText(this, "favorite", Toast.LENGTH_SHORT).show();
		return true;
	default:
		// 交给父类处理
		return super.onOptionsItemSelected(item);
    }
}

三、添加返回按钮

声明父类Activity
  • 表示次当前Activity的父类Activity是谁,返回的时候为该属性声明的Activity.
<activity 
          android:name=".ToolbarActivity"
          android:parentActivityName=".MainActivity">
        <!-- 用于兼容4.0及其一下的版本 -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity"/>
</activity>

四、给ActionBar添加其他的通用功能

介绍
  • SearchView
  • ShareActionProvider,分享信息到其他app
  • 定义自己的action provider
添加ActionView
SearchView
  • 在Menu.xml中添加一个Item
<item android:id="@+id/action_search"
     android:title="@string/action_search"
     android:icon="@drawable/ic_search"
     app:showAsAction="ifRoom|collapseActionView"
     app:actionViewClass="android.support.v7.widget.SearchView" />

collapseActionView:表示点击的时候,会充满真个ActionBar
actionViewClass: v7的控件,也可以自己编写控件.

  • 在这里onCreateOptionsMenu添加UI显示控件。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_actions, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView =
            (SearchView) MenuItemCompat.getActionView(searchItem);

    // Configure the search info and add any event listeners...

    return super.onCreateOptionsMenu(menu);
}
Re
  • 添加扩展监听
  • 当这个Bar的item元素有一个collapseActionView属性,这个App会首先展示这个定义的icon,当我们点击后会触发.
    onOptionsItemSelected()。如果子类重载了他,你的重载方法必须实现, super.onOptionsItemSelected()才行。
  • 当你Appbar出一扩展或则搜索状态时,你要做一些事情,你可以定义一个MenuItem.onActionExpandLisener,并且通过setOnActionExpandListener()设置.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);
    // ...

    // Define the listener
    OnActionExpandListener expandListener = new OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do something when action item collapses
            return true;  // Return true to collapse action view
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            // Do something when expanded
            return true;  // Return true to expand action view
        }
    };

    // Get the MenuItem for the action item
    MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);

    // Assign the listener to that action item
    MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);

    // Any other things you have to do when creating the options menu…

    return true;
}
添加一个Action Provider

在menu.xml中添加下面的代码,添加一个属性actionProviderClass ,并且添加一个全名.可以允许你的App分享数据到其他App中.

<item android:id="@+id/action_share"
    android:title="@string/share"
    app:showAsAction="ifRoom"
    app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
    

一般,不需要我们定义icon,他有内置的图片。创建自定义Provider查看链接ActionProvider

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值