категории | RSS

Создание и управление интерфейсом на Android с Python. Часть 2.

Создание и управление интерфейсом на Android с Python. Часть 2



Доброго времени суток!
Хотелось бы продолжить разговор о программировании и управлении элементами интерфейса на Андроид средствами Питон. В этой статье я не буду описывать то, о чем уже говорилось в предыдущей. Для тех, кто читает эту статью впервые, будет полезно ознакомится с Создание и управление интерфейсом на Android с Python. Часть 1. А для работы в этот раз нам с вами понадобится вот это версия оболочки droidinterface. Модули для Python на Android находятся по пути /sdcard/com.googlecode.pythonforandroid/extras/python. Также я буду придерживаться стандартной архитектуры расположения папок и файлов в приложении (см. первую часть статьи).

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

Вот, что у нас должно получится:



Итак, не будем тянуть Андроид за антенны, а сразу начнем! Вот наш 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)


HeaTTheatR
2013-02-14T08:38:36Z
Здесь находятся
всего 0. За сутки здесь было 0 человек

Комментарии 9

#9   HeaTTheatR    

Тест аттача...

Прикрепленный файл:

Внимание! У вас нет прав для просмотра скрытого текста.
(1.08 Kb)


0 ответить

#9   HeaTTheatR    

Тестовый комментарий...
-------------
Добавлено в 21.50: Тестовое сообщение...


0 ответить

#9   HeaTTheatR    

dimy44,
Не скажи, я когда редактировал изображение для статей, пользовался, не поверишь, ImageDesinger на Symbian. Потому что на Java НЕТ нормального редактора изображений. Как, впрочем, и видео.
-------------
Добавлено в 17.15: По ходу комментарий случайно удалил...


0 ответить

#9   dimy44    

Согласен, чтоб смотивировать обычного пользователя установить питон на андроид, нужно создать такое приложение, аналогов которого нет на яве. Ну скажем типа как мобилхекс на симбе не имеет аналогов на спп. А это нереально. Так что это для личного пользования, под личные нужды.


0 ответить

#9   Zaterehniy    

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


0 ответить

#9   HeaTTheatR    

Не знаю, что такое 'га' на Симбе, но SL4A, это оболочка для запуска различных сценариев, и да, ее придется ставить.


0 ответить

#9   Alttrueeast    

я так понимаю что как и га симбе обязательно придется sl4a ставить, а "поверх" программы и скрипты?


0 ответить

#9   HeaTTheatR    

Обновление от 14/02/2013 11:56:14============Причина редактирования: После последнего редактирования испортилось форматирование. Исправил.


* редактировал(а) HeaTTheatR 12:07 14 фев 2013

0 ответить

#9   dimy44    

Отступы видимо после редактирования посъедало... Статья понравилась.


0 ответить

Напомнить пароль