ActionBar中的全角微调器

时间:2012-01-20 11:58:45

标签: android android-layout android-actionbar

我真的很喜欢我的应用程序有一个Spinner,它延伸了我的ActionBar的整个长度,就像Gmail 4.0中的那个。谁知道如何实现这一目标?即使我在Spinner布局资源中设置“match_parent”,它也不会填满整个栏。我希望能够让它填满整个栏,除了我的动作项目,而不是使用分割动作栏。

编辑:请参阅下面的答案,了解使用内置操作栏的实现,或使用自定义视图时的hankystyles

enter image description here

4 个答案:

答案 0 :(得分:28)

有点烦人,我刚刚完成它,但这是一种使用操作栏中的内置Spinner进行操作的方法。您需要做的就是将您的微调器项目的主要容器设为RelativeLayout并将其重力设置为fillHorizo​​ntal,如下所示:

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

答案 1 :(得分:20)

我的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可以获得更好的解决方案,但我无法立即实现这一点。

答案 2 :(得分:0)

尝试将微调器的背景设置为图像文件。默认背景导致了我的布局问题,但是当我将它设置为我自己的空白1x1像素的png时,它填充了我想要的布局。如果可行,您可能需要创建适合您的自定义图像。我希望有所帮助。

答案 3 :(得分:0)

如果Spinner中有TextView,则可以将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>