【发布时间】:2015-10-30 02:44:22
【问题描述】:
我似乎无法在代码中复制等效的 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 代码并设置所有具有特定宽度和高度的图像视图,为什么它们不同?
【问题讨论】: