プログレスバーをアクションバーに入れたいのですが、
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarIndeterminateVisibility(true);
on onCreate
メソッドは、中規模のProgressBar(48dip x 48dip)を生成すると思います。 ProgressBarのサイズを変更したいのですが、方法がわかりません。手伝ってくれませんか?
ActionBarに適用するには、独自のスタイルを作成する必要があります。 Android Developers Blogにこれに関する素晴らしいチュートリアルがあります。 中間の進行状況バーのスタイルを設定するには、indeterminateProgressStyle
と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>
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
私は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>
私が遭遇した1つのcatchya、「AppTheme」のテーマ名は使用できません。そうしないと、オーバーライドが機能しません。 「MyTheme」を使用しました。このテーマはHoloを使用しているため、以下の画像に示すように、黒いActionBarを持っています。白色のアクションバーが必要な場合は、もちろんAndroid:Theme.Holo
をAndroid:Theme.Holo.Light
などに置き換えてください。
)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のサイズを縮小するだけなので、画像をエクスポートして描画可能な場所に移動する必要はありません。
これは私のものです。アイコンのサイズは私にぴったりです。
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>
サイズを好きなように設定します。
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>
_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);
}
});
_
古いバージョンのAndroid SDKと互換性がある必要があるため、シンプルにして使用する必要がありました。
Styles.xml
<style name="TallerTitleBarDialogThemeStyle" parent="@Android:style/Theme.Dialog">
<item name="Android:windowTitleSize">36dp</item>
</style>
AndroidManifest.xml
Android:theme="@style/TallerTitleBarDialogThemeStyle"
私が調整する必要がある活動のために。