【官网翻译】设置ToolBar

来源:互联网 发布:mac模拟器电脑版 编辑:程序博客网 时间:2024/05/17 07:53

一.设置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中添加代码

@Overrideprotected 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()
- 在Activity中设置Menu

public boolean onCreateOptionsMenu(Menu menu) {    MenuInflater inflater = getMenuInflater();    inflater.inflate(R.menu.example_menu, menu);    return true;}
  • 给Menu设置Action操作
@Overridepublic 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显示控件。
@Overridepublic 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()设置.

@Overridepublic 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](https://developer.android.com/reference/android/support/v4/view/ActionProvider.html)

参考链接

  • http://www.jianshu.com/p/79604c3ddcae
0 0
原创粉丝点击