Совместимость Android с несколькими устройствами

#java #android #xml

#java #Android #xml

Вопрос:

Хорошо, итак, я знаю, что если я хочу, чтобы изображения, текст и кнопки не были слишком сжаты на крошечных устройствах и не были совсем крошечными на гигантских планшетах, я могу создавать файлы ресурсов, которые различны для каждого устройства и каждой ориентации.

Есть ли более краткий способ сделать это? Т.е. Есть ли способ создать единую папку со всеми моими ресурсами, умноженную на «коэффициент масштабирования экрана», чтобы каждый раз, когда я хочу редактировать, мне не нужно возвращаться и менять 30 разных ресурсов, а затем проверять, чтобы сделатьуверены, что все они подходят?

Спасибо

Комментарии:

1. Я считаю, что до тех пор, пока вы используете макеты разумно, все масштабируется автоматически. Проблема в том, что он выглядит неровным, если вы увеличиваете изображения с низким разрешением, и может быть слишком большим для обработки машиной, если вы уменьшаете высокое разрешение

Ответ №1:

Вам не нужно создавать разные размеры для каждого виджета.

Для Button , TextView , ImageView (и любого другого Views ) вы можете установить свойства android:layout_width и android:layout_height в dp (пикселы, не зависящие от плотности).

Это устройство, как мы можем догадаться из его названия, не зависит от плотности экрана. Это означает, что результат будет одинаковым на каждом экране.

Единственное, что вам, возможно, придется создавать в разных размерах, — это значки. Для этого вы должны следовать правилам, предоставляемым Android в отношении соотношения между различными плотностями. Для получения дополнительной информации вы можете взглянуть на это.

Вы также можете создать свой значок в XML-файле. Таким образом, он будет автоматически соответствовать каждому экрану. Проблема в том, что создавать сложные значки может быть очень сложно.

Ответ №2:

На самом деле эффективно иметь несколько изображений для каждого устройства, это не то же самое, что загружать 500 пикселей для устройства низкого уровня, чем загружать 100 пикселей, которые вам действительно нужны. поэтому я предлагаю использовать scaleType в ImageView и настроить свой пользовательский интерфейс, используя размеры внутри android_layout_width и android:layout_height пример: android:layout_width="@dimen/size" и вы можете использовать разные размеры в зависимости от вашего устройства. другой способ — поместить изображения под drawable-nodpi и масштабировать во время выполнения, чтобы это всегда исправляло изображение так, как вам нужно

 public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        // Calculate the largest inSampleSize value that is a power of 2 and keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight
                amp;amp; (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}
  

вы можете посмотреть в руководстве разработчика Android для получения дополнительной помощи в эффективном масштабировании растровых изображений
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html