簡體   English   中英

自定義布局忽略布局參數

[英]Custom Layout ignoring layout params

我似乎無法在代碼中復制XML等效項:

XML布局VS程序化布局

布局代碼

<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM