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 を使用できない理由は他にもいくつかあります。)