在活动工具栏中将应用程序图标设置到右侧

7
我正在使用'AppCompact'库,并遇到了一些布局/定位问题。我想把应用程序图标放在“ActionBar”的右侧。一种方法是在工具栏中定义一个按钮,但是否有一种标准方法来设置应用程序图标和向上按钮在ActionBar的右侧?
如您在上面的图像中所看到的那样,图标位于左侧,我希望它在右侧。任何帮助都将不胜感激。
附:对于可能遇到我的问题的人,可以使用以下代码轻松解决此问题 将此代码添加到清单中:
<application android:supportsRtl="true">

然后在Oncreate中编写以下代码:

getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

@ShabbirDhangot 看来最简单的方法是在工具栏中定义一个自定义项目?有没有办法隐藏应用程序图标?或将其工具栏布局从右到左设置? - Majid Hojati
我建议您使用布局创建标题并调整视图,隐藏当前的操作栏。此外,如果您不想这样做,可以使用样式隐藏操作栏标志。在这里描述了如何操作:https://dev59.com/wmUq5IYBdhLWcg3wTuui - Shabbir Dhangot
很棒,它对我有效。 - Hamid Jolany
3个回答

18
Android没有提供一种设置应用程序图标在操作栏右侧的方法,但你仍然可以这样做。创建一个菜单,比如main_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">

    <item android:id="@+id/menu_item"
        android:icon="@drawable/your_app_icon"
        android:title="@string/menu_item"
        app:showAsAction="always"/>  //set showAsAction always
                                    //and this should be the only menu item with show as action always

</menu>

现在只需在您的活动类中覆盖onCreateOptionsMenu

将此添加到MainActivity.java中。

@Override
public boolean onCreateOptionsMenu(Menu menu){

    getMenuInflater().inflate(R.menu.main_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

完成了!你的应用程序图标现在将在操作栏右侧可见。

如果您的菜单中有多个项目,则在活动类中覆盖 onPrepareOptionsMenu 并设置setEnabled(false),以防止应用程序图标可被点击。

@Override
public boolean onPrepareOptionsMenu(Menu menu){
    menu.findItem(R.id.menu_item).setEnabled(false);

    return super.onPrepareOptionsMenu(menu);
}

现在你的MainActivity.java文件看起来会像这样:

@Override
public boolean onCreateOptionsMenu(Menu menu){

    getMenuInflater().inflate(R.menu.main_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item){

    switch(item.getItemId()){
        case R.id.menu_item:   //this item has your app icon
            return true;

        case R.id.menu_item2:  //other menu items if you have any
            //add any action here
            return true;

        case ... //do for all other menu items

        default: return super.onOptionsItemSelected(item);
    }
}

@Override
public boolean onPrepareOptionsMenu(Menu menu){
    menu.findItem(R.id.menu_item).setEnabled(false);

    return super.onPrepareOptionsMenu(menu);
}

这是您可以使用的唯一技巧,以在右侧设置应用图标。


谢谢您的帮助。我已经找到了另一种方法并更新了我的问题。您认为我使用的方法是错误的吗?谢谢。 - Majid Hojati
属性supportsRtl是在API级别17中添加的,因此对于API < 17不起作用。仅在minSdkVersion为17时使用。来源:http://developer.android.com/guide/topics/manifest/application-element.html#supportsrtl - Apurva

1

除了将布局设置为RTL或自己实现之外,没有其他方法。即使您子类化 Toolbar 并尝试更改 onLayout,您也需要重新计算所有视图的位置。


0

我刚刚在声明imagebutton的xml中添加了android:layout_marginStart="300dp"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接