Недавно я тоже столкнулся с этой проблемой. Наш пользовательский интерфейс плохо масштабировался на телефонах с ограниченными размерами экрана, и изменение всего пользовательского интерфейса в случае, если пользователь установил для своих параметров доступности значение «Огромный», казалось глупым.
Я обнаружил, что этот вопрос на StackOverflow самый полезный.
Что я сделал, так это поместил следующий код ниже в свой BaseActivity (класс Activity, из которого распространяются все мои действия)
public void adjustFontScale(Configuration configuration) {
if (configuration.fontScale > 1.30) {
LogUtil.log(LogUtil.WARN, TAG, "fontScale=" + configuration.fontScale); //Custom Log class, you can use Log.w
LogUtil.log(LogUtil.WARN, TAG, "font too big. scale down..."); //Custom Log class, you can use Log.w
configuration.fontScale = 1.30f;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
}
И назвал это сразу после моего super.onCreate()
вот так
adjustFontScale(getResources().getConfiguration());
Этот код определяет, установил ли пользователь масштаб шрифта в настройках специальных возможностей на нечто большее, чем 1.30f (1.30f — это Large на Note 5, но, вероятно, немного отличается от устройства к устройству). Если пользователь установил слишком большой шрифт (Extra Large, Huge...), мы масштабируем приложение только до размера Large.
Это позволяет вашему приложению масштабироваться в соответствии с предпочтениями пользователя (до определенной степени), не искажая ваш пользовательский интерфейс. Надеюсь, это поможет другим. Удачи в масштабировании!
Другие советы
Если вы хотите, чтобы определенные макеты масштабировались с вашими шрифтами (скажем... RelativeLayout
, который вы используете в качестве фона для ваших шрифтов), вы можете установить их ширину/высоту с помощью sp вместо классического dp. Когда пользователь изменяет размер своего шрифта, макет будет меняться соответственно шрифтам в вашем приложении. Хороший маленький трюк.
person
welshk91
schedule
28.09.2015