如何在Android中实现Action Bar?

时间:2017-04-19 06:34:18

标签: android

我正在尝试在我的应用中实施操作栏。我正在使用getSupportedActionBar()并添加一个包含的菜单文件 两个图标和一个文本。我想在左边显示第一个图标,在中间显示标题,在右边显示第二个图标,但我无法做到。

menu.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="yieldcurve.jamakharch.HomeActivity"
   >
    <item
        android:id="@+id/Id_logo_notification"
        android:title="@string/app_name"
        android:icon="@mipmap/ic_menu_notification"
        app:showAsAction="always"
        android:visible="true"
        android:orderInCategory="0"
        />
    <item
        android:id="@+id/title"
        android:title="JMK"
        app:showAsAction="always"
        android:visible="true"
        android:orderInCategory="300"/>

    <item android:id="@+id/Id_logo_menu"
        android:title="Menu"
        android:icon="@mipmap/ic_menu_notification"
        app:showAsAction="always"
        android:visible="true"
        android:orderInCategory="9999"/>
</menu>

4 个答案:

答案 0 :(得分:0)

toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/back_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:theme="@style/AppTheme.Toolbar"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" >

        <TextView
            android:layout_toStartOf="@+id/home_icon"
            android:padding="2dp"
            android:textColor="@color/color_dark_blue"
            android:layout_width="190dp"
            android:layout_height="wrap_content"
            android:layout_gravity="start|center"
            android:id="@+id/toolbar_title"
            android:maxLines="1"/>

        <ImageView
            android:layout_gravity="end|center"
            android:id="@+id/cart_imageview"
            android:src="@drawable/ic_tool_cart"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@null" />

        <ImageView
            android:contentDescription="@null"
            android:layout_gravity="end|center"
            android:id="@+id/search_tool"
            android:src="@drawable/ic_tool_search"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

并包含在您的布局中 比如main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/back_toolbar"
        layout="@layout/back_toolbar" />

    <ListView
        android:id="@+id/cart_ListView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

在课堂上

宣布全球

 private Toolbar mToolbar;

 mToolbar = (Toolbar) findViewById(R.id.back_toolbar);

enter image description here

答案 1 :(得分:0)

Insting of Inflate菜单文件,只需将自定义视图充气到工具栏。

试试以下代码

<android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/toolbar_height"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <RelativeLayout....

            </RelativeLayout>

           </android.support.v7.widget.Toolbar>

在RelativeLayout中添加您的视图。

答案 2 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize"
    android:background="@color/colorAccent"
    app:contentInsetEnd="0dp"
    app:contentInsetStart="0dp"
    tools:context="com.agileinfoways.toolbardemo.MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:src="@mipmap/ic_launcher_round" />

        <android.support.v7.widget.AppCompatTextView
            style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_centerVertical="true"
            android:text="Title"
            android:textColor="#ffffff" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:src="@mipmap/ic_launcher_round" />

    </RelativeLayout>

</android.support.v7.widget.Toolbar>

答案 3 :(得分:0)

MenuInflator类允许扩充XML文件中定义的操作并将其添加到操作栏。您可以通过活动中的getMenuInflator()方法访问MenuInflator。

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.Id_logo_notification:
          Toast.makeText(this, "Id_logo_notification selected", Toast.LENGTH_SHORT)
            .show();
          break;
  case R.id.title:
          Toast.makeText(this, "title selected", Toast.LENGTH_SHORT)
            .show();
          break;
  case R.id.Id_logo_menu:
          Toast.makeText(this, "Id_logo_men selected", Toast.LENGTH_SHORT)
            .show();
          break;
  default:
          break;
  }

  return true;
}