これを正しく機能させるのに苦労しています。と がありImageView
、TextView
どちらも にありLinearLayout
ます。ImageView
縦横比をトリミングしたり変更したりせずに、できるだけ多くの親ビューを占めるようにしますが、そのすぐ下に TextView 用の十分なスペースを残します。これはほとんど機能していますが、画像の高さが親ビューに余分なスペースを残すのに十分小さい場合、TextViewLinearLayout
は画像のすぐ下ではなく、の一番下にのみ表示されます。
ImageView と TextView の両方の重力、重量、高さ、および幅をいじって、レイアウト パラメーターの多くの組み合わせを試しました。も使用してみましたRelativeLayout
が、結果は非常に一貫していませんでした。
私のコードの関連部分は次のとおりです。
// Create a vertical linear layout to hold the image with the caption below
// it, taking up as much space on the screen as possible
LinearLayout ll = new LinearLayout(context);
ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
ll.setOrientation(LinearLayout.VERTICAL);
ll.setGravity(Gravity.CENTER);
// Get the image view
ImageView img = new ImageView(context);
LayoutParams ilp = new LayoutParams(LayoutParams.MATCH_PARENT, 0);
ilp.weight = 1;
ilp.gravity = Gravity.CENTER;
img.setLayoutParams(ilp);
// Create the caption view
TextView cap = new TextView(context);
cap.setText("Example caption text");
LayoutParams clp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
clp.weight = 0;
clp.gravity = Gravity.CENTER_HORIZONTAL;
cap.setLayoutParams(clp);
// Add views to the linear layout
ll.addView(img);
ll.addView(cap);
// Load the image using an AsyncTask
loadImageTask = new LoadCachedImageTask(context, img, pos);
loadImageTask.execute("image src");
これは、テキストがまだ表示されるポイントまで画像が拡大された「適切な動作」の画像です。
これは「悪い振る舞い」の画像です。画像の上下に余裕がありますが、テキストはまだ下部にあります。