【问题标题】:Showing a dialog without freezing the UI在不冻结 UI 的情况下显示对话框
【发布时间】:2012-11-02 22:42:25
【问题描述】:

我当前的进度对话框冻结了 UI,我的意思是,在对话框显示时我无法使用该应用程序,我无法移动或单击任何按钮。是否可以在没有任何焦点的情况下显示一个对话框?(所以我可以点击当前活动中的按钮)。

【问题讨论】:

  • 没有看到你的任何代码,我猜这里。你的对话框可能是模态的吗?
  • @BenvanGompel 我只是在使用 ProgressDialog 对话框
  • ProgressDialog 会阻塞主线程还是创建对话框的操作(如数据库访问或下载)会这样做?
  • @Sam 在显示进度对话框时,有一个异步任务正在从互联网上下载一些数据。所以 ProgressDialog 阻塞了主线程。

标签: java android user-interface dialog progress


【解决方案1】:

ProgressDialog 与任何对话框一样,总是会从您当前的活动中窃取焦点。如果您想在当前布局中嵌入进度条,请使用ProgressBar,在您开始长时间运行的操作时使用setVisible(true),并使用setProgress 更新进度条(如果您不知道,请使用不确定模式任务需要多长时间)。

进度条的样式主要通过他们的样式完成,选择一种内置的进度条类型:

  • 默认样式(即未指定样式):纺车
  • Widget.ProgressBar.Horizontal - 单杠
  • Widget.ProgressBar.Small - 更小的纺车
  • Widget.ProgressBar.Large - 更大的纺车
  • Widget.ProgressBar.Inverse - 浅色背景上的纺车
  • Widget.ProgressBar.Small.Inverse - 浅色背景上的小纺车
  • Widget.ProgressBar.Large.Inverse - 浅色背景下更大的纺车

您可以通过将style 属性添加到您的ProgressBar xml 来应用这些:

 <ProgressBar
     style="@android:style/Widget.ProgressBar.Horizontal"
     ... />

如果您需要自定义着色,您可以使用here 发布的解决方案,它利用了setColorFilter

【讨论】:

  • 这似乎是答案,但我无法将我的进度条转到其他模式(不显示任务需要多长时间)..我已经在互联网上搜索过,你能请提供代码示例?
  • 哦,等等,现在我看到了我的进度条,看起来还可以,但我该如何设计呢?它没有任何背景颜色或其他东西。
  • @idish - 查看我编辑的答案 - 在 ProgressBar 可用的styles 和自定义着色之间,这应该可以让您接近您的需要。否则,请随时编辑您的问题,并提供有关您要查找的内容的更多详细信息。
  • 按我想要的样式设置进度条看起来很困难。它看起来不像进度条,看起来很整洁。无法显示看起来像进度对话框的进度条?
  • @idish - '喜欢进度对话框' 信息不够。 ProgressDialog 和 ProgressBar 共享相同类型的 Spinner 或 Horizo​​ntal 样式以及确定和不确定模式。
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2011-08-21
相关资源
最近更新 更多