【问题标题】:Android Progress Bar style programmatically以编程方式的 Android 进度条样式
【发布时间】:2013-10-06 21:17:47
【问题描述】:

我正在尝试从主 Activity 实例化 Progress Bar 并将其动态添加到视图中。当我这样做时,我得到一个酒吧:

ProgressBar bar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
bar.setLayoutParams(params);
bar.setId(mInt);
LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
layout.addView(bar);

我新建了一个项目,只包含上面的代码,进度条显示正确。

如果我在上面的代码中添加以下行,屏幕会空白一秒钟,然后显示一个半满的栏。我希望看到一个空条,然后它会达到 50%。

try {
    Thread.sleep(2000);
} catch ...{
}
bar.setProgress(50);

但是,如果我添加一些这样的代码,栏和更改会正确显示。

Button b = new Button(this);
        b.setText("change bar");
        b.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                changeProg();
            }
        });

public void changeProg() {
        switch (state) {
        case 0: bar.setProgress(100); state = 1; break;

        case 1: bar.setProgress(127); state = 2; break;

        case 2: bar.setProgress(33);  state = 0; break;
        }
    }

如果我尝试通过循环调用 changeProg() 来自动化该过程,那么屏幕就会保持空白 - 根本不会显示任何小部件,无论它们是由 XML 描述还是以编程方式进行描述都没有区别。

我无法理解为什么会出现这种行为。

【问题讨论】:

    标签: android android-layout android-progressbar


    【解决方案1】:

    您似乎从 UI 线程调用 Thread.sleep(2000),这导致了问题,甚至创建了 ANR。尝试创建一个新线程(单独线程)来更改进度值。

    请看下面的例子:

    https://stackoverflow.com/a/17758416/3922207

    【讨论】:

      【解决方案2】:
      ProgressBar pdialog = new ProgressBar(context,null, android.R.attr.yourcustomstyle);
      

      并检查您的应用主题风格

      【讨论】:

        【解决方案3】:

        设置进度提示:

        将当前进度设置为指定值。如果进度条处于不确定模式,则不执行任何操作。

        所以你必须打电话:

        bar.setIndeterminate(false);

        【讨论】:

          【解决方案4】:

          您是否尝试过查看此网站?

          http://www.mkyong.com/android/android-progress-bar-example/

          正确的方法是使用 1 个线程来运行您的耗时任务,并使用另一个线程来更新进度条状态

          希望这会有所帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-14
            • 1970-01-01
            • 1970-01-01
            • 2016-07-24
            • 1970-01-01
            • 1970-01-01
            • 2015-05-30
            • 1970-01-01
            相关资源
            最近更新 更多