安卓ActionBar进度条位置

3
我有一个带有3个菜单项的ActionBar,其中最后一个是刷新按钮。
刷新按钮设置...
setProgressBarIndeterminateVisibility(true);
setProgressBarVisibility(true);

将它设置为true,这会在ActionBar上显示旋转进度图标。太好了!

但问题是它显示在所有其他图标的前面。我想把它放在所有图标的右边,这样我就可以隐藏刷新按钮,这样当旋转器可见时,它看起来像替换刷新按钮。

我该怎么做?

1个回答

1
您需要创建一个自定义的ActionBar布局,然后将一个进度条(设置为不确定模式)放置在希望展示的位置。接着,根据您是否需要展示旋转器,调用ProgressBar.setVisibility()方法而非setProgressBarVisibility(true)方法。
这是一个我应用程序自定义ActionBar布局的例子:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/app_name"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"/>

<ProgressBar
    android:id="@+id/action_bar_progress_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:indeterminate="true"
    android:layout_toStartOf="@id/search_view"
    android:visibility="gone" />

<SearchView
    android:id="@+id/search_view"
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:title="@string/menu_search"
    android:icon="@drawable/ic_search"
    android:showAsAction="always"
    android:actionViewClass="android.widget.SearchView"
    android:layout_alignParentLeft="false"
    android:queryHint="@string/menu_search_hint"
    android:iconifiedByDefault="false"
    android:layout_alignParentRight="true"/>
</RelativeLayout>

只需微调进度条的位置,直到它位于所需位置。然后,在您的活动的 onCreate() 中设置布局:

ActionBar actionBar = getActionBar();
actionBar.setCustomView(R.layout.activity_start_screen_actionbar);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

如何获取进度条的引用?我已经尝试了findviewbyid,但它不起作用。 - Mafro34
@Mafro34 我在我的一个片段中使用以下代码获取 ProgressBar 的引用:ProgressBar progressSpinner = (ProgressBar) getActivity().findViewById(R.id.action_bar_progress_spinner);。如果你是从 Activity 中查找它,我想你可以省略 getActivity() - IAmKale
那对我没用,可能是因为我正在使用兼容库。我不得不将ActionBar布局填充到ViewGroup中才能访问成员。 - Mafro34

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