Создание и управление интерфейсом на Android с Python. Часть 2
Доброго времени суток!
Хотелось бы продолжить разговор о программировании и управлении элементами интерфейса на Андроид средствами Питон. В этой статье я не буду описывать то, о чем уже говорилось в предыдущей. Для тех, кто читает эту статью впервые, будет полезно ознакомится с
Сегодня мы попробуем написать простенький пример текстового редактора исключительно в целях ознакомления. С его помощью мы сможем вводить и сохранять текст, менять цвет текстового поля, размер и цвет шрифта.
Вот, что у нас должно получится:
Итак, не будем тянуть Андроид за антенны, а сразу начнем! Вот наш xml:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#cccccc"
android:orientation="vertical"
xmlns:android="https://schemas.android.com/apk/res/android">
<TextView
android:layout_width="fill_parent"
android:layout_height="40dp"
android:text="Demo Text Editor"
android:gravity="center"
android:textColor="#000000"/>
<EditText
android:id="@+id/edit_txt"
android:layout_width = "fill_parent"
android:layout_height="fill_parent"
android:text = "
Пример программы
Текстовый Редактор
для Android
Демонстрационная программа, реализует меню, ввод, правку и сохранение текста. Также представленны функции для работы с цветом текстового поля, размером и стилем шрифта
Автор: Иванов Юрий (HeaTTheatR)
Тест: HTC WildFire
Специально для сайта dimonvideo.ru"
android:textSize="20dp"
android:background="#000000"
android:textColor="#ffffff"
android:gravity="center"
/>
</LinearLayout>
Сценарий на Python
# demo.py
# -*- coding: utf-8 -*-
import os
import sys
import droidInterface
# флаг говорит, что текстовое поле
# не очищено от информационной заставики
edit_flag = True
droid = droidInterface.droid
# имена иконок оставляю пустыни
# так как у меня их всего шесть
# и ни одна по своему значению
# не подходит к нашим пунктам меню
# поэтому пункты будут содержать только названия
droidInterface.set_menu([("Цвет фона", ""), ("Цвет шрифта", ""), ("Размер шрифта", ""),
("Сохранить текст", ""), ("Выход", "")])
droid.fullShow(open("%s/res/layout/main.xml" %(os.path.dirname(__file__))).read())
#______________________
#
# ФУНКЦИОНАЛ ПРОГРАММЫ
#______________________
#
# поскольку вызовы функции по событиям
# "Цвет фона-Цвет шрифта-Размер шрифта"
# отличаются только входными параметрами
# я не стал писать три идентичные функции
# и обошелся одной
def setPropertyMainEditor(list_items=[], list_values=[], property="", id="", title="", toast=""):
"""
Функция изменяет свойства виджетов графического интерфейса.
аргумент list_items - это список пунктов в окошке для выбора пользователем нужного значения;
аргумент list_values - это значения для свойств виджетов:
цвета фона, цвет шрифта, размер шрифта
аргумент property - свойство виджета: background, textColor, textSize
аргумент id - id виджета, в общем случае это "edit_txt"
"""
try:
# создаем окно со списком для выбора одного элемента
result = droidInterface.selection_list(selection_list=list_items, title=title)
if result != None:
droid.fullSetProperty(id, property, list_values[result])
droidInterface.note(toast)
except Exception, exc:
droidInterface.note(str(exc))
while True:
signal = droid.eventWait().result
# проверяем тип нажатия на принадлежность к событиям меню
if signal["name"] == u"Выход":
sys.exit()
elif signal["name"] == u"Цвет фона":
setPropertyMainEditor(list_items=["Белый", "Серый",
"Красный", "Зеленый"],
list_values=["#ffffff", "#999999",
"#ff0033", "#33cc00"],
property="background",
id="edit_txt",
title="Выберете цвет:",
toast="Цвет установлен")
elif signal["name"] == u"Цвет шрифта":
setPropertyMainEditor(list_items=["Белый", "Серый",
"Красный", "Зеленый"],
list_values=["#ffffff", "#999999",
"#ff0033", "#33cc00"],
property="textColor",
id="edit_txt",
title="Выберете цвет:",
toast="Цвет установлен!")
elif signal["name"] == u"Размер шрифта":
setPropertyMainEditor(list_items=["10dp", "20dp", "30dp", "40dp"],
list_values=["10dp", "20dp", "30dp", "40dp"],
property="textSize", id="edit_txt",
title="Размер шрифта:", toast="Размер установлен!")
elif signal["name"] == u"Сохранить текст":
# функция возвращает словарь с информацией о виджете
# нас интересует значение с ключом "name" - содержимое виджета
# функция в качестве аргумента принимает id виджета
text = droid.fullQueryDetail("edit_txt").result
file_name = droidInterface.input_text("Сохранить", "Имя файла:")
if file_name != None:
open("%s/%s%s" %(os.path.dirname(__file__), file_name, ".txt"), "w").write(text["text"].encode("u8"))
droidInterface.note("Файл сохранен!")
# нажат один из виджетов
elif signal["name"] == "click":
# выясняем по id какой именно
if signal["data"]["id"] == "edit_txt":
# этот флаг описан в самом начале
if edit_flag:
# очищаем и выравниваем ввод текста по левому краю
droid.fullSetProperty("edit_txt", "text", "")
droid.fullSetProperty("edit_txt", "gravity", "left")
# устанавливаем новое значение
# чтобы впоследствии
# можно было теребить пальцем по экрану
# без последующей его очистки
edit_flag = False
На этом все.
Автор Иванов Юрий (HeaTTheatR)
Тест аттача...
Прикрепленный файл:
0 ответить