【问题标题】:Android : How to get rid of weird border around progress dialogAndroid:如何摆脱进度对话框周围的奇怪边框
【发布时间】:2015-11-30 20:15:03
【问题描述】:

我已经为进度对话框创建了自定义样式,但是它周围有奇怪的边框。

这里是主题:

<style name="AppTheme.Dialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@android:color/white</item>
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:background">@color/colorPrimaryDark</item>
    <item name="android:popupBackground">@null</item>
</style>

你知道为什么会有这么奇怪的背景吗?

【问题讨论】:

  • 这是进度对话框,而不是 AlertDialog。
  • 删除&lt;item name="android:background"&gt;@color/colorPrimaryDark&lt;/item&gt;。这不是为 ProgessDialog 设置背景可绘制对象的正确方法
  • @JaredRummler 但是它只是白色的,还有白色丑陋的边框。如何正确获得所需的蓝色外观?

标签: android android-layout progressdialog


【解决方案1】:

要移除进度对话框周围的彩色或白色边框,让对话框使用定义透明 windowBackground 的主题

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
</style>

创建对话框时使用此主题:

new ProgressDialog(MyActivity.this, R.style.MyDialogTheme);

【讨论】:

  • 你救了我的一天兄弟,非常感谢
【解决方案2】:

请补充:

your_progress_dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

到你的 java.

希望这会有所帮助!

【讨论】:

  • 你开发的安卓版本是什么?
  • Android 4.4 api 级别 19
  • 请将 ​​@android:color/transparent 添加到您的样式中。
  • 还是一样奇怪的边框
【解决方案3】:

它与this question 相关。 但与警报对话框相反,ProgressDialog 不支持 AppCompat。 我没能解决问题,可以使用已弃用的 THEME_HOLO_LIGHT

ProgressDialog dialog= new ProgressDialog(this,ProgressDialog.THEME_HOLO_LIGHT);

但是您失去了 AppCompat 的所有好处(例如颜色强调)。

【讨论】:

  • 谢谢,这是最快的修复方法,并且确实有效(与此处的其他答案不同)。我只在Build.VERSION.SDK_INT &lt;= Build.VERSION_CODES.KITKAT时使用它。
【解决方案4】:

创建两种样式

1) API 级别小于等于 19

  <style name="AppAlertTheme19" parent="Theme.AppCompat.Light.Dialog">
        <item name="colorAccent">@color/btngreen</item>
        <item name="android:textColorPrimary">@color/transparent</item>
        <item name="android:background">@color/transparent</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:popupBackground">@null</item>
    </style>

2) API 级别大于 19

<style name="AppAlertTheme" parent="Theme.AppCompat.Light.Dialog">
        <item name="colorAccent">@color/btngreen</item>
        <item name="android:textColorPrimary">@color/transparent</item>
        <item name="android:background">@color/white</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:popupBackground">@null</item>
    </style>

3) 并像这样初始化进度视图

public class ProgressDialogCustom extends ProgressDialog {
    public ProgressDialogCustom(Context context) {
        super(context, getStyle());
        setMessage("Please Wait ...");
        setCancelable(false);
    }

    private static int getStyle() {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
            return R.style.AppAlertTheme;
        } else {
            return R.style.AppAlertTheme19;
        }
    }
}

【讨论】:

    【解决方案5】:

    我可能会迟到回答这个问题,但由于我面临同样的问题,我解决了如下:
    我创建了 2 种样式,一种用于上面的棒棒糖,一种用于下面。

    API 级别大于 19

    <style name="AppAlertTheme" parent="Theme.AppCompat.Light.Dialog">
            <item name="colorAccent">@color/white</item>
            <item name="android:textColorPrimary">@color/transparent</item>
            <item name="android:background">@color/blue</item>
            <item name="android:windowBackground">@color/transparent</item>
            <item name="android:popupBackground">@null</item>
    </style>
    

    API 级别低于 19

    <style name="AppAlertTheme_api19" parent="android:Theme.Holo.Dialog">
         <item name="android:alertDialogStyle">@style/CustomAlertDialogStyle</item>
        <item name="android:windowBackground">@color/nlue</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:textColor">@color/white</item>
    </style>
    
    <style name="CustomAlertDialogStyle">
            <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>
    

    然后使用这种样式如下:

    public int getProgressDailogStyle(){
      if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
          return R.style.AppAlertTheme;
      } else {
          return R.style.AppAlertTheme_api19;
      }
    }
    

    最后

       progressDialog = new ProgressDialog(context, getProgressDailogStyle());
    

    希望对你有所帮助..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多