"The bug" here is trying to modify something that is not intended to be
modified by application code.

--
Kostya Vasilyev
05.11.2011 2:47 пользователь "Alex K." <[email protected]> написал:

> Hi, I have exactly the same problem. Did you find a solution for this
> random DisplayMetrics restet to defaults? Or even an alternative
> solution to get the same effect?
>
> On 27 Okt., 10:12, arberg <[email protected]> wrote:
> > I just noticed that the effect of updateConfig() seems to stick if
> > applied from onCreateDialog, after a dialog has been displayed (and
> > the updateConfig-code has been executed). After changing the
> > DisplayMetrics density from actitvity.onCreateDialog, new activities
> > also gets the custom density. To pin it out:
> >
> > 1) If I start game, apply custom-density to DisplayMetrics in
> > activity.onCreate then activity mainview has custom density
> > 2) if i start a normal preference activity it has normal density, if I
> > inflate a subview (by clicking a button), it has normal density
> > 3) if I display a dialog, and apply custom-density to DisplayMetrics
> > in onCreateDialog, then that dialog gets custom density
> > 4) and following starts of preference activity gets custom density, as
> > well as inflated subviews in main activity.
> >
> > It seems like at bug, that the state of the resources displaymetrics
> > changes, sometimes maintaining custom density, sometimes reverting to
> > original density.
> >
> > Alex
> >
> > On Oct 26, 11:02 pm, arberg <[email protected]> wrote:
> >
> >
> >
> >
> >
> >
> >
> > > I would like tochangethe density configuration so that I can force a
> > > certain size. Specifically I want all 720p screens including xhigh-
> > > density phones AND large medium-density tablets to use the same
> > > bitmap, and to have the same text size relative to the screen
> > > resolution. The result will be that my game looks the same on tablets
> > > and on phones, without having to rework all my layouts and dimensions
> > > to large and xlarge screens, and without having to place the same high-
> > > res bitmaps in both the xhdpi folder and the xlarge (or sw720dp)-
> > > folder.
> >
> > > I have found one method of doing this. If I obtain aDisplayMetrics
> > > from the resources, andchangeits values then the resources decoded
> > > and inflated after the modification are decoded based on the new
> > > density value. Thus I can run the updateConfig() from early in my
> > > activity onCreate and then the activity is inflated with my custom
> > > density-value.
> >
> > >         private void updateConfig() {
> > >                 Resources resources = getResources();
> > >                DisplayMetricsdm = resources.getDisplayMetrics();
> > >                 final int minDimension = Math.min(dm.widthPixels,
> dm.heightPixels);
> > >                 float densityDevice = minDimension / 320f
> *DisplayMetrics.DENSITY_MEDIUM;
> > >                 // Avoid scaling bitmaps in resources further by
> setting density to
> > >                 // match the one of the levels exactly
> > >                 if (densityDevice >DisplayMetrics.DENSITY_XHIGH) {
> > >                         densityDevice =DisplayMetrics.DENSITY_XHIGH;
> > >                 } else if (densityDevice >DisplayMetrics.DENSITY_HIGH)
> {
> > >                         densityDevice =DisplayMetrics.DENSITY_HIGH;
> > >                 } else if (densityDevice
> >DisplayMetrics.DENSITY_MEDIUM) {
> > >                         densityDevice =DisplayMetrics.DENSITY_MEDIUM;
> > >                 } else {
> > >                         densityDevice =DisplayMetrics.DENSITY_LOW;
> > >                 }
> > >                 dm.scaledDensity = dm.density = densityDevice /
> (float)DisplayMetrics.DENSITY_DEFAULT;
> > >         dm.densityDpi = (int) densityDevice;
> > >         dm.xdpi = densityDevice;
> > >         dm.ydpi = densityDevice;
> > > // calling  resources.updateConfiguration here has no effect (it just
> > > sets the the same dm-values again in the dm-object), but maybe its
> > > more future proof?
> > >          resources.updateConfiguration(null, dm);
> > >         }
> >
> > > Updating the density with my updateConfig() method early in
> > > activity.onCreate affects all the resources I decode in onCreate, but
> > > when onCreate returns thedisplayMetricsreturns to the default
> > > values. So if I do a post to UI thread and inflates some more
> > > resources then I have to run updateConfig() again to apply my custom
> > > density. Had I done a Localechangeby invoking the
> > > resources.updateConfiguration, then the Locale-changewould have taken
> > > effect for the remainder of the activity.
> >
> > > I can see from the implemenation of resources.updateConfiguration (in
> > > Android-10) than it doesn't do much based on the givenDisplayMetrics,
> > > it doesn't even flush the bitmap cache, which could cause trouble if I
> > > had already decoded a bitmap with the original density information.
> >
> > > I would like a way tochangeautoscale by density of the decoded
> > > resources, for the remainder of my activity execution and preferable
> > > even for the entire application if possible.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

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

Reply via email to