Как предотвратить масштабирование размера экрана устройства Android в моем приложении?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как предотвратить масштабирование размера экрана устройства Android в моем приложении?

Сообщение Anonymous »


I'm developing an app with React Native for both iOS and Android, and I am trying to prevent device-specific scaling of the display in the app.

For text/font size scaling, putting the following code in the root-level App.js file solves the issue for both iOS and Android:

if (Text.defaultProps == null) { Text.defaultProps = {}; } Text.defaultProps.allowFontScaling = false; However, Android devices have the following Display size setting that is still being applied:


Изображение


I've tried (unsuccessfully) to piece together a variety of "solutions" to this issue that I've found in answers to the following questions:

Change the system display size programatically Android N

Disabling an app or activity zoom if Setting -> Display -> Display size changed to Large or small

how to prevent system font-size changing effects to android application?

I've often found references to a BaseActivity class that extends the Activity class. My understanding is that it is inside of that class where I would be writing a method (let's call it adjustDisplayScale) to make changes to the Configuration of the Context that I get from Resources, and that then I would be calling adjustDisplayScale within the onCreate() method after super.onCreate() in the MainApplication.java file.

As of now, in this directory I just have two files - MainApplication.java and MainActivity.java.

I've attempted creating a new Module and associated Package file to implement adjustDisplayScale following these instructions and it did not work: https://facebook.github.io/react-native/docs/text.html

I've attempted placing implementing the functionality of adjustDisplayScale within the onCreate() like this and it did not work:

@Override public void onCreate() { super.onCreate(); Context context = getApplicationContext(); Resources res = context.getResources(); Configuration configuration = res.getConfiguration(); configuration.fontScale = 1f; DisplayMetrics metrics = res.getDisplayMetrics(); WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(metrics); metrics.scaledDensity = 1f; configuration.densityDpi = (int) res.getDisplayMetrics().xdpi; context = context.createConfigurationContext(configuration); SoLoader.init(this, /* native exopackage */ false); } A potentially promising answer included the following:

protected override void AttachBaseContext(Context @base) { var configuration = new Configuration(@base.Resources.Configuration); configuration.FontScale = 1f; var config = Application.Context.CreateConfigurationContext(configuration); base.AttachBaseContext(config); } But when I tried to utilize this, I got errors about not recognizing the symbol @base.

Some background... I've done 99% of my work on this project in JavaScript / React Native and I have almost no understanding about things like Resources, Context, Configuration, and DisplayMetrics associated with Android development AND the last time I wrote code in Java was 10 years ago. I've spent a number of agonizing hours trying to figure this out and any help would be greatly appreciated.

ps. I am well-aware that accessibility settings exist for a good reason so please spare me the diatribe I've seen in so many "answers" on why I need to fix my UI to work with accessibility settings rather than disable them.


Источник: https://stackoverflow.com/questions/567 ... -in-my-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»