Сетка по сравнению с холстом

Я предлагаю иметь где-то статическое логическое значение, указывающее, регистрировать ли или нет:

class MyDebug {
  static final boolean LOG = true;
}

Тогда, куда бы вы ни захотели войти в свой код, просто сделайте это:

if (MyDebug.LOG) {
  if (condition) Log.i(...);
}

Сейчас когда вы устанавливаете MyDebug.LOG в false, компилятор удаляет весь код внутри таких проверок (так как это статический финал, он знает, что во время компиляции код не используется.)

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

static final String TAG = "WindowManager";
static final boolean DEBUG = false;
static final boolean DEBUG_FOCUS = false;
static final boolean DEBUG_ANIM = false;
static final boolean DEBUG_LAYOUT = false;
static final boolean DEBUG_RESIZE = false;
static final boolean DEBUG_LAYERS = false;
static final boolean DEBUG_INPUT = false;
static final boolean DEBUG_INPUT_METHOD = false;
static final boolean DEBUG_VISIBILITY = false;
static final boolean DEBUG_WINDOW_MOVEMENT = false;
static final boolean DEBUG_ORIENTATION = false;
static final boolean DEBUG_APP_TRANSITIONS = false;
static final boolean DEBUG_STARTING_WINDOW = false;
static final boolean DEBUG_REORDER = false;
static final boolean DEBUG_WALLPAPER = false;
static final boolean SHOW_TRANSACTIONS = false;
static final boolean HIDE_STACK_CRAWLS = true;
static final boolean MEASURE_LATENCY = false;

с соответствующим кодом, например:

    if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT) Log.v(
        TAG, "Adding window " + window + " at "
        + (i+1) + " of " + mWindows.size() + " (after " + pos + ")");
11
задан Andrija 2 July 2009 в 18:18
поделиться

4 ответа

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

16
ответ дан 3 December 2019 в 05:35
поделиться

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

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

Из WPF Unleashed Адама Натана (стр. 168):

Имитация холста с сеткой Если вы оставите Grid с одной строкой и столбцом и установите HorizontalAlignment и Вертикальное выравнивание всех дочерних элементов по значениям, отличным от Stretch, дочерние элементы добавляются к единственная ячейка, как Canvas. Установка HorizontalAlignment влево и VerticalAlignment to Top аналогичен установке Canvas.Left и Canvas.Top на 0. Установка HorizontalAlignment to Right и VerticalAlignment to Bottom аналогичен настройке Canvas.Right и Canvas.Bottom равны 0. Кроме того, применяя значения Margin к каждому может дать вам тот же эффект, что и установка прикрепленных свойств Canvas на те же значения.

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

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

Я лично использую сетки. Может потребоваться немного больше работы, чтобы разложить вещи на уровне пикселей, но в течение 5% необходимого времени это того стоит, чтобы абстрагироваться от многих хлопот. Это также удобно, когда есть необходимость изменять размер строк и столбцов на лету, GridSplitter делает это несложно.

3
ответ дан 3 December 2019 в 05:35
поделиться

Определенно Сетки кажутся тем, что вам нужно для ваших требований.

Я бы сравнил сетки с таблицами в html (очень полезными при правильном использовании), в то время как Canvas больше похож на div. Разница в том, что таблицы должны быть в HTML, а также в таблицах div и Canvas.

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

2
ответ дан 3 December 2019 в 05:35
поделиться

Несмотря на то, что вы не можете использовать VS Designer, вы все равно можете использовать визуальный конструктор XAML для создания / редактирования содержимого вашей сетки.

Одним из основных UX-преимуществ WPF / SL / XAML является возможность «жидкого» макета в стиле HTML. Даже несмотря на то, что он может вам не понадобиться с вашим текущим дизайном, это явно будущее, и его стоит научиться тонкости.

Посмотрите отличный список доступных редакторов XAML Роба Рельеа

0
ответ дан 3 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: