【问题标题】:Put two buttons on left side of ActionBar in Android在Android中将两个按钮放在ActionBar的左侧
【发布时间】:2020-09-29 16:33:01
【问题描述】:

我正在尝试构建一个左侧有两个图标的 ActionBar,其余的在右侧。这两个项目将是一个徽标,当单击它会将用户重定向到主页,以及一个后退按钮,当单击它会将用户重定向到“Page Up”。 logo应该出现在最左边,后面应该出现默认的后退箭头。

目前,我已经实现了“Page Up”功能(带有默认的后退箭头),并且该项目出现在左侧,但我也未能成功将徽标放在那里。

这是我到目前为止所拥有的(代码被简化以专注于问题的重要内容):

layout_action_bar.xml:

<!-- Custom layout for the action bar, so that we are able to center the text in it -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="@dimen/action_bar_text_padding_right"
        android:id="@+id/txt_action_bar_title"
        android:singleLine="true"
        android:ellipsize="end"
        style="@style/Widget.ActionBar.Text"/>

</LinearLayout>

menu_base.xml(不需要,只是为了说明我在 ActionBar 右侧的内容):

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      tools:context=".BaseActivity">

     <item
        android:id="@+id/action_menu"
        android:icon="@drawable/ic_menu"
        android:orderInCategory="1"
        android:title="@string/menu_drawer_open_accessibility"
        app:showAsAction="always"/>

     <item android:id="@+id/search"
          android:title="@string/actionbar_search_button_tooltip"
          android:icon="@drawable/ic_navigation_search"
          app:showAsAction="always|collapseActionView"
          app:actionViewClass="androidx.appcompat.widget.SearchView"
        />

</menu>

menu_base 在 CreateOptionsMenu() 上膨胀,并且在 ActionBar 的那一侧一切正常。

BaseActivityMenu.java:

protected final void createMenu(CharSequence actionBarText) {
        
     ActionBar actionBar = getSupportActionBar();
     if(actionBar != null) {
          actionBar.setCustomView(R.layout.layout_action_bar);
          TextView title = actionBar.getCustomView().findViewById(R.id.txt_action_bar_title);
          title.setText(actionBarText);

          actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
          actionBar.setDisplayHomeAsUpEnabled(true);
          actionBar.setHomeButtonEnabled(false);
     }
}

从视觉上看,这就是我目前所拥有的:My ActionBar

我怎样才能做到这一点?

【问题讨论】:

    标签: android android-actionbar android-toolbar


    【解决方案1】:

    在您的 layout_action_bar.xml 中,在 LinearLayout 中添加以下代码:

    <ImageButton
        android:id="@+id/homeBtn"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@android:color/transparent"
        android:src="@drawable/ic_home"/>
    
    <ImageButton
        android:id="@+id/topBtn"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@android:color/transparent"
        android:src="@drawable/ic_back_up"/>
    

    然后在您的活动中,添加以下代码行:

    ImageButton toHome = actionBar.findViewById(R.id.homeBtn);
    ImageButton toTop = actionBar.findViewById(R.id.topBtn);
    toHome.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //do what you want here
        }
    });
    toTop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //do what you want here
        }
    });
    

    【讨论】:

    • 这似乎行得通,谢谢!但是,现在当我单击搜索菜单项并展开时,徽标会随着操作栏标题消失,我想保留徽标。你知道如何实现吗?
    • 添加:我正在使用 AppCompat 的 SearchView
    • @Uppa 如果您使用 AppCompat 中的 SearchView 作为菜单项,那么我认为您不能。在我拥有的LinearLayout 代码中,添加另一个具有iconified="true" 属性的搜索视图并将其放在菜单栏的右侧,我认为应该可以。如果你愿意,我会编辑我的答案以上传相同的更改
    • 工作就像一个魅力!现在徽标始终可见,当搜索视图展开或折叠时,我可以隐藏/取消隐藏标题栏 :) 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多