Как центрировать значок в панели действий Android


Я пытаюсь центрировать значок в панели действий android. Я использую пользовательский макет, который имеет кнопку на левой стороне, значок в центре и параметры меню справа.

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



        <ImageButton
            android:id="@+id/slideMenuButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_menu_bookmark" />

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/RelativeLayout1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_centerInParent="true"  >
            <ImageView
                android:id="@+id/icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher"
                android:layout_centerInParent="true" />
        </RelativeLayout>



</RelativeLayout>

Я пробовал это с и без RelativeLayout упаковки ImageView. Левая кнопка отображается нормально, и я могу установить значок с layout_toRightOf, но я не могу получить его в центр. У кого-нибудь есть идеи?

Править: Вот код android в методе on create.

ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayUseLogoEnabled(false);
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayOptions(actionBar.DISPLAY_SHOW_CUSTOM);
    View cView = getLayoutInflater().inflate(R.layout.actionbar, null);
    actionBar.setCustomView(cView);
3 11

3 ответа:

Хорошо. Это должно сработать. Попробуйте это (протестировано в нормальной деятельности):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ActionBarWrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal">

    <ImageButton
        android:id="@+id/slideMenuButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:layout_alignParentLeft="true" />

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:layout_centerVertical="true"
        android:layout_centerInParent="true"  />    

</RelativeLayout>

Предыдущие ответы не работают для меня (на устройствах Android 4.4), потому что внешние группы представления контейнера не расширялись полностью, поэтому группа контейнера и центрированный внутренний логотип уже были выровнены по левому краю в строке заголовка.

Я нашел макет, который работает с меню панели регулярных действий (с правой стороны) и независимо от включения логотипа и заголовка панели регулярных действий (с левой стороны). Этот пример только центрирует дополнительный логотип.

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

    <View android:layout_width="0dp"
          android:layout_height="match_parent"
          android:layout_weight="1"
    />

    <ImageView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:src="@drawable/my_logo"
               android:layout_gravity="center_vertical"
               android:contentDescription="Logo"
        />

    <View android:layout_width="0dp"
          android:layout_height="match_parent"
          android:layout_weight="1"
      />

</LinearLayout>

Вы должны включить пользовательское представление к этому

ActionBar actionBar = getActionBar();
actionBar.setDisplayShowCustomEnabled(true);
View cView = getLayoutInflater().inflate(R.layout.actionbar, null);
actionBar.setCustomView(cView);

Но не этот метод (он отключает все остальные элементы в панели действий).

// actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

В панель действий можно добавить пользовательское представление. Просто добавьте LinearLayout в качестве пользовательского представления и добавьте дополнительные представления в linearlayout. Я использовал эту технику, чтобы добавить 4 кнопки прямо посередине.

Для добавления пользовательского представления используйте панель действий.setCustomView (вид). Также установите опцию DISPLAY_SHOW_CUSTOM с помощью actionBar.setDisplayOptions.

После того, как у вас есть пользовательский вид в панели, используйте обычные процедуры компоновки, чтобы получить нужный эффект. Один трюк, который вы могли бы использовать будет иметь 3 вложенных линейные макеты и назначить каждому вес. Например, 1,4,1 таким образом, центральная компоновка получает наибольшее пространство. Вот пример, конечно, вы можете оставить кнопки на правой стороне макета, если вы хотите, чтобы он был пустым. С помощью этого подхода вы можете достичь точного центра.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="#F00"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:background="#0F0"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="#00F"
        android:gravity="right"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

    </LinearLayout>
</LinearLayout>