Полноразмерный счетчик в ActionBar
Мне бы очень понравилось, что мое приложение имеет Spinner, который растягивает всю длину моего ActionBar, как и в Gmail 4.0. Кто-нибудь знает, как это достичь? Даже если я установил "match_parent" в ресурсе компоновки Spinner, он не заполнил весь бар. Предпочтительно, я хотел бы иметь возможность заполнить всю панель, за исключением моих элементов действия, а не использовать панель действий split.
EDIT: см. мой ответ ниже для реализации, используя встроенную панель действий или hankystyles 'при использовании пользовательского представления
![enter image description here]()
Ответы
Ответ 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>