Страница 3 из 8

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

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

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

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

Добавлено: 20 ноя 2012, 17:17
RsH
вы объявили переменную на уровне

public class MainActivity extends Activity implements OnClickListener{

int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;


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

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

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

Добавлено: 20 ноя 2012, 17:43
rezak90
Переменные нужно объявлять там где они вам нужны, с точки зрения ООП и экономии памяти если она так важна. А то что выше это сделано в качестве примера наверное.

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

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

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

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

Добавлено: 20 ноя 2012, 18:25
rezak90
нет, здесь всё так же как и в других языках (не все а именно Java && C#, так как в остальных нужно за собой подчищать память).

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

Добавлено: 20 ноя 2012, 18:29
AndreyI
Он просто для сокращения записи определил эти константы и не более того.
Чтоб не писать в коде длинное LinearLayout.LayoutParams.WRAP_CONTENT

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

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

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

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

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

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

Добавлено: 21 ноя 2012, 07:36
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);
}

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

Добавлено: 21 ноя 2012, 09:07
rezak90
Button jan нужно определить как переменную класса privte Button jan

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

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

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

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

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

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

Добавлено: 21 ноя 2012, 10:50
rezak90
здесь всё зависит от параметров, у вью елементов есть метод setLayutParams, который в свою очередь принимает LinearLayout.LayoutParams или же MarginLayoutParams вот они и устанавливают ширину, длину, паддинги, маргину и вейт.

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

Добавлено: 30 ноя 2012, 11:24
Stas18
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;

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

Добавлено: 07 дек 2012, 17:04
durbala
Stas18, смотри:
if (TextUtils.isEmpty(etName.getText().toString())) { return; }

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

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

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

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

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

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

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

Добавлено: 25 янв 2013, 19:34
ivbbest
Здравствуйте!

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

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

 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. Можете наглядно и внятно объяснить, что не так и как надо.

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

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

Добавлено: 30 янв 2013, 15:22
damager82

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

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

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

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

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

Добавлено: 26 фев 2013, 17:16
rezak90
попробуйте метод removeAllViews
romashko_o писал(а):я все уроки делаю в одном проекте, мне так веселее
мне тоже стало веселее после такого комментария =)

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

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

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

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