18

我想在操作栏上放一个进度条,但设置

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);  
setProgressBarIndeterminateVisibility(true);

我猜ononCreate方法会产生一个中等大小的进度条(48dip x 48dip)。我想更改progressBar 的大小,但找不到怎么做。你能帮我吗?

4

7 回答 7

28

您需要创建自己的样式以应用于 ActionBar。Android 开发者博客上有一个很棒的教程。要设置中间进度条的样式,请尝试使用indeterminateProgressStyleand Widget.ProgressBar.Small。这是一个简单的例子。

<style name="YourTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/ActionBarIPS</item>
</style>

<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar">
    <item name="android:indeterminateDrawable">@drawable/ic_launcher</item>
</style>

<style name="ActionBarIPS" parent="@android:style/Widget.ActionBar">
    <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item>
    <item name="android:background">@color/white</item>
</style>
于 2012-02-06T15:41:54.730 回答
15

ActionBar 上样式化的动画不确定进度条图标:

1.定义 res/values/styles.xml (这个例子使用 Sherlock 库在旧的 Android 版本中提供操作栏,所以,如果你不使用 Sherlock,你应该使用适当的父母来定义你的自定义样式):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="Theme.Sherlock">
        <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
        <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    </style>

    <style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar">
        <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item> 
        <item name="indeterminateProgressStyle">@style/IndeterminateProgress</item> 
    </style>

    <style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small"> 
       <item name="android:indeterminateDrawable">@drawable/progress_indeterminate_custom</item> 
    </style> 
</resource>

2.定义res/drawable/progress_indeterminate_custom.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <rotate
        android:drawable="@drawable/ic_progress_logo1"
        android:fillAfter="true"
        android:fromDegrees="-180"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="180" />
    </item>
     <item>
    <rotate
        android:drawable="@drawable/ic_progress_logo2"
        android:fillAfter="true"
        android:fromDegrees="180"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="-180" />
</item>
</layer-list>

3.以上代码使用 2 个图像(ic_progress_logo1 和 ic_progress_logo2)作为自定义进度不确定图标。您可以通过添加新的项目元素来使用尽可能多的图像/可绘制对象。此外,您可以应用不同的效果/动画。更多信息在这里:动画资源

4.应用您使用 AndroidManifest.xml 创建的样式:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" 
    android:name=".application.MyApplication">
    <activity
        android:name=".activities.MyActivity"
        android:label="@string/app_name"
        android:theme="@style/MyTheme" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

5.享受您的动画自定义进度不确定图标:D

于 2012-11-14T18:40:45.143 回答
8

我为所有这些解决方案苦苦挣扎,因为我没有使用actionbarsherlock. 我利用了 Vlasto Benny Lava 的答案,最初对我不起作用。

这是我一步一步做的:

1)打开你的 styles.xml 文件,它应该在/res/values/styles.xml. 如果它不存在,请创建它。

2) 粘贴:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="myTheme" parent="android:Theme.Holo">
        <item name="android:actionBarStyle">@style/ActionBar.MyStyle</item>
    </style>

    <style name="ActionBar.MyStyle" parent="@android:style/Widget.Holo.ActionBar">
        <item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item>
    </style>

    <style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Small">
        <item name="android:minWidth">28dp</item>
        <item name="android:maxWidth">28dp</item>
        <item name="android:minHeight">28dp</item>
        <item name="android:maxHeight">28dp</item>
    </style> 
</resources>

我遇到的一个问题,您不能使用“AppTheme”的主题名称,否则覆盖将不起作用。我使用了“我的主题”。这个主题使用 Holo,所以它有一个黑色的 ActionBar,如下图所示。如果您希望有一个白色的操作栏,那么当然替换android:Theme.Holoandroid:Theme.Holo.Lightetc。

3)编辑AndroidManifest.xml

<application>必须包含android:theme="@style/myTheme",以便应用程序使用您的覆盖样式styles.xml

即,我的清单应用程序标记文件看起来像这样:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/myTheme"
    android:name="Application Name Here" >

因为您只是缩小了现有进度 png 的大小,所以无需导出任何图像并将它们移动到您的可绘制位置等。

这是我的样子,图标的大小对我来说是完美的。

在此处输入图像描述

于 2014-03-11T01:11:58.773 回答
2

要使 ActionBar 上的 ProgressBar 更小,您要做的就是Widget.Holo.ProgressBar.Small像这样覆盖

<style name="Theme.MyStyle" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="actionBarStyle">@style/ActionBar.MyStyle</item>
    ...
</style>

<style name="ActionBar.MyStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
    ...
    <item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item>
    ...
</style>

<style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Small">
    <item name="android:minWidth">28dp</item>
    <item name="android:maxWidth">28dp</item>
    <item name="android:minHeight">28dp</item>
    <item name="android:maxHeight">28dp</item>
</style>

并将大小设置为您想要的任何大小。

于 2014-01-23T02:03:41.430 回答
2

对于 ActionBarSherlock,您可以通过设置 Widget.ProgressBar.Small 来更改不确定的进度,这在没有 Sherlock 的情况下也可以工作。

我从 SDK 中的 android-15 res 文件夹中获取了可绘制对象,请务必获取 progress_small_white.xml 和相关资源。

 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <style name="Dark" parent="Theme.Sherlock">
         <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
         <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
     </style>

     <style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar">
         <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item> 
         <item name="indeterminateProgressStyle">@style/IndeterminateProgress</item> 
     </style>

      <style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small"> 
        <item name="android:indeterminateDrawable">@drawable/progress_small_holo</item> 
    </style> 
 </resource>
于 2012-03-31T00:23:12.317 回答
1

将以下代码粘贴到您的on Create方法中,并在中间模式下运行此栏。
如果您想显示进度百分比,请评论 progressBar.setIndeterminate(true);方法和取消评论方法progressBar.setProgress(65)并保持您的进度

       progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
       progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 24));
     //progressBar.setProgress(65);
     //progressBar.setBackgroundDrawable(getResources().getDrawable(R.color.lock_background_greeen));
      progressBar.setIndeterminate(true);

    // retrieve the top view of our application
      final FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
      decorView.addView(progressBar);


      ViewTreeObserver observer = progressBar.getViewTreeObserver();
      observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            View contentView = decorView.findViewById(android.R.id.content);
            progressBar.setY(contentView.getY() - 10);

            ViewTreeObserver observer = progressBar.getViewTreeObserver();
            observer.removeGlobalOnLayoutListener(this);
        }
    });
于 2014-07-25T11:19:44.340 回答
0

我必须与旧版本的 Android SDK 兼容,所以我必须保持简单和使用:

样式.xml

 <style name="TallerTitleBarDialogThemeStyle" parent="@android:style/Theme.Dialog">
    <item name="android:windowTitleSize">36dp</item>
</style>

AndroidManifest.xml

android:theme="@style/TallerTitleBarDialogThemeStyle"

对于我需要调整的活动。

于 2015-12-29T18:22:58.137 回答