ActionBar中的全屏进度条

29

我希望我的应用程序有一个Spinner,可以将其完全延伸到我的ActionBar的整个长度,就像Gmail 4.0中的那样。有人知道如何实现吗? 即使在Spinner布局资源中设置“match_parent”,它也不会填充整个栏。最好能够使其填充整个栏,除了我的操作项之外,而不是使用分割ActionBar。

编辑:对于使用内置ActionBar的实现,请参见我的答案或使用hankystyles的自定义视图。

输入图像描述


那么填充怎么样 - 按钮本身的图像资源是否包含一些填充? - Scalarr
你有设置多个账户吗?我的也像你的一样延伸到最右边,但我觉得这主要是因为我设置了几个账户。然后,“下拉菜单”(或者叫它什么)的内容就不同 - 而且更宽。 - hnilsen
1
是的,我有2个账户设置。这样根据你有多少个账户而不同感觉有点奇怪! - Alex Curran
4个回答

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

接下来会得到一个能够覆盖整个操作栏(除了操作按钮)的所需旋转器:

覆盖操作栏的旋转器


1
你能详细解释一下你所说的设置“主容器”来设置Spinner项是什么意思吗?您是否能够举例说明如何添加上述布局? - brk3
我的意思是您的下拉列表项的包含布局。上面的XML代码生成了如图所示的全宽度下拉列表。 - Alex Curran
不是的!我只是使用了一个 ArrayAdapter,然后将上面显示的 xml 资源传递给 setDropDownResource(..) 方法。 - Alex Curran
好的 :) 我想我快做完了.. 这是我正在使用的代码:ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(this, R.array.locations, R.layout.actionbar_main);R.layout.actionbar_main 包含以上的 xml。 问题在于我需要某种方式来提取出 TextView 的 ID 以传递给适配器。你需要膨胀它吗?感谢您的帮助.. - brk3
1
我认为在手机上设计时只能看到旋转器或标题中的一个,而不是两者都有。值得考虑的是,让旋转器始终显示标题,就像上面的示例中第二个文本视图仅显示“公式”-没有其他内容。 - Alex Curran
显示剩余11条评论

20

我的 Gmail 应用程序中的旋转图标也跨越整个操作栏的宽度。以下解决方案适用于我:

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

这里的 spinner 布局是这样的:

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

我怀疑可以通过覆盖默认的操作栏导航样式像这样来找到更好的解决方案,但我无法立即使其工作。


非常好,谢谢。我更喜欢使用标准的导航控件来实现(即不使用自定义视图),但如果没有人在最后提供这样的实现,我将授予赏金。 - Alex Curran

0

尝试将旋转器的背景设置为图像文件。默认背景会导致我的布局问题,但当我将其设置为自己的1x1像素空白png时,它按照我想要的方式填充了我的布局。如果这样可以解决问题,您可能需要创建适合自己的自定义图像。希望这有所帮助。


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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接