web-dev-qa-db-ja.com

ActionBarの背後にあるSwipeRefreshLayout

SwipeRefreshLayoutをオーバーレイモードのActionBarと組み合わせて使用​​すると、読み込みアニメーションがアクションバーの背後に表示され、ほとんど見えなくなります。

アクションバーの上に表示するためにできることはありますか?

34
Frank

Appcompat-v7ライブラリのマテリアルデザインバージョン(v21.0.0)では、SwipeRefreshLayoutはProgress Viewオフセットを設定するメソッドを取得します。

https://developer.Android.com/reference/Android/support/v4/widget/SwipeRefreshLayout.html#setProgressViewOffset(boolean、%20int、%20int)

public voidsetProgressViewOffset(ブールスケール、int start、int end)

更新インジケータの開始位置と静止位置は、常に更新コンテンツの上部近くに配置されます。この位置は一貫した場所ですが、ツールバーまたはアクションバーが存在するかどうかに基づいて、どちらの方向にも調整できます。

パラメータ

scaleプログレススピナーが表示されるように設定されている場所よりも高いzオーダーのビューがない場合、trueに設定します。

start進捗スピナーが表示されるこのビューの上部からのピクセル単位のオフセット。

endスワイプジェスチャが成功した後にプログレススピナーが停止する、このビューの上部からのピクセル単位のオフセット。

59
TalkLittle

このコードを試してください:

int top_to_padding=100;
swipe_refresh_layout.setProgressViewOffset(false, 0,top_to_padding);

私はあなたのために働くことを願っています。

15
Vijay Rajput

vijay Rajputの答えは私にとってはうまくいきますが、問題はキットカットまたは高さにのみあったので、私は以下を含めました:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) { swipeLayout.setProgressViewOffset(false, 0,100); }

4
pablofcn

SwipeRefreshLayoutでpaddingTopを設定する代わりに、layout_marginTopを設定すると、進行状況バーが表示されます。

<Android.support.v4.widget.SwipeRefreshLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginTop="?android:attr/actionBarSize">
2
kasgoku

現在、依存関係をappcompat 19.1.0から21.0.0にアップグレードし、コードを変更しなかったときにこの問題に遭遇しました。

これは実際、appcompat 21.0.0のSwipeRefreshLayoutの既知の問題です。

回避策はこちらをご覧ください: https://code.google.com/p/Android/issues/detail?id=77712

1
Damien O'Reilly

[〜#〜] edit [〜#〜]

これは、appcompat-v7ライブラリのv21より前の最適なソリューションでした。 v21以降を使用している場合は、承認済みの回答を確認してください。 appcompat-v7 <21 APIを使用している場合、これはまだ役立ちます。


これを簡単に修正するには、SwipeRefreshLayout(およびその依存関係)をプロジェクトにコピーし、進行状況バーの表示場所を変更して、上部マージンを追加します。

誰でも簡単に使えるように、マージンを実装したライブラリをリリースしました。これを見てください: https://github.com/Naroh091/SwipeRefreshLayoutOverlay

それが役に立てば幸い!

1
Naroh