9

我可以将 ActionBar 中的主页按钮设置在右侧吗?(android.R.id.home)

我想更改主页按钮的位置,因为该语言使用从右到左的打字方式。

可能吗?如果是,请告诉我该怎么做?

如果没有,如何在右侧设置 ActionBarDrawerToggle?

4

5 回答 5

1

您可以创建这样的操作栏,但它比膨胀菜单复杂一点。在 onCreateOptionsMenu() 方法中创建的菜单将始终向右对齐,放置在拆分操作栏中​​或隐藏在菜单键下。

如果您希望您的操作栏只包含两个菜单项 - 一个在左边缘,另一个在右边缘 - 您必须在操作栏中创建自定义视图。

自定义视图布局将是这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
    <ImageButton android:src="@drawable/ic_menu_item1"
                 android:background="?attr/actionBarItemBackground"
                 android:layout_width="?attr/actionBarSize"
                 android:layout_height="match_parent"
                 android:scaleType="centerInside"
                 android:id="@+id/item1"
                 android:layout_alignParentLeft="true"
                 android:layout_alignParentTop="true"/>

    <ImageButton android:src="@drawable/ic_menu_item2"
                 android:background="?attr/actionBarItemBackground"
                 android:layout_width="?attr/actionBarSize"
                 android:layout_height="match_parent"
                 android:scaleType="centerInside"
                 android:id="@+id/item2"
                 android:layout_alignParentRight="true"
                 android:layout_alignParentTop="true"/>
</RelativeLayout>

在您要使用自定义视图的主题中定义。主题应包含:

<style name="MyTheme" parent="@style/Theme.Sherlock">
    <item name="actionBarStyle">@style/MyActionBarStyle</item>
    <item name="android:actionBarStyle">@style/MyActionBarStyle</item>
</style>

<style name="MyActionBarStyle" parent="@style/Widget.Sherlock.ActionBar">
    <item name="displayOptions">showCustom</item>
    <item name="android:displayOptions">showCustom</item>
</style>

在活动(或片段)中设置自定义视图:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActionBar ab = getSherlock().getActionBar();
    LayoutInflater li = LayoutInflater.from(this);
    View customView = li.inflate(R.layout.my_custom_view, null);
    ab.setCustomView(customView);

    ImageButton ibItem1 = (ImageButton) customView.findViewById(R.id.item1);
    ibItem1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // ...
        }
    });

    ImageButton ibItem2 = (ImageButton) customView.findViewById(R.id.item2);
    ibItem2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // ...
        }
    });
}
于 2013-07-24T16:17:18.060 回答
0

Android 最近获得了对从右到左 ActionBar 的支持,但它仅在 API 17 中可用。如果您的清单已android:supportsRtl="true"设置,它将默认执行此操作。

于 2013-07-24T15:58:31.667 回答
0

您必须通过调用actionbar.setDisplayShowCustomeEnable(True)然后膨胀您的自定义视图来使用您的自定义布局,然后actionbar.setCustomeView(view)
这可以帮助您(ActionBar 徽标居中和两侧的操作项

于 2013-07-24T16:03:37.483 回答
0

不完全确定这是否是您要查找的内容,但您可以让主页按钮出现在操作栏上的下拉菜单下(3 个垂直点图标)

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
            android:id="@+id/ic_home"
            android:orderInCategory="1"
            android:showAsAction="never"
            android:title="Home"/>

</menu>

通过将其设置为“ android:showAsAction="never" ”,它将出现在下拉菜单下,但是您可能无法在 Android Studio 模拟器中看到它(至少我从未在模拟器上看到它) Android Studio),不确定 Eclipse。

于 2013-07-24T16:11:22.027 回答
0

“因为语言使用从右到左的打字......”一个直接的答案是制作一个主题并在清单中使用它:

在 style.xml 中,我制作了一个继承 AppTheme 的主题。

<style name="StoreTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:layoutDirection">rtl</item>
</style>

在 manifest.xml 中你可以使用这个主题:

<activity
        android:name=".store.ui.Product.ProductMainActivity"
        android:label="@string/title_activity_product_details"
        android:theme="@style/StoreTheme"/>

或者你可以让你的整个应用程序在 AndroidManifest.xml 应用程序标签中使用这个主题:

<application
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
于 2019-11-07T08:31:03.373 回答