1. Java / Говнокод #12665

    +81

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    public String isThisScreenWithHdpiDensity() {
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        switch (metrics.densityDpi) {
            case DisplayMetrics.DENSITY_LOW:
                return "ldpi";
            case DisplayMetrics.DENSITY_MEDIUM:
                return "mdpi";
            case DisplayMetrics.DENSITY_HIGH:
                return "hdpi";
        }
        return "xhdpi";
    }
    
    ...
    if (isThisScreenWithHdpiDensity().equals("hdpi")) {
        lpTabPane.height = 65;
    }
    if (isThisScreenWithHdpiDensity().equals("mdpi")) {
        lpUpperPane.height = 70;
    }
    if (isThisScreenWithHdpiDensity().equals("ldpi")) {
        lpTabPane.height = 32;
    }
    if (isThisScreenWithHdpiDensity().equals("xhdpi")) {
    
    }

    Перегоним константу в стрингу, а потом проверим ее equals. Отлично!

    Запостил: danikula, 28 Февраля 2013

    Комментарии (10) RSS

    • Я так понимаю тут еще в куче будет нагажено DisplayMetrics'ами, что несколько неприятней
      Ответить
      • > что несколько неприятней
        Если один раз при отображении активити - да и хрен бы с ними. Тут непонятно зачем вообще все это затеяно. Например почему на mdpi меняется высота верхней панельки, а на остальных - другой.

        P.S. У меня возникает впечатление, что автор кода просто не дочитал главу в доке, описывающую девайсонезависимые единицы измерения, и из-за этого мучается с пикселями, а весь этот код вообще не нужен...
        Ответить
    • > String isThisScreenWithHdpiDensity
      isXXX возвращает String... WTF?
      Ответить
      • Шедевр
        Ответить
      • integer string? insensitive string? international string?

        Придумайте разумный вариант. Ну должно же быть хоть какое-то обоснование такому наименованию!
        Ответить
      • >isXXX
        iString. Как видим, возвращаемые строки заканчиваются на "i"
        Ответить
        • А почему не piString, ведь они заканчиваются на «pi», как и слово «enohpi»?
          Ответить
          • а если присмотреться, то даже dpiString. Но это оставим для последующих рефакторингов.
            Что за enohpi?
            Ответить
    • у нас в софтине нечто подобное используется, и в паре мест сравниваются строки вместо числовых идентификаторов.

      числовые идентификаторы сторого внутренние - пользователи и 3rd party soft их не должны знать.

      строки (часто просто одна буква) - это внешние, публичные идентификаторы, часто из какого стандарта, которые могут показыватся пользователю и третьему софту.

      классическией пример - деньги. внутренние числовые идентификаторы могут быть официально какими угодно (и система разрешает их менять). внешние публичные идентификаторы строго по ISO 4217 стандарту: EUR, USD, MYR, RUR, BYR и т.д.
      Ответить
      • Ну в вашем случае в этом есть смысл - интероперабельность с внешним миром. А в коде из топика я в преобразовании константы в строку никакого смысла не вижу. Он же ее никуда не передает, только сам юзает. С тем же успехом можно было и с самой константой сравнивать.
        Ответить

    Добавить комментарий