On Sat, Nov 21, 2009 at 4:26 PM, Mark Murphy <mmur...@commonsware.com>wrote:

> "DROID has been optimized to display wide-screen multimedia (movie)
> content at its native aspect ratio of 16/9. This is different from the
> HVGA aspect ratio of 3/2, which is the traditional computer screen
> format. What this means is that when content is scaled up to "full
> screen", the horizontal (X*1.5) and vertical (Y*1.77) scaling factors
> are different. As a result, when displaying the same bitmap as a full
> screen background, round circles can appear as ovals, and squares are
> elongated to rectangles."
>
>
> http://developer.motorola.com/docstools/library/Support_for_Multiple_Screen_Resolutions/
>
> I have no reason to believe this is DROID-specific, but rather is how
> Android scales things in WVGA800/WVGA854, when you do not supply your
> own pre-scaled resources.
>

I think what they are trying to say is correct, but probably misleading.

First, scaling is only done based on density, and does NOT change aspect
ratio.  If you are on a high density device, and your assets are medium
density, they will be scaled by 1.5 in both width and height, period, end of
story.

What this Motorola doc is describing is what I would consider a special
case.  If you make a layout that is fill parent for both width and height,
then on a WVGA of course it will be taller than on HVGA because the screen
you are filling is taller.  Now if you set a drawable as its background, the
View class draws its background by simply stretching the drawable to fill
its contents, so your bitmap will be stretched to fill whatever aspect ratio
your layout has ended up being.  This is just a matter of accounting for the
screen being different sizes and designing your layout to adjust
accordingly.


> You cannot control the aspect ratio, as that is dictated by the physical
> parameters of the screen. AFAIK, there is no Android equivalent of
> "letterbox" that would put black bars on either side of your app and
> give you a smaller virtual screen with 3/2 aspect ratio.
>

We actually do a "postage stamp" for apps on large screens, since we found
that a significant number of them broke when given so much extra space.
 However, the vast majority of existing apps work reasonably well when
presented with a WVGA screen, so rather than cause all of the existing ones
to not be able to use that space, we decided to not provide compatibility
for that and live with the small handful that did have significant problems.

But for someone writing an app today, this is fairly irrelevant, because if
your app really can't use anything more than an HVGA screen then you really
just need to design your layout to center or whatever you want your content
in whatever screen you are running on.

> Also in my layout I am positioning some items using pixel positions.
> > Should I convert these to dpi?
> If you mean dip (density-independent pixels), perhaps. It depends on
> what the pixels represent. There is no hard-and-fast rule.
>

But the vast majority of time, yes, you do want to use dpis.

However!  The original post showed that the app was actually saying it can't
deal with densities.  This means the system will emulate a medium density
screen on whatever density the device  is, so 1 px == 1 dip.  However, you
really should not be saying that you don't support densities -- there are
artifacts that can happen when doing this, such as font metrics not being
quite right.

If you are writing an app today, you really want to not put yourself in
compatibility mode, and just write the app correctly.

-- 
Dianne Hackborn
Android framework engineer
hack...@android.com

Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails.  All such
questions should be posted on public forums, where I and others can see and
answer them.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to