Как центрировать значок в панели действий 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 ответа:
Хорошо. Это должно сработать. Попробуйте это (протестировано в нормальной деятельности):
<?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>