Полноширинный спиннер в ActionBar - PullRequest
29 голосов
/ 20 января 2012

Мне бы очень хотелось, чтобы в моем приложении был Spinner, растягивающий всю длину моего ActionBar, как в Gmail 4.0.Кто-нибудь знает, как этого добиться?Даже если я установлю «match_parent» в ресурсе макета Spinner, он не заполняет всю панель.Предпочтительно, я бы хотел, чтобы он занимал весь бар за исключением моих элементов действий, а не использовал разделенную панель действий.

РЕДАКТИРОВАТЬ : см. Мой ответ ниже дляреализация, использующая встроенную панель действий или hankystyles 'при использовании настраиваемого представления

enter image description here

Ответы [ 4 ]

28 голосов
/ 08 февраля 2012

Немного раздражает, что я только что сделал это, но вот способ сделать это, используя встроенный Spinner в панели действий. Все, что вам нужно сделать, это сделать основной контейнер вашего блесны элементом RelativeLayout и установить его гравитацию для fillHor Horizontal, например:

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

<TextView
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginBottom="-4dip"
    android:text="@string/gen_placeholder"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/TextView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@android:id/text1"
    android:text="@string/app_name"
    android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

И инициализация Адаптера следующим образом:

ArrayAdapter<CharSequence> barAdapter = new ArrayAdapter<CharSequence>(this, R.layout.subtitled_spinner_item, 
    android.R.id.text1, getResources().getStringArray(R.array.actionList));
barAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

, который затем дает требуемый счетчик, охватывающий всю панель действий (кроме кнопок действий):

Spanned actionbar

20 голосов
/ 02 февраля 2012

Спиннер в моем приложении Gmail также охватывает всю ширину моей панели действий. Это решение работало для меня:

View spinner = getLayoutInflater().inflate(R.layout.actionbar_spinner, null);
actionBar.setCustomView(spinner);
actionBar.setDisplayShowCustomEnabled(true);

Где раскладка блесны выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="fill_horizontal" >
    <Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/spinner_text"
    />
</RelativeLayout>

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

0 голосов
/ 17 октября 2012

Если у вас есть TextView внутри Spinner, вы можете установить minEms на высокое значение.Это самый простой обходной путь, который я исследовал:

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

    <TextView
        android:id="@+id/spinner_active"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:text="blaa"
        android:minEms="100"
        android:textSize="20sp" />

</LinearLayout>
0 голосов
/ 04 февраля 2012

Попробуйте установить фон вращателя в файл изображения. Заданный по умолчанию фон вызвал у меня проблемы с макетом, но когда я установил свой собственный png с пустым пикселем 1x1, он заполнил мой макет, как я хотел. Если это работает, вам, возможно, придется создать собственное изображение, которое работает для вас. Я надеюсь, что это помогает.

...