[英]Custom Layout ignoring layout params
我似乎無法在代碼中復制XML等效項:
布局代碼
<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="3">
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_columnSpan="2"
android:layout_rowSpan="2"
android:layout_gravity="fill"
android:src="@drawable/square_outline"/>
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/square_outline"/>
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/square_outline"/>
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/square_outline"/>
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/square_outline"/>
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/square_outline"/>
</GridLayout>
Java“等效”
public class ImageSelectionGridView extends GridLayout
{
private static final int SQUARE_SIZE = 10;
private int mSquareSize;
private ImageView mMainImageView;
private ImageView mRemainingImageViews[];
public ImageSelectionGridView(Context ctx, AttributeSet attrs)
{
super(ctx, attrs);
TypedArray a = ctx.getTheme().obtainStyledAttributes(
attrs,
R.styleable.ImageSelectionGridView,
0, 0);
try
{
mSquareSize = a.getDimensionPixelSize(R.styleable.ImageSelectionGridView_squareSize,
SQUARE_SIZE);
} finally
{
a.recycle();
}
mMainImageView = new ImageView(ctx);
mMainImageView.setImageDrawable(ctx.getResources().getDrawable(R.drawable.square_outline));
GridLayout.LayoutParams params = new GridLayout.LayoutParams();
params.width = params.height = mSquareSize;
params.columnSpec = GridLayout.spec(0, 2);
params.rowSpec = GridLayout.spec(0, 2);
params.setGravity(Gravity.FILL);
mMainImageView.setLayoutParams(params);
addView(mMainImageView);
mRemainingImageViews = new ImageView[5];
for (int i = 0; i < mRemainingImageViews.length; i++)
{
createRemainingImage(ctx);
}
}
private ImageView createRemainingImage(Context ctx)
{
ImageView remainingImage = new ImageView(new ContextThemeWrapper(ctx, R.style.EditablePictureStyle));
remainingImage.setImageDrawable(ctx.getResources().getDrawable(R.drawable.square_outline));
GridLayout.LayoutParams params = new GridLayout.LayoutParams();
params.width = params.height = mSquareSize;
addView(remainingImage);
return remainingImage;
}
}
帶有attrs.xml的代碼XML:
<domain.slingbee.ui.ImageSelectionGridView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="3"
custom:squareSize="70dp"
/>
<declare-styleable name="ImageSelectionGridView">
<attr name="squareSize" format="dimension"/>
</declare-styleable>
由於某些原因,大小有所不同,我將70dp傳遞給Java代碼,並使用該特定寬度和高度設置所有圖像視圖,為什么它們不同?
在createRemainingImage()
內部,您正在創建layoutParams
,但未將它們設置為ImageView。
GridLayout.LayoutParams params = new GridLayout.LayoutParams();
params.width = params.height = mSquareSize;
您剛剛創建了params
。 但是您沒有將此設置為ImageView。 你需要這個:
remainingImage.setLayoutParams(params);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.