Урок 17. Создание View-компонент в рабочем приложении

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rezak90 » 20 ноя 2012, 16:53

RsH писал(а):непринципиальные вопросы
1) есть ли глубокий смысл объявлять wrapContent на уровне Activity? ведь это локальная переменная метода onСreate нет?

2) объекты после использования очищать нужно? (как в Delfy например) или мусорщик подчистит неиспользуемые экземпляры?
1) не совсем понял, всё зависит с какими ключами (private/public, static, final) если на уровне класса вы объявите и где объявите (если в классе то в пределах класса как минимум, в методе то только в методе);
2) не нужно, jvm всегда сама делает это, но вы можете вызвать System.gc(); что даст подсказку jvm что "ей, пора бы освободить кое что" вот тогда она может подчистить ресурсы, но опять таки на своё усмотрение.
R.id.team
Политика на форуме запрещена

RsH
Сообщения: 3
Зарегистрирован: 19 ноя 2012, 12:30

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение RsH » 20 ноя 2012, 17:17

вы объявили переменную на уровне

public class MainActivity extends Activity implements OnClickListener{

int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;


хотя все вызовы идут на уровне переопределения метода onClick.

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

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rezak90 » 20 ноя 2012, 17:43

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

RsH
Сообщения: 3
Зарегистрирован: 19 ноя 2012, 12:30

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение RsH » 20 ноя 2012, 18:23

rezak90 писал(а):Переменные нужно объявлять там где они вам нужны, с точки зрения ООП и экономии памяти если она так важна. А то что выше это сделано в качестве примера наверное.
это я знаю, но т.к. под андроид только учусь - может здесь есть свои ограничения или фишки, например связанные с быстродействием кода :)

я же спрашиваю :)

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rezak90 » 20 ноя 2012, 18:25

нет, здесь всё так же как и в других языках (не все а именно Java && C#, так как в остальных нужно за собой подчищать память).
R.id.team
Политика на форуме запрещена

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение AndreyI » 20 ноя 2012, 18:29

Он просто для сокращения записи определил эти константы и не более того.
Чтоб не писать в коде длинное LinearLayout.LayoutParams.WRAP_CONTENT

Кстати, вместо этого можно было просто использовать статический импорт. Его отличие от обычного импорта в том, что импортируются только статические поля и методы, а в обычном импорте - пакеты, поэтому приходится указывать название класса.

import static android.view.ViewGroup.LayoutParams.*;

И все, теперь можно везде в коде указывать

LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);

без названия класса впереди.

avcorp
Сообщения: 3
Зарегистрирован: 21 ноя 2012, 07:25

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение avcorp » 21 ноя 2012, 07:36

Подскажите пожайлуста, как сделать доступ к дин.созданной кнопке "jan" и ее свойствам из других процедур программы и потом ее очистить.

// процедура внутри активити
public void set_button()
{

// создаем кнопку
Button jan = new Button(this);
// растягиваю рисунок на нее
jan.setBackgroundResource(R.drawable.ghv);
jan.setPadding(10, 5, 1, 1);
jan.setWidth(150);
jan.setHeight(25);
// id
jan.setId(11);
// добавляю на слой jan1
jan1.addView(jan);
}

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rezak90 » 21 ноя 2012, 09:07

Button jan нужно определить как переменную класса privte Button jan
R.id.team
Политика на форуме запрещена

avcorp
Сообщения: 3
Зарегистрирован: 21 ноя 2012, 07:25

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение avcorp » 21 ноя 2012, 09:44

rezak90 писал(а):Button jan нужно определить как переменную класса privte Button jan
Спасибо, действительно ничего сложного!
Подскажите пожайлуста еще на вопрос:

есть кнопка (нарисована на RelativeLayout), на нее натянута картинка
Button feb;
feb = (Button)findViewById(R.id.feb);
feb.setBackgroundResource(R.drawable.ggv);

нужно программно изменить длинну кнопки...

заранее благодарен ;)

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rezak90 » 21 ноя 2012, 10:50

здесь всё зависит от параметров, у вью елементов есть метод setLayutParams, который в свою очередь принимает LinearLayout.LayoutParams или же MarginLayoutParams вот они и устанавливают ширину, длину, паддинги, маргину и вейт.
R.id.team
Политика на форуме запрещена

Stas18
Сообщения: 2
Зарегистрирован: 30 ноя 2012, 11:18

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Stas18 » 30 ноя 2012, 11:24

MADSMILEXD писал(а):Отличный урок) Спасибо
У себя добавил проверку на то чтобы кнопок было не больше 6) а то они дальше не лезут(3.2" экран)) а ScrolView почему-то не получилось использовать. Еще добавил имена кнопок по дефолту, в моем случае Button1-6

И возник вопрос, как сделать проверку на то чтобы строка не была пустой?

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

 if(etName.getText() != null){...} 
не дало результата как и

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

if(etName.getText().toString() != null){...}

Вот так получилось

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

et = (EditText) findViewById(R.id.etName);
if (et.getText().toString().equals("")) break;

durbala
Сообщения: 8
Зарегистрирован: 07 дек 2012, 17:01

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение durbala » 07 дек 2012, 17:04

Stas18, смотри:
if (TextUtils.isEmpty(etName.getText().toString())) { return; }

Roman
Сообщения: 22
Зарегистрирован: 23 авг 2012, 08:43

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Roman » 17 дек 2012, 12:06

Подскажите как подключить русскую раскладку на клавиатуре в Eclipse, изменение локации ru_RU, не дало результатов (в настройках эмулятора телефона менял, но не помогло)? Спасибо

busylee
Сообщения: 2
Зарегистрирован: 16 янв 2013, 19:34

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение busylee » 16 янв 2013, 19:35

У меня такой вопрос. При создании большого количества кнопок они перестают входить в экран, как сделать чтобы работал скрол?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 22 янв 2013, 16:29

busylee писал(а):У меня такой вопрос. При создании большого количества кнопок они перестают входить в экран, как сделать чтобы работал скрол?
Используйте компонент ScrollView.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

ivbbest
Сообщения: 2
Зарегистрирован: 25 янв 2013, 19:20

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение ivbbest » 25 янв 2013, 19:34

Здравствуйте!

Недавно стал изучать Андроид. И в данном уроке возник затык. В уроке написано следующее:

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

 case R.id.btnClear:
      llMain.removeAllViews();
      Toast.makeText(this, "Удалено", Toast.LENGTH_SHORT).show();
      break;
Я бы хотел исправить его на следующее: в EditText я вписываю название нового созданного Button, пусть будет button1, а так их может n-ое количество. Так вот после того, как я нажимаю на кнопку btnClear, у меня удаляется элемент с нужным мне именем, допустим пусть будет тот же button1.

Частично мой вопрос перекликается с вопросом:

avcorp писал(а):Подскажите пожайлуста, как сделать доступ к дин.созданной кнопке "jan" и ее свойствам из других процедур программы и потом ее очистить.

// процедура внутри активити
public void set_button()
{

// создаем кнопку
Button jan = new Button(this);
// растягиваю рисунок на нее
jan.setBackgroundResource(R.drawable.ghv);
jan.setPadding(10, 5, 1, 1);
jan.setWidth(150);
jan.setHeight(25);
// id
jan.setId(11);
// добавляю на слой jan1
jan1.addView(jan);
}

Я сделал, как писал

rezak90 писал(а):Button jan нужно определить как переменную класса privte Button jan
Но не помогает. Возможно проблема с неправильным условиям отбора нужного элемента написанного в EditText. Я делал вот такими способом:

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

String str=etName.getText().toString();
if (str.compareTo((MainActivity.this.getComponentName().toString()))==0){

....
}
И еще тогда в эту же тему, как удалять отдельный элемент, ибо там существует большое множество remove. Можете наглядно и внятно объяснить, что не так и как надо.

Заранее всем большое спасибо!

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 30 янв 2013, 15:22

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

		int id = getResources().getIdentifier("button1", "id", getPackageName());
		if (id != 0) {
			View view = findViewById(id);
			if (view != null) ((ViewGroup)view.getParent()).removeView(view);
		}
По имени получаете ID, находите компонент и через родителя удаляете.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

romashko_o
Сообщения: 4
Зарегистрирован: 26 фев 2013, 16:36

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение romashko_o » 26 фев 2013, 16:41

Добрый день. У меня проблема - LinearLayot не очищается от кнопок после llBtn.removeAllViewsInLayout();
То есть кнопок то там фактически больше нет, но они все еще нарисованы. Исчезают только после смены фокуса (на TextEdit, например).
Таргет - api 15, запускал на девайсах и эмуляторе.
Кода у меня много, я все уроки делаю в одном проекте, мне так веселее, поэтому аттачить его не буду, просто интересно - в чем может быть проблема?

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rezak90 » 26 фев 2013, 17:16

попробуйте метод removeAllViews
romashko_o писал(а):я все уроки делаю в одном проекте, мне так веселее
мне тоже стало веселее после такого комментария =)
R.id.team
Политика на форуме запрещена

romashko_o
Сообщения: 4
Зарегистрирован: 26 фев 2013, 16:36

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение romashko_o » 26 фев 2013, 20:14

rezak90 писал(а):попробуйте метод removeAllViews
romashko_o писал(а):я все уроки делаю в одном проекте, мне так веселее
мне тоже стало веселее после такого комментария =)
Ну, фишка в том, что это накладывает дополнительные проблемы, которые интересно решать. Чем больше сложных задач приходится решить в процессе обучения, тем лучше усваивается материал и тем интереснее учиться.
Это только мое мнение, поэтому мне так веселее :)

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

И да, спасибо, попробую.

Ответить