9

AsyncTask 内のページネーションのためにサーバーからデータを取得しているときに、snackBar に進行状況ダイアログを表示する方法はありますか。

4

5 に答える 5

8

最も簡単で最良のアプローチは次のとおりです。

Snackbar bar = Snackbar.make(layout, "Somthing", Snackbar.LENGTH_INDEFINITE);
Snackbar.SnackbarLayout snack_view = bar.getView();
snack_view.addView(new ProgressBar(context));
bar.show();

SnackbarLayout extendsLinearLayout であるため、ビューを子として追加したり、必要に応じてカスタマイズしたりできます。

たとえば、SnackBar 内の TextView のスタイルを変更するには、次のようにします。

TextView tv = (TextView) bar.getView().findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
tv.setTextSize(0, dimen[1] / 40);
tv.setTypeface(Typeface.createFromAsset(context.getAssets(),"fonts/font.otf"));
于 2016-03-31T19:33:35.603 に答える
1

スナックバーは読み込み中の GUI とのユーザーの対話を妨げないため、カスタムの進行状況ダイアログをスナックバーのようにスタイルできると思います。

アップデート:

これを試して:

アニメーション res ファイルを作成し、slide_in.xml という名前を付けて、これを貼り付けます。

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="50%p" android:toYDelta="0%p"
android:duration="@android:integer/config_longAnimTime"
/>

slide_out.xml という名前の別のアニメーション res ファイルを作成します。

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0%p"
android:toYDelta="100%p" />

プロセス ダイアログ スタイルをスタイル res に配置します。

<style name="CustomDialog" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:windowMinWidthMajor">100%</item>
    <item name="android:windowMinWidthMinor">100%</item>
    <item name="android:background">#323232</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:alertDialogStyle">@style/customDialogStyle</item>
    <item name="android:windowAnimationStyle">@style/DialogAnimation</item>

</style>

<style name="customDialogStyle">
    <item name="android:bottomBright">@android:color/transparent</item>
    <item name="android:bottomDark">@android:color/transparent</item>
    <item name="android:bottomMedium">@android:color/transparent</item>
    <item name="android:centerBright">@android:color/transparent</item>
    <item name="android:centerDark">@android:color/transparent</item>
    <item name="android:centerMedium">@android:color/transparent</item>
    <item name="android:fullBright">@android:color/transparent</item>
    <item name="android:fullDark">@android:color/transparent</item>
    <item name="android:topBright">@android:color/transparent</item>
    <item name="android:topDark">@android:color/transparent</item>

これをアニメーション用に配置します。

<style name="DialogAnimation">
    <item name="android:windowEnterAnimation">@anim/slide_in</item>
    <item name="android:windowExitAnimation">@anim/slide_out</item>
</style>

メソッドを追加します。

public static ProgressDialog processSnackbar(Context context,String s){
    ProgressDialog pSnackbar = new ProgressDialog(context, R.style.CustomDialog) {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            ProgressBar progress = (ProgressBar) findViewById(android.R.id.progress);
            LinearLayout bodyLayout = (LinearLayout) progress.getParent();
            TextView messageView = (TextView) bodyLayout.getChildAt(1);

            messageView.setPadding(20,0,0,0);
            LinearLayout.LayoutParams llp =
                    (LinearLayout.LayoutParams) messageView.getLayoutParams();
            llp.width = 0;
            llp.weight = 1;


            bodyLayout.removeAllViews();
            bodyLayout.addView(messageView, llp);
            bodyLayout.addView(progress);
        }
    };
    pSnackbar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    pSnackbar.setMessage(s);
    pSnackbar.getWindow().setGravity(Gravity.BOTTOM);
    pSnackbar.setCancelable(false);
    return pSnackbar;
}

メソッド クレジットは @mike-m リファレンスに戻ります進行状況ダイアログのメッセージまたはスピナーの位置を変更することは可能ですか?

私は自分のアプリケーションでもこれを使用しています。

スニッカーズバー

于 2016-02-18T08:41:33.827 に答える