-19

LinearLayout の垂直方向の中央に配置する ProgressBar を作成しています (他のレイアウトは機能しません。LinearLayout を使用する必要があります)。ここにいくつかのコードがあります:

LinearLayout linearLayout = new LinearLayout(context);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.MATCH_PARENT);
linearLayout.setLayoutParams(layoutParams);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setGravity(Gravity.CENTER);

//add progressbar
ProgressBar progressBar = new ProgressBar(context);
progressBar.setLayoutParams(new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT));
linearLayout.addView(progressBar);

上記で作成した LinearLayout を保持する ContainerView があります。このようなもの:

public class ContainerView extends ScrollView {
    public ContainerView(Context context) {
        super(context);
        initView(context);
    }

    private void initView(Context context){
        addView(linearLayout);     //which is created in the snippet above
    }
} 

ContainerView を LinearLayout で拡張すると、すべて正常に動作します。

ContainerView を ScrollView で拡張すると、ProgressBar は水平方向に中央揃えされますが、垂直方向には中央揃えされません。

この二重の動作の背後にある理由は何ですか? 私の目標は、一部のデータのダウンロード中に ProgressBar を表示することです。データがダウンロードされたら、それを LinearLayout に表示する必要があります。

(注: ScrollView を使用する理由は、ダウンロードされたデータが大きすぎて小さな画面に収まらない可能性があるためです。これは ListView のユースケースのように思えるかもしれませんが、ListView を使用できない理由は他にもいくつかあります。)

4

3 に答える 3