2012-01-20 2 views
29

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

EDIT: см мой ответ ниже для реализации с использованием встроенных ActionBar или hankystyles' при использовании настраиваемого представления

enter image description here

+0

Как насчет paddings - есть ли ресурс изображения для самой кнопки, включая немного дополнений? – Scalarr

+0

У вас есть несколько учетных записей? Моя также охватывает все пути вправо, как и вы, но я думаю, что это связано с тем, что у меня есть несколько учетных записей. Содержание «падающего» (или того, что оно называется) тогда отличается - и шире. – hnilsen

+1

да, у меня есть 2 аккаунта. Как ни странно, это зависит от того, сколько у вас аккаунтов! –

ответ

28

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

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

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

Spanned actionbar

+1

Можете ли вы рассказать о том, что вы имеете в виду, установив «основной контейнер» элемента прядильной машины? Какой шанс вы могли бы привести пример того, как вы добавили вышеуказанный макет? – brk3

+0

Я имею в виду охватывающий макет вашего элемента прядильщика. Код xml выше генерирует полноразмерный счетчик, как показано. –

+0

Итак, вам нужен пользовательский адаптер для этого? – brk3

19

Вертушка на моем приложение 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> 

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

+0

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

0

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

0

Если у вас есть TextVie w внутри вашего 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>