2015-10-01 4 views
1

Есть ли какие-либо подводные камни для определения цветов как постоянные константы, так и их статические элементы, потянув их от xml каждый раз, когда они требуются?Определение цветовых констант в файле Java, а не xml

Например, скажем, я определяю класс под названием AppColors:

public final class AppColors { 

    private AppColors() { throw new AssertionError(); } 

    public static final int COLOR_RED_500 = 0xFFF44336; 

} 

И доступ цвета с AppColors.COLOR_RED_500, в то время как обычный маршрут getResources().getColor(R.color.red_500).

Помимо того, что цвет, вероятно, необходимо будет определить дважды, один раз в xml для макета/тем и снова в коде, определение цветов таким образом будет иметь то преимущество, что не требует повторных вызовов getResources() и необходимости передать Context аргументы методам и конструкторам классов, которые не наследуются от класса Context.

+0

Фактически изготовление вызов 'getResources()' требует 'context' конкретного класса, поэтому, возможно, обращение к цвету с помощью' getresources(). getColor() 'немного тяжело, чем доступ к нему как' YourColorClass.colorName', но время или ресурсы, было бы незначительным. – Apurva

ответ

0

Лучше всего проверить случай, который соответствует вашим потребностям, но вот некоторые аргументы против.

  1. Вы указали главный аргумент в своем вопросе об определении его дважды.
  2. Вы можете изменить цвет в различных значениях файлов , если это необходимо, например, различные цвета для различных языка, ориентации экрана и т.д. в
  3. Вы можете использовать цвет в XMLs макета.

Чтобы узнать больше на эту тему, прочитайте это: http://developer.android.com/guide/topics/resources/overview.html.

+0

Я не думал о преимуществах создания разных 'color'' xml' файлов для разных конфигураций (ориентация и т. Д.). Я думаю, что ваш пост охватывает основные плюсы и минусы. – PPartisan

1

На самом деле для этого не существует определенного соглашения.


Что наиболее важно в этом случае является

  • ясность
  • производительность
  • масштабируемость

Если, в вашем случае, это удалить декларации дублирует и делает код более ясным , не влияя на производительность, да, вы можете и ДОЛЖНЫ использовать его.

Но обратите внимание: это не является общим правилом, вы должны анализируем каждый случай в отдельности и решить, с умом, для остальных случаях используйте AppColors класс может создать двуличности или проблемы производительности (если много запросов), вместо того, чтобы использовать таблицу базы данных.

+0

Вы говорили, что проблемы с производительностью могут возникать из-за того, что многие запросы к константам возникают? Можете ли вы расширить это, пожалуйста? – PPartisan

+0

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

+0

Обычно, если мне приходится много раз обращаться к таблице БД, я заполняю объекты Java, чтобы увеличить производительность и передачу данных за счет удаленных подключений. –

1

Нет. Его полностью зависит от вас, где вы определяете цвета. Преимущество сохранения их в xml заключается в том, что вы можете использовать эти цвета в своих макетах xml.

Например:

<TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@color/color_red_500" /> 

Если вы сыты проезжавшие Context для извлечения цвета, я хотел бы предложить вам иметь статический одноэлементный экземпляр для Application класса

Например:

public class MyApplication extends Application { 
    private static MyApplication instance; 

    public static MyApplication getInstance() { 
     return instance; 
    } 

    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
    } 
} 

Затем используйте его как MyApplication.getInstance().getResources().getColor(R.color.red_500);

+0

Хорошее предложение, и да, часть проблемы на самом деле состоит из кода, необходимого для передачи «Контекста», затем хранения каждого цвета в переменной и т. Д. Доступ к экземпляру таким образом ускорит процесс. – PPartisan

 Смежные вопросы

  • Нет связанных вопросов^_^