我只是想创建一个旋转进度对话框。没有文字,没有边框,没有背景。只是一个旋转的通知,在内容的基础上轻轻地位于屏幕的中心。
在创建此自定义对话框时,我看到了两个不同的Stack Overflow问题。
他们都使用这种造型:
<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方面,一个扩展了Dialog并包含许多自定义内容,另一个只是这个:
public class MyProgressDialog extends ProgressDialog {
public MyProgressDialog(Context context) {
super(context, R.style.NewDialog);
}
}
在第一个(扩展对话框)上,我得到一个空白。没有对话。没有。在上面的代码示例中,我得到了一个缩小的小对话框,它在一个偏离中心的黑盒子内旋转。
哪种方法更正确,我可以举例说明如何实现这个方法吗?
另外,如何使该对话框透明/无边框?
答案 0 :(得分:12)
现在执行此操作的“正确方法”是扩展DialogFragment http://developer.android.com/reference/android/app/DialogFragment.html
如果您没有使用兼容性库,则不会在当前的Android世界中进行编程。
如果你想扩展Dialog,那么我在这里有一些示例代码:https://github.com/tom-dignan/nifty/tree/master/src/com/tomdignan/nifty/dialogs在这段代码中,我通过扩展Dialog实现了一种“进度对话框”。我扩展了Dialog,因为我想完全控制并希望我的Dialog能够全屏显示。
我建议阅读上面的DialogFragment文档并使用它。
所以,这里没有正确或错误的方法。扩展这三个类中的任何一个都可行,但最干净和最新的方法是DialogFragment方法。
答案 1 :(得分:5)
这样做的一种方法是使用自定义对话框,请求功能No_Title并将背景可绘制资源设置为透明。
您可以使用以下代码,我刚刚在Android 4.0.3 ICS上编写并测试了它。
布局文件夹中的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 ();
答案 2 :(得分: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();
希望它有所帮助!