В этой итерации мы улучшаем внешний вид приложения, изменяя эталонную страницу представления MVC по умолчанию и каскадную таблицу стилей ASP.NET MVC.
Создание приложения MVC ASP.NET управления контактами (C#)
В этой серии руководств мы создадим все приложение «Управление контактами» с начала до конца. Приложение Диспетчера контактов позволяет хранить контактные данные — имена, номера телефонов и адреса электронной почты — для списка людей.
Универсальный способ настройки внешнего вида WinForms приложения (на примере FAQ.Net)
После размещения первой статьи о своем приложении FAQ.Net (программа заметок под Windows), появились первые пользователи, для которых хочется дальше развивать свою программу для заметок.
Чтобы повысить интерес у пользователей, возникла идея повысить его привлекательность за счет настройки цвета и шрифта.
Требования к настройке внешнего вида приложения
- хранить и загружать свойства отдельных компонентов в XML-файле
- пользователь должен иметь простой инструмент по настройке внешнего вида
- список настраиваемых компонентов должен очень просто расширяться (одной строкой кода)
- при изменении значения свойства пользователь должен сразу видеть изменения на форме
- должна быть кнопка отмены, которая позволит вернуть все изменения назад
Результат работы
Окно настройки внешнего вида:
Уроки создания сайтов. Урок 2. Внешний вид программы Siteedit/
До и после настроек внешнего вида:
Для решения задачи необходимо
- использовать компонент PropertyGridEx, для отображения и изменения свойств компонентов
- создать класс CustomDesignControl для удобства хранения свойств в XML
- создать форму MainForm, на которой будем изменять внешний вид
- создать форму AppSettingsForm, на которой будем настраивать внешний вид MainForm
- создать класс SettingsXml для удобства работы с XML
Функция отмены изменений внешнего вида
Чтобы реализовать отмену изменений внешнего вида (пункт 5 из требований), решил найти универсальный способ клонирования свойств компонентов которые будут создаваться в памяти и заменять отображаемые компоненты.
public static class ControlExtensions < public static T Clone(T controlToClone) where T : Control < PropertyInfo[] controlProperties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); T instance = Activator.CreateInstance(); RichTextBox rtb = new RichTextBox(); foreach (PropertyInfo propInfo in controlProperties) < if (propInfo.Name == «Parent») continue; if (propInfo.CanWrite) < if (propInfo.Name != «WindowTarget») < propInfo.SetValue(instance, propInfo.GetValue(controlToClone, null), null); >> > return instance; >
Скопировал код, убрал лишние свойства, которые не нужно сохранять, оставив цвета и шрифт.
Урок 2. Внешний вид программы. Создание нового проекта.
После проверки работы кода, сразу выяснились недостатки данного способа:
- используется приведение любого контрола к классу Control, а это означает, что половину свойств можно потерять (например, компонент DataGridView унаследован от класса Control, но имеет свой дополнительный набор свойств)
- при клонировании компонента некоторые свойства (например: цвет шрифта внутри ячейки DataGridView) не клонируются, а создают ссылки на клонируемый компонент (возможно, это потому, что используется свойство со своими внутренними свойствами и их нужно как-то по-другому обрабатывать).
DataGridView dgvClone = new DataGridView();
Безрезультатно, компонент не смог вернуть изменения обратно.
Попробовал тогда само свойство создать оператором new и задать ему значение методом SetValue:
propInfo.SetValue(_controls[i], propInfo.GetValue(_controlsBeforeChange[i], null), null);
И этот способ не дал результата. При изменении значения свойства в одном компоненте, оно автоматически обновляется и в клонируемом компоненте.
Другие способы я больше не искал и сделал возврат изменений обычным перезапуском приложения с возможностью сохранения рабочего документа или отмены перезапуска. Это позволило значительно съэкономить память приложения, так как не нужно создавать клоны объектов.
Пример приложения с настройкой внешнего вида
На всякий случай, подготовил готовый код, на котором желающие смогут проверить и возможно доработать функцию отмены изменений внешнего вида без перезагрузки приложения и рассказать нам о проблеме в комментариях.
Нужно добиться, чтобы при нажатии на кнопку «Автотест» на компоненте DataGridView был серый фон и шрифт ячеек был мелкий.
Скачать Windows приложение FAQ.Net (бесплатно):
Вывод
Надеюсь, что во многих WinForms приложениях, благодаря этой статье, у конечного пользователя появится возможность настраивать интерфейс на свой вкус и цвет.
Источник: habr.com
Android. Меняем внешний вид приложения с помощью тем
Писать все на одно лицо приложение не очень то и хочется, хочется сделать уникально красивое и удобное, так чтобы с одного вида хотелось его использовать. Именно об этом и пойдет речь в данном уроке, а именно о создании своего стиля для приложения.
Шаг 1: Создание нового проекта
Создаем новое приложение в Intellij IDEA -> Android Module 4.3
Шаг 2: Меняем темную тему на светлую
Теперь давайте разберемся, что такое Темы.
Темы – это коллекция готовых стилей для приведения вашего приложения к одному виду с Android. Иными словами есть набор готовых тем которые вы можете применить к своему приложению.
Как же это сделать? Первое что можно сделать это поменять к примеру темную тему на светлую. Сделать это можно добавив следующий атрибут в AndroidManifest, изначально он выглядит так:
По умолчанию у нас стоит темная тема, мы сейчас поставим светлую, для это добавим в AndroidManifest следующую строку:
В строке 10 мы говорим, что MainActivity будет иметь светлое оформление, вот такое:
И теперь если добавить кнопку то выглядеть она будет так:
Шаг 3: Создаем новое Activity
Теперь создадим новый layout:
Выглядеть новый layout будет так:
Теперь создадим новое Activity LastActivity:
И в AndroidManifest незабываем добавлять новые activity:
Шаг 4: Делаем переход на новое Activity
Теперь на добавленную кнопку на main.xml добавим обработчик на клик:
и укажем кнопки чтобы при клике выполнялся goToLastActivity() метод:
Теперь при клике на кнопку New Theme будет открываться новое Activity.
Шаг 5: Делаем с Activity Dialog
Давайте изменим новому Activity lastactivity.xml вид диалогового окна.
Для этого зайдите в AndroidManifest и в для нового Activity, а именно LastActivity установите следующую тему:
После этого мы получим следующий вид данного activity:
Шаг 6: Меняем иконку приложения
Для этого копируем новую иконку в папки drawable-hdpi, drawable-ldpi, drawable-mdpi, drawable-xhdpi для того чтобы эта иконка отображалась на любом размере дисплея.
Я взял такую картинку logo.png – 150х150:
Дальше в AndroidManifest нужно изменить эту строку, где вы должны указать имя вашей картинки:
И вот что у нас получилось:
Источник: devcolibri.com