【问题标题】:Progress Bar not displayed in AndroidAndroid 中不显示进度条
【发布时间】:2018-02-02 03:09:28
【问题描述】:

我的应用有一个 Splash Activity,它在执行一些后台活动时向用户显示应用徽标。我正在尝试提供一个进度条来显示后台活动的状态,让用户等待片刻。

活动:

    public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    ProgressBar simpleProgressBar=(ProgressBar) findViewById(R.id.simpleProgressBar);
doProcessA();
simpleProgressBar.setProgress(10);
doProcessB();
simpleProgressBar.setProgress(20);
..

布局:

<RelativeLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ProgressBar
    android:id="@+id/simpleProgressBar"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:foregroundGravity="top"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginBottom="170dp"
    android:background="@color/green"
    android:max="100"
    android:visibility="visible" />
</RelativeLayout>

我的 Splash Activity 的主题如下:

<activity
  android:name=".SplashActivity"
  android:theme="@style/SplashTheme"
  android:configChanges="orientation|keyboardHidden|screenSize"
  android:screenOrientation="portrait">
  <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

<style name="SplashTheme" parent="AppTheme">
    <item name="android:windowBackground">@drawable/splash_drawable</item>
</style>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:opacity="transparent">
    <item android:drawable="@color/colorPrimary" />
    <item>
        <bitmap android:src="@drawable/app_logo" />
    </item>
</layer-list>

我想在应用徽标下方显示进度条。但是,我只是无法让进度条显示在屏幕上。

【问题讨论】:

  • 尝试将此添加到您的ProgressBar android:indeterminate="true"
  • 我不想将进度条显示为“不确定”。我想根据我正在做的过程来控制进度。
  • 所以去android:visibility="gone" 然后如果你想展示它就叫这个your_progressbar.setVisibility(View.VISIBLE) 我认为这就是你想要实现的。隐藏并显示您的进度条。这就是为什么我建议你添加indeterminate 这样你的进度是活跃的,你只需要隐藏和显示它。

标签: android android-layout android-theme android-progressbar


【解决方案1】:

试试这个,

您需要给进度条计时,然后在时间间隔内按照您的期望执行您的代码。

首先初始化进度条状态(进度条时间)

int progressStatus = 0;
Handler handler = new Handler();

然后在里面创建方法

new Thread(new Runnable() {
        @Override
        public void run() {
            while (progressStatus < 100) { 
                progressStatus += 1;
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        progressBar.setProgress(progressStatus);

                    }
                });
                try {
                    Thread.sleep(30);  // total time for progress bar (milli seconds//
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            if (progressStatus == 100) {
                 // do your code here //
                } 

            }
    }).start();

【讨论】:

    【解决方案2】:

    应该是你的布局设置,不知道为什么要把ProgressBar的宽度设置为android:layout_width = "match_parent"

    【讨论】:

      【解决方案3】:

      这样试试

      public class SplashScreen extends AppCompatActivity {
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_splash_screen);
          ProgressBar simpleProgressBar=(ProgressBar) 
              findViewById(R.id.simpleProgressBar);
          int SPLASH_TIME_OUT = 3000;
          new Handler().postDelayed(new Runnable() {
      
              /*
               * Showing splash screen with a timer. This will be useful when you
               * want to show case your app logo / company
               */
      
              @Override
              public void run() {
                  // This method will be executed once the timer is over
                  // Start your app main activity
      
              doProcessA();
              simpleProgressBar.setProgress(10);
              doProcessB();
              simpleProgressBar.setProgress(20);
                  }
      
                  // close this activity
                  finish();
              }
          }, SPLASH_TIME_OUT);
      }
      }
      

      Handler 线程中的所有内容。它会工作的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-13
        相关资源
        最近更新 更多