1

I'm trying to create a ListView that will fit it self to Tablet screens as well. I'm using the SwipeListView implementation so each ListView item is a RelativeLayout.

So I want to create a ListView item that will keep the aspect ratio from the Smartphone applcation. I tried to use the following implementation:

public class FixedAspectRatioFrameLayout extends FrameLayout
{
private int mAspectRatioWidth;
private int mAspectRatioHeight;

public FixedAspectRatioFrameLayout(Context context)
{
    super(context);
}

public FixedAspectRatioFrameLayout(Context context, AttributeSet attrs)
{
    super(context, attrs);

    Init(context, attrs);
}

public FixedAspectRatioFrameLayout(Context context, AttributeSet attrs, int defStyle)
{
    super(context, attrs, defStyle);

    Init(context, attrs);
}

private void Init(Context context, AttributeSet attrs)
{
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FixedAspectRatioFrameLayout);

    mAspectRatioWidth = a.getInt(R.styleable.FixedAspectRatioFrameLayout_aspectRatioWidth, 4);
    mAspectRatioHeight = a.getInt(R.styleable.FixedAspectRatioFrameLayout_aspectRatioHeight, 3);

    a.recycle();
}
// **overrides**

@Override protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
    int originalWidth = MeasureSpec.getSize(widthMeasureSpec);

    int originalHeight = MeasureSpec.getSize(heightMeasureSpec);

    int calculatedHeight = originalWidth * mAspectRatioHeight / mAspectRatioWidth;

    int finalWidth, finalHeight;

    if (calculatedHeight > originalHeight)
    {
        finalWidth = originalHeight * mAspectRatioWidth / mAspectRatioHeight; 
        finalHeight = originalHeight;
    }
    else
    {
        finalWidth = originalWidth;
        finalHeight = calculatedHeight;
    }

    super.onMeasure(
            MeasureSpec.makeMeasureSpec(finalWidth, MeasureSpec.EXACTLY), 
            MeasureSpec.makeMeasureSpec(finalHeight, MeasureSpec.EXACTLY));
}
}

From this accepted answer: Fixed aspect ratio View, but changing it to RelativeLayout. But for some reason I'm getting the "cannot be resolved error.." on the following code:

R.styleable.FixedAspectRatioFrameLayout
R.styleable.FixedAspectRatioFrameLayout_aspectRatioWidth
R.styleable.FixedAspectRatioFrameLayout_aspectRatioHeight
halfer
  • 19,824
  • 17
  • 99
  • 186
Emil Adz
  • 40,709
  • 36
  • 140
  • 187
  • You need to add a `` element to your `attrs.xml`. See http://kevindion.com/2011/01/custom-xml-attributes-for-android-widgets/ for more. – Vicky Chijwani Feb 17 '14 at 12:42

0 Answers0