I'm not sure I am totally following you, but if you have two different
layouts, one for smaller screens, and one for larger screens, then yes you
probably want to have two resources, one with no qualifiers (for the
smaller screens), and one with the appropriate screen size qualifier for
the larger screens it is intended for.

As a general rule, if you see a density qualifier being used with a layout,
there is probably something wrong.  Layouts are density independent -- that
us why there are "dp" units and such for any sizes you use in the layout.

As the most general case, there is really a continuous range of densities
and screen sizes.  We created the bins for each early on, to ease things
for developers, but this is an arbitrary restriction.  In fact in 3.2 we
realized that the bins for screen sizes wasn't working, which is why we
have dropped them in favor -swNNNdp and related configurations.  This is
actually easy for developers, because they had to deal with a pretty much
continuous range of screen sizes anyway, we already have good tools for
handling this (through layout managers), and now they can be much more
explicit about the break-points where they want to switch between different
layouts.

The same situation nearly exists for density as well.  You can run a device
at any reasonable density you want, and applications will still work.
 There is not as clear a case for allowing this though -- it definitely
causes more pain for developers who have a much harder time deciding how to
create graphics, and there is not as much benefit for device manufacturers
to have such freedom.  However, even so, tvdpi was introduced in I think
3.2.  It is an interesting density between mdpi and hdpi.  It is certainly
conceivable for other new densities to pop up in the future.

So, that leaves us, with both screen size and screen density needing to be
treated really as continuous ranges.  For this to work, something must help
applications turn a small discrete set of design points into supporting a
range of values.  For screen size, this is layout managers.  For density,
this is the automatic scaling of bitmap drawables and dp units.

If you are using density configurations with layout resources, you have a
fundamental issue because layouts can *not* be scaled to match the actual
density.  So what happens if you have a layout-hdpi and are now running on
an xhdpi screen?  We'll use the layout-hdpi resource because that is the
best match, but there is no mechanism to know how to transform that into
something appropriate for an xhdpi density.  So the layout-hdpi is a break
point where your layout changes in some fundamental way across different
densities...  but does that even make sense?  If I have one device with a
normal size mdpi screen, and another with a normal size hdpi screen (so
they are the same size in my hand, just higher density screens), why would
the layout be different between them?  I should just see UI elements with
finer details, not a different layout of those elements.


On Thu, Feb 23, 2012 at 7:39 PM, William Ferguson <
william.ferguson...@gmail.com> wrote:

> So Dianne, you're saying that if I only have a single configuration
> for a screen size that I might as well drop the density qualifier as
> it will have no impact, as the screen size will totally override the
> decision as to which resource is used,
>
> This means that if I want to implement the layouts I thought I have
> been supporting I will need 4 definitions of 2 layouts
> - default        - layout_A_less_capabable_screens
> - large-mdpi  - layout_A_less_capabable_screens (this config does not
> currently exist).
> - large-hdpi   - layout_B_more_capabable_screens
> - xlarge        - layout_B_more_capabable_screens
>
> Or if I want to implement the layouts I have actually been supporting,
> I can collapse this to
> - default  - layout_A_less_capabable_screens
> - large    - layout_B_more_capabable_screens
>
>
> William
> On Feb 24, 11:09 am, Dianne Hackborn <hack...@android.com> wrote:
> > Keep in mind that all densities are a potential match, and screen size is
> > considered a more significant match than density.  So if there is the
> > choice between resources with two different densities, but one has a
> better
> > match for the screen size, the screen size will win.
> >
> > And I will say what I usually do -- I very strongly recommend mixing
> screen
> > size and screen density qualifiers in the same configuration.  These are
> > two * orthogonal* axis.  You will need to think very hard and long about
> > the set of different screens that are going to match the qualifiers you
> > have, and I think it most cases this is *not* what people are thinking.
> >  Usually people do this because they think they are more finely-tuning to
> > try to design for a specific screen resolution, but that is not what this
> > does.
> >
> > On Thu, Feb 23, 2012 at 1:48 PM, William Ferguson <
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > william.ferguson...@gmail.com> wrote:
> > > Thanks for the review Mark.
> > > I didn't think I was going insane, just tearing my hair out.
> >
> > > William
> >
> > > On Feb 23, 11:15 pm, Mark Murphy <mmur...@commonsware.com> wrote:
> > > > Replying to the list:
> >
> > > > On Thu, Feb 23, 2012 at 2:54 AM, William Ferguson
> >
> > > > <william.ferguson...@gmail.com> wrote:
> > > > > you can download a very small project showing this behaviour from
> > > > > [REDACTED]
> > > > > Deploy it to a 2.2 (I haven't tested other Android Version but I
> > > > > expect the same) AVD with a resolution of WVGA800 (800*400) and
> > > > > default "Abstracted LCD density" of 160dpi (ie mdpi).
> > > > > The buttons will show the text for large hdpi.
> >
> > > > Well, I can reproduce the problem, on multiple Android emulator
> > > > versions (including 4.0) and the original Galaxy Tab 7.
> >
> > > > In the sample you sent me, it pulls from res/layout-large-port-hdpi/
> >
> > > > If I add a res/layout-large-port-mdpi/ directory, that gets used on a
> > > > 4.0 emulator and the 2.2 emulator, but not the Tab 7.
> >
> > > > That's indicative of a bug in the Tab 7:
> >
> > > >
> http://stackoverflow.com/questions/7049659/understanding-samsung-gala...
> >
> > > > In terms of why it pulls from res/layout-large-port-hdpi/ instead of
> > > > res/layout-xlarge-port/ or res/layout-port/, I cannot say.
> >
> > > > --
> > > > Mark Murphy (a Commons Guy)http://commonsware.com|
> > >
> http://github.com/commonsguyhttp://commonsware.com/blog|http://twitter.com/commonsguy
> >
> > > > Android Training...At Your Office:http://commonsware.com/training
> >
> > > --
> > > 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
> >
> > --
> > 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
>



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