3

回転する進行状況ダイアログを作成しようとしています。テキスト、境界線、背景はありません。画面のコンテンツ上部の中央に軽く表示される回転通知だけです。

このカスタムダイアログを作成する際に、2つの異なるスタックオーバーフローの質問を見てきました。

どちらもこのスタイルを使用しています。

   <style name="NewDialog" parent="@android:style/Theme.Dialog">

    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:colorBackground">#ffffff</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:width">600dip</item>
    <item name="android:height">100dip</item>
     <item name="android:textColor">#FF0000</item>

</style>

しかし、Java側では、1つはDialogを拡張し、多くのカスタムコンテンツを含み、もう1つは単純に次のようになります。

public class MyProgressDialog extends ProgressDialog {

    public MyProgressDialog(Context context) {
        super(context, R.style.NewDialog);

    }

}

最初の(ダイアログを拡張する)で、空白が表示されます。ダイアログはありません。何もない。すぐ上のコードサンプルでは、​​中心から外れたブラックボックス内で小さなダイアログが縮小して回転しています。

どちらの方法がより正確で、これを実装する方法のサンプルを入手できますか?

また、どうすればそのダイアログを透明/境界なしにすることができますか?

4

3 に答える 3

12

これを行うための「正しい方法」は、DialogFragmenthttp://developer.android.com/reference/android/app/DialogFragment.htmlを拡張することです

互換性ライブラリを使用していない場合は、現在のAndroidの世界でプログラミングを行っていません。

Dialogを拡張したい場合は、ここにいくつかのサンプルコードがあります:https ://github.com/tom-dignan/nifty/tree/master/src/com/tomdignan/nifty/dialogsこのコードでは、種類を実装しましたDialogを拡張して「progressdialog」を作成します。フルコントロールが必要で、Dialogをフルスクリーンにしたいので、Dialogを拡張しました。

ただし、上記のDialogFragmentドキュメントを読んでそれを使用することをお勧めします。

だから本当に、ここには正しい方法も間違った方法もありません。3つのクラスのいずれかを拡張することはできますが、最もクリーンで最新の方法はDialogFragmentアプローチです。

于 2012-10-18T22:57:00.790 に答える
5

これを行う1つの方法は、カスタムダイアログを使用し、機能No_Titleを要求し、背景の描画可能リソースを透明に設定することです。

次のコードを使用できます。Android4.0.3ICSで記述してテストしました。

レイアウトフォルダのxmlレイアウトは、たとえば、dialog_progress.xmlです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ProgressBar
        android:id="@+id/dialogProgressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>

</LinearLayout>

ダイアログを表示して透過的にするためのJavaコードは次のとおりです。

Dialog dialog = new Dialog (this);

dialog.requestWindowFeature (Window.FEATURE_NO_TITLE);
dialog.setContentView (R.layout.dialog_progress);
dialog.getWindow ().setBackgroundDrawableResource (android.R.color.transparent);
dialog.show ();
于 2012-10-19T11:29:21.527 に答える
2

カスタム進行状況ダイアログを作成する代わりに、ImageView でフレームごとのアニメーションを使用することで、同様のことを非常に簡単に実現できます。これには、一連の画像が必要です(任意のgifから抽出できます)。そして、フレームごとのアニメーションを適用できます。それはまさにあなたが望むことをします。

以下のコードで同様のことを行いました-:

// フレームごとのアニメーションの XML

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >

<item
    android:drawable="@drawable/frame00"
    android:duration="150"/>
<item
    android:drawable="@drawable/frame01"
    android:duration="150"/>
<item
    android:drawable="@drawable/frame02"
    android:duration="150"/>
<item
    android:drawable="@drawable/frame03"
    android:duration="150"/>
<item
    android:drawable="@drawable/frame04"
    android:duration="150"/>
<item
    android:drawable="@drawable/frame05"
    android:duration="150"/>
<item
    android:drawable="@drawable/frame06"
    android:duration="150"/>

アニメーションを開始するための Java コード :-

ImageView iv = (ImageView)findViewById(R.id.progressDialog);
iv.setBackgroundResource(R.anim.progress_dialog_icon_drawable_animation);
AnimationDrawable aniFrame = (AnimationDrawable) iv.getBackground();
aniFrame = (AnimationDrawable) iv.getBackground();
aniFrame.start();

上記のコードからこれを達成しました

それが役に立てば幸い !

于 2012-10-19T14:04:41.577 に答える