web-dev-qa-db-ja.com

Android progressBarが表示されない

AsyncTaskで実行することになっているプログレスバーがありますが、タスクは実行されますが表示されません

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent" Android:layout_height="match_parent"
Android:background="@drawable/splashportrait">
<ProgressBar Android:layout_alignParentBottom="true" Android:indeterminate="true"
    Android:layout_centerHorizontal="true" Android:paddingBottom="450dip"
    Android:layout_width="200dip" Android:layout_height="200dip"
    Android:id="@+id/progressBar1"></ProgressBar>
</RelativeLayout>

コード:

ProgressBar diagProgress;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splashscreen);

    diagProgress = (ProgressBar)findViewById(R.id.progressBar1);
    DiagnosticsTask diag = new DiagnosticsTask();
    diag.execute();

  /**rest of class ommitted here**/
}

private class DiagnosticsTask extends AsyncTask<String, String, Boolean> {

    //Show spinner
    protected void onPreExecute() {
        //dialog.setMessage("Loading corresponding destinations...");
        //dialog.show();
        diagProgress.setVisibility(View.VISIBLE);
        diagProgress.showContextMenu();
        Log.e("AsyncStatus", "spinner shown");
    }
 /*other parts of the thread ommitted here*/

}
12
CQM

これを試して、ProgressBarを以下のものに置き換えてください。

<ProgressBar  Android:indeterminate="true"
Android:layout_centerInParent="true" 
Android:layout_width="wrap_content" Android:layout_height="wrap_content"
Android:id="@+id/progressBar1"></ProgressBar>

それがうまくいくかどうか教えてください、私は理論的根拠を説明します。

理論的根拠:ProgressBarのコードを以下に示します

<ProgressBar Android:layout_alignParentBottom="true" Android:indeterminate="true"
Android:layout_centerHorizontal="true" Android:paddingBottom="450dip"
Android:layout_width="200dip" Android:layout_height="200dip"
Android:id="@+id/progressBar1"></ProgressBar>

RelativeLayoutを使用すると、Z順序を付けることができます。したがって、ProgressBarが必要だったので、実行しているような操作を行う必要はありません。

Android:layout_alignParentBottom="true"  

これにより、プログレスバーがレイアウトの下部に設定されます。

Android:paddingBottom="450dip" Android:layout_width="200dip" Android:layout_height="200dip"

ここでの3つの値はすべて絶対値であり、Androidに関する限り、厳密にノーノーです。おそらく、paddingBottomがProgressBarをビューから押し出していました。パディングが実際よりも大きいためです。コントロールの幅/高さ

経験則として、すべてのデバイスとフォームファクタで機能するには、常に相対値を使用します。

これが理にかなっているかどうか教えてください。

20
PravinCG

XDをテストした後、アニメーションをオンにするのを忘れたときにその問題が発生しました

29
Johnny N

タスクを実行するのを忘れましたか?

  ...
  diagProgress = (ProgressBar)findViewById(R.id.progressBar1);
  new DiagnosticsTask().execute();


  ....
0
dmon