Подтвердить что ты не робот

Полноразмерный счетчик в ActionBar

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

EDIT: см. мой ответ ниже для реализации, используя встроенную панель действий или hankystyles 'при использовании пользовательского представления

enter image description here

4b9b3361

Ответ 1

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

<?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

Ответ 2

Скручиватель в моем приложении 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>

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

Ответ 3

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

Ответ 4

Если у вас есть 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>