Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками - Программирование Android

10.09.2014, 04:21. Просмотров 535. Ответов 11
Метки нет (Все метки)

Нужно написать свой компонент для частого использования в дальнейшем - редактор с двумя кнопками и одной текстовой строкой описания. Многократно в ставлять в одну или несколько активити.

Возможно ли такое? В какую сторону смотреть? Имеет ли это отношение к фрагментам (пока не использовал - в учебниках "польза" только для разых поворотов)?

В идеале, хотелось бы глобально менять дизайн кнопок подменой XML и стелей, а не "попиксельной" перерисовкой и обработкой клавитуры (как в класическом написании своего компонента). Мог бы заполнять в каждый раз "тройки" элементов вручную и массово задавать имена, но хотелось бы обращаться к ним через один R.id. И не ошибаться в названиях случайно продублировав.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2014, 04:21     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками
Посмотрите здесь:
Random, как избавиться от частого выпадания одинаковых чисел? Android
Однократно ввести номер телефона, и в дальнейшем не выводить Android
Свой Браузер для андроида Android
Как сохранять информацию о пользователе и использовать её в дальнейшем уведомлении? Android
Firebase vs свой сервер для хранения БД Android
Загрузить данные один раз с MySQL таблицы в память приложения, и в дальнейшем использовать ее Android
Android Описание сложного элемента интерфейса для последующего его использования
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
10.09.2014, 09:49     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #2
Нарисуйте отдельный layout файл, потом inflate'ом создайте из него View в этом View можно будет найти кнопки например так:
Java
1
2
3
LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.custom_view, null);
        Button myBtn = view.findViewById(R.id.myBtn);
Если вынести это в отдельный метод, можно в качестве параметров указать, например, строки-названия кнопок и в методе их подставить к кнопкам, затем вернуть получившийся View. Как то так:
Java
1
2
3
4
5
6
7
8
9
10
11
public View getMyCutomView(String btn1Tittle, String btn2Tittle){
        
        View view = View.inflate(context, R.layout.myView, null);
        Button btn1 = view.findViewById(R.id.btn1);
        Button btn2 = view.findViewById(R.id.btn2);
        btn1.setText(btn1Tittle);
        btn2.setText(btn2Tittle);
        return view;
        
        
    }
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
11.09.2014, 09:57  [ТС]     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #3
Запутался... Попробовал создать свой компонент - наследник от View. Воткнул его в главное XML активити. Создал простой XML (custom_view) с двумя кнопками.
Получилось такое:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class view_test extends View {
 
    public View view;
    public Button myBtn;
 
    public void Init(Context context) {
        LayoutInflater inflater = LayoutInflater.from(context);
        view = inflater.inflate(R.layout.custom_view, null);
        myBtn = (Button) view.findViewById(R.id.bt_test_1);
        myBtn.setText("HELLOW!");
    }
 
    public view_test(Context context) {
        super(context);
        Init(context);
    }
 
    public view_test(Context context, AttributeSet attrs) {
        super(context, attrs);
        Init(context);
    }
 
}


Не вылетает, но и не работает. Место с компонентом в активити остается пустым... Что я упустил?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
11.09.2014, 10:20     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #4
Tester64, а зачем класс?) Сделайте простой метод, возвращающий View. А, не досмотрел, это кастомный View. Тут не нужно объявлять View, нужно как то так:
Java
1
2
3
4
//вместо
view = inflater.inflate.....
//вот так
this = inflater.inflate.....
Добавлено через 4 минуты
Но я обычно так не заморачиваюсь, просто делаю метод и все, хотя правильнее конечно как у вас)
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
11.09.2014, 10:29     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #5
Tester64, а разве не .inflate(.., this); ?

Добавлено через 23 секунды
Цитата Сообщение от Tester64 Посмотреть сообщение
extends View
ViewGroup наверное
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
11.09.2014, 10:30     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #6
YuraAAA, Второй параметр ведь родительская вьюшка? Как может быть она сама себе родителем?
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
11.09.2014, 10:39     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
//вот так
this = inflater.inflate.....
эм, точно не так. Не можем мы менять self-link.
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Второй параметр ведь родительская вьюшка? Как может быть она сама себе родителем?
а Вы попробуйте
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
11.09.2014, 16:26  [ТС]     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #8
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Но я обычно так не заморачиваюсь, просто делаю метод и все, хотя правильнее конечно как у вас)
Я не против методом, но...
Мне надо МАССОВО вставить в одну форму.
Смотрел в сторону include в XML. Правда еще не тестил, но боюсь будет сбой на одинаковых android:id="@+id/bt_test_1".

Конечная цель - создать компонент типа 1С-совского редактора числа - с кнопкой очистки, вызова калькулятора и подсказки. Этот компонент будет массово произвольно закидываться на разные формы "анкет опросников". Назначение и количество компонент прийдется часто менять. Заморачиваться с дизайном каждой формы и отслеживанием всех имен и зависимостей, вместо 10минутной работы не охота... Задавать надо лишь id для всего компонента, но иметь доступ к его кнопкам и редактору (возможно даже переопределить)!

Перечитал на хабре статьи о создании компонентов, но там все на основе подмены draw. Не хочу рисовать! и подделывать редактор

Цитата Сообщение от YuraAAA Посмотреть сообщение
а Вы попробуйте
Пробовал: view = inflater.inflate(R.layout.custom_view, this); Конечно не работает! Пробовал получить root вместо this: android.view.ViewGroup root = this; Тоже ошибка!

Может где-нибудь видели подобный компонент на github-ах? Мне "зацепиться" незачто... Основу не понимаю!
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
11.09.2014, 16:31     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #9
Цитата Сообщение от Tester64 Посмотреть сообщение
Я не против методом, но...
Мне надо МАССОВО вставить в одну форму.
Дак делайте в коде хоть в цикле
Java
1
2
3
4
View[] view = new View[100];
for(int i = 0; i < 100; i++){
    view[i] = getMyCustomView(tittle1,tittle2);
}
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
11.09.2014, 17:22  [ТС]     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #10
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Дак делайте в коде хоть в цикле
Вы не поняли! Вставлять я буду в ручную! Управлять размерами и взаиморазмещением. Втраивать в лайауты или даже в закладки. Задавать для каждого компонента лишь id для обращения из функций.
Но если это будет 3-4 компонента вместо одного, мороки будет на порядок больше. Прийдется следить за уникальностью кода кажного встроенного компонента. Правильно встраивать реакторы с одного на другой. Легко запутаться. Легко опечататься. Контроля нет! Опять же тяжело быстро переименовать задав разумное название вместо номера.

В делфи можно было создавать компоненты, которые появлялись в репозитории. В студии подобное возможно? Что-бы с превьювом. Пока получил черный(прозрачный?) компонент на черном фоне. Что за компонент там лежит могу увидеть лишь читая XML.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
11.09.2014, 17:27     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #11
Цитата Сообщение от Tester64 Посмотреть сообщение
В студии подобное возможно? Что-бы с превьювом
Возможно, вы как раз так и делали. Но вот я не сталкивался с несколькими View в одном, потому подсказать не могу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2014, 20:24     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками
Еще ссылки по теме:
Посоветуйте компонент для графика Android
Android Как правильно присвоить переменным данные для использования с другом методе?
Как правильно делать из своего проекта jar для использования в другом проекте Android
Android На каждой странице ViewPager'а должен отображаться свой ListFragment данные для которого берутся из базы
Android Компонент для отображения лога (аналог memo в Windows)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
11.09.2014, 20:24  [ТС]     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками #12
Кажется нащупал решение... сейчас "тестю"
Полноценный вьюв не получился - сделаю класс "присоску" к инклюду. id заменю на тег. Тогда может смогу находить элементы по тегу и не бояться повторов... Инклюд виден в превьюве - помогает составлять адектватный дизайн еще до запуска. Осталось протестить на нескольких редакторах с поиском по номерам тегов...

Добавлено через 1 час 36 минут
Ура! Схема сработала! Остальное - дело техники...
Всем спасибо! Вопрос закрываю!

Хотя обидно что не получилось свой вьюв написать...
Yandex
Объявления
11.09.2014, 20:24     Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru