Урок 8. Работаем с элементами экрана из кода

Обсуждение уроков
Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Finch » 01 авг 2012, 22:52

Jack_killer писал(а):Маленький вопрос:
В уроке вы сделали кнопку не активной, а есть ли у EditText какой нибудь метод, чтобы запретить редактирование?

Код: Выделить всё

Edittext.setEnabled(false);
если те6е нужно только ото6разить текст то используй TextView
CEO of a company R.id.team

Jack_killer
Сообщения: 21
Зарегистрирован: 30 янв 2012, 21:15

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Jack_killer » 01 авг 2012, 23:23

У меня активити предназначенное как для заполнения данными. так и для редактирования данных, состоит из нескольких ЭдитТекстов. и если активити вызывается для заполнени, то все нормально, а вот если для редактирования, то мне нужно чтобы одно поле было с запретом для редактирования, так как в нем уникальные данные.

di16
Сообщения: 6
Зарегистрирован: 13 сен 2012, 14:26

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение di16 » 22 сен 2012, 13:04

здравствуйте, у меня такой вопрос... у меня есть два EditText... как так сделать, чтобы при нажатии на Enter фокус с первого EditText переходил на второй... а со второго на кнопку... так можно сделать?
Изображение

dil_android
Сообщения: 103
Зарегистрирован: 10 сен 2012, 11:58

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение dil_android » 22 сен 2012, 18:04

Недавно столкнулся с этой проблемой, поэтому могу посоветовать посмотреть isFocused(), clearFocus(), requestFocus(), isFocusable().

Аватара пользователя
kiborg
Сообщения: 6
Зарегистрирован: 29 сен 2012, 14:42

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение kiborg » 29 сен 2012, 14:53

Вот я чё понять не могу. Почему когда просто кидаю какой-нибудь view из палитры, например кнопку. То всё работает. Программа запускается, кнопку отображает. Можно даже реакцию на кнопку сделать.
А как только написал строку:

Код: Выделить всё

Button myBtn = (Button) findViewById(R.id.myBtn);
Так сразу проекту понадобился

Код: Выделить всё

import android.widget.Button;
А до этого он как тогда работал с этой кнопкой? :?:

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение math64 » 29 сен 2012, 16:12

А можешь import не писать.

Код: Выделить всё

android.widget.Button myBtn = (android.widget.Button) findViewById(R.id.myBtn);
import всего лишь позволяет писать Button вместо android.widget.Button.
читайте учебник по java

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение rezak90 » 29 сен 2012, 16:43

а ещё по лентяйски можешь вот так:

Код: Выделить всё

import android.widget.*;
тогда импортируются все виджеты. Но так лучше не делать =)
R.id.team
Политика на форуме запрещена

Аватара пользователя
kiborg
Сообщения: 6
Зарегистрирован: 29 сен 2012, 14:42

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение kiborg » 30 сен 2012, 10:08

Я не про то. Мне не трудно строку написать, и не жалко.
Я просто наверно мыслю в концепции С++ программирования.
Но я думаю раз уж в программе есть виджет - кнопка. И она даже работает. Значит она уже подключила все необходимые библиотеки для своей работы, иначе как она работает?
А получается она вроде бы есть, но как только я к ней начинаю обращаться из кода программы, то мне сразу типа, а что это такое за объект?

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Finch » 30 сен 2012, 11:55

kiborg, всё правильно. У те6я есть xml в котором есть какие-то элементы(виджеты), он ото6ражается как View в твоей Activity, что6ы ра6отать с этими элементами те6е нужно о6ратится к вьюхе и "найти их там".

Код: Выделить всё

Button myBtn = (Button) findViewById(R.id.myBtn);
Button - класс
myBtn - название экземпляра класса
(Button) - приведение типов(Java строго типизированный язык)
findViewById - ищем в твоей вьюхе объект по айдишнику
R.id.myBtn - адрес в памяти
CEO of a company R.id.team

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение math64 » 01 окт 2012, 07:39

В С++ аналогично. import соответствует не #include, а using.
Подключение необходимых файлов происходит автоматически (для этого и введено правило - файл должен называться также, как и класс находящийся в нём).
ЗЫ: В С# вместо import используется use

Аватара пользователя
kiborg
Сообщения: 6
Зарегистрирован: 29 сен 2012, 14:42

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение kiborg » 01 окт 2012, 09:28

Эх господа, я как то не так вопрос задаю? -(
Вопрос не в том зачем вообще import используется. И какие функции бывают, и какие аргументы туда передавать...
А в том, почему программа работает и показывает кнопку (например) которую я кинул на Layout, и не требует import.
А как только я в коде написал чё-то про эту кнопку, так сразу надо импорт соответствующий. А до этого она как рисовала эту кнопку? Ведб она в недрах своей ОС всё равно пользуется темиже классами что и мы при написании кода?
Хотя я в принципе уже сам стал догадываться.
Просто я привык что программа должна компилироваться (ну да она и здесь компилируется но не так круто-)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение rezak90 » 01 окт 2012, 09:47

та андроиду пофиг на то что отображается. На момент отображения он не распознаёт кнопка то или картинка или текст. Ты прописываешь это всё дело в лейаутах, то есть создаёшь гуи, а вот то что ты накодишь там то уже твоё дело.
R.id.team
Политика на форуме запрещена

Аватара пользователя
kiborg
Сообщения: 6
Зарегистрирован: 29 сен 2012, 14:42

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение kiborg » 01 окт 2012, 10:06

rezak90 писал(а):та андроиду пофиг на то что отображается. На момент отображения он не распознаёт кнопка то или картинка или текст. Ты прописываешь это всё дело в лейаутах, то есть создаёшь гуи, а вот то что ты накодишь там то уже твоё дело.
Чёйто не распознаёт? А как тогда он догадывается, что нарисовать? И зачем это в layout указывается соответствующий тэг?
Мы же на месте кнопки всегда видим кнопку.

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение math64 » 01 окт 2012, 11:28

Андроид прекрасно распознаёт, что это кнопка. Все нужные классы уже есть в библиотеке - вне зависимости от того, делаешь ты import или нет.
Но в C++ всё также: нарисуй форму в Qt Designer и напиши простенькую программу, которая грузит эту форму (пример подобной программы идёт с Qt) - она загрузится, несмотря на то. что нигде в программе не будет #include <QButton> (ни прямо, ни коственно).
Аналогично можно сделать в C++ Builder, Visual C++ с WPF (с ним вообще можно ничего не программировать) и т.д.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение rezak90 » 01 окт 2012, 12:05

Я имел в виду что на гуи нету разницы что отображается, а то что это кнопка конечно он знает что она принадлежит к классу Button. Но если обобщить то это лишь набор View компонентов, так как все виджеты только наследуют базовый класс View. По этому я и говорю что отображает всё как вью компонент, а вот что это за вью мы уже описываем в лейауте и кодим в активити.
R.id.team
Политика на форуме запрещена

Аватара пользователя
kiborg
Сообщения: 6
Зарегистрирован: 29 сен 2012, 14:42

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение kiborg » 01 окт 2012, 12:10

В С++ #include есть всегда. Если ты кинул на какую-нибудь форму, в какокой-нибудь среде кнопку (например), то уж без объявления кода класса этой кнопки у тебя никак программа не скомпилируется. Ибо если даже ты сам не написал ни строчки кода, то будут выполняться обработчики сообщений по-умолчанию, написанные для этой кнопки.
А они (обработчики) должны быть объявлены и реализованы. Так уж С++ устроен.
Например в С++ Builder этим занимается библиотека визуалных компонентов объявленная в #include <vcl.h> который подключается всегда. Причём в явном виде. Попробуй закомментарь.-)

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение math64 » 01 окт 2012, 12:54

С++ #include есть, но #include нужного компонента не обязателен.
С++ Builder включит <vcl.h> автоматом - но его можно убрать и заменить минимумом нужного.
У кнопки на форме можно убрать имя - её объявление исчезнет из сгенерированного заголовка, убери <vcl.h> и оставь #include только того что нужно (TForm).
Кнопка на экране останется, а включения её заголовка в программе нигде не будет. Можно даже обработчик на нажатие повесить (имени у кнопки нет, поэтому имя обработчика нужно вводить вручную) - Sender имеет тип TObject*, и нужен заголовок только для TObject, а не для TButton.
Совершенно другое дело если захочешь использовать свой компонент - его в vcl нет, и его зеголовок неободимо использовать, даже если компонент анонимный.

Аватара пользователя
kiborg
Сообщения: 6
Зарегистрирован: 29 сен 2012, 14:42

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение kiborg » 01 окт 2012, 13:15

math64 писал(а):С++ #include есть, но #include нужного компонента не обязателен.
С++ Builder включит <vcl.h> автоматом - но его можно убрать и заменить минимумом нужного.
Но нужное то надо влючать? Совсем без включения же никак?
math64 писал(а): У кнопки на форме можно убрать имя - её объявление исчезнет из сгенерированного заголовка, убери <vcl.h> и оставь #include только того что нужно (TForm).
Кнопка на экране останется, а включения её заголовка в программе нигде не будет. Можно даже обработчик на нажатие повесить (имени у кнопки нет, поэтому имя обработчика нужно вводить вручную) - Sender имеет тип TObject*, и нужен заголовок только для TObject, а не для TButton.
Совершенно другое дело если захочешь использовать свой компонент - его в vcl нет, и его зеголовок неободимо использовать, даже если компонент анонимный.
Да ради бога ты предлагаешь привести TForm к TObject. Почему бы нет, раз он от него унаследован. Просто теперь Кнопка называется TObject. А класс TObject должен быть где-то объявлен и его надо включить? -)
Даже если мы в коде нигде не напишем вручную ничего TObject будет включен?
Ладно это спор не о том уже.-)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение rezak90 » 01 окт 2012, 13:34

господа, что вы пытаетесь докозать? а то я уже потерял смысл дискуссии. В чём проблема вообще была?
R.id.team
Политика на форуме запрещена

Ololok
Сообщения: 5
Зарегистрирован: 05 окт 2012, 08:01

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Ololok » 05 окт 2012, 09:10

не пойму в чем дело, но Gen [generated java files] пуста. И там нет R.java. Что делать?

Ответить