Урок 18. Меняем layoutParams в рабочем приложении

Обсуждение уроков
Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Foenix » 20 авг 2014, 17:42

Попробуй такой метод:
класс создать и переопределить метод onMeasure и использовать его в xml-ке
Класс по аналогии с этим в ответе
http://stackoverflow.com/questions/2413 ... iew-square
http://stackoverflow.com/questions/6644 ... -imageview - тут как в xml запихнуть
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

kvg_ua
Сообщения: 5
Зарегистрирован: 10 июн 2014, 21:05

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение kvg_ua » 20 авг 2014, 21:29

Foenix писал(а):Попробуй такой метод:
класс создать и переопределить метод onMeasure и использовать его в xml-ке
Класс по аналогии с этим в ответе
http://stackoverflow.com/questions/2413 ... iew-square
http://stackoverflow.com/questions/6644 ... -imageview - тут как в xml запихнуть
Спасибо, попробуем!

kvg_ua
Сообщения: 5
Зарегистрирован: 10 июн 2014, 21:05

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение kvg_ua » 20 авг 2014, 22:23

Foenix писал(а):Попробуй такой метод:
класс создать и переопределить метод onMeasure и использовать его в xml-ке
Класс по аналогии с этим в ответе
http://stackoverflow.com/questions/2413 ... iew-square
http://stackoverflow.com/questions/6644 ... -imageview - тут как в xml запихнуть
Спасибо огромное! Все получилось!

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Sky-VIN » 06 сен 2014, 00:40

Donart писал(а):
присоединяюсь, у меня тоже не работает есть убрать эти две строки, казалось бы причем тут они? и где это обсуждалось? я эту тему всю просмотрел, тут нет ответа на этот вопрос
Первые сообщения в этой теме отвечают на Ваш вопрос.
Вот цитата из урока.
Есть небольшой нюанс. Как верно заметили в каментах, если просто написать код lParams1.weight = 1, то компонент не изменится. Необходимо дописать код: btn1.requestLayout(). Тогда кнопка прочтет Layout и перерисуется. Этот метод уже вызывается в setText, поэтому мы его здесь явно не вызываем.
Все равно не понятно.
Сначала присваивается значение
lParams1 = (LinearLayout.LayoutParams) btn1.getLayoutParams();
Как бы, взяли значения у кнопки и присвоили их к lParams1. Это понятно.

Не понятно то, что при изменении lParams1, обратно не присваиваем значение кнопке, а меняем только текст (хоть SetText и перерисовывает кнопки)...

Получается как-то так:
int a, b = 1;
a = b;
b = b + 2;
и получается что "a" теперь тоже равна 3....
Завтра будет.
Лучше.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Foenix » 06 сен 2014, 06:55

ну какое же это int? это Object, и в lParams1 попадает ссылка, а не копируется ваша int
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Sky-VIN » 06 сен 2014, 15:14

Foenix писал(а):ну какое же это int? это Object, и в lParams1 попадает ссылка, а не копируется ваша int
Да я это выразил в алегории.
В коде не нашел обратного присваивания из Params1 в btn1. Но оно почему-то работает.
// Помогите, пожалуйста, найти строку в коде, где есть это присваивание.
Завтра будет.
Лучше.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Foenix » 06 сен 2014, 16:13

твоя аллегория ни к селу ни к городу
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Sky-VIN » 06 сен 2014, 16:22

Foenix писал(а):твоя аллегория ни к селу ни к городу
Согласен.

Значит этот вопрос останется загадкой... :?
Завтра будет.
Лучше.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Foenix » 06 сен 2014, 16:26

та эта отгадка уже написана, ты только почему-то не понял еще
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Sky-VIN » 06 сен 2014, 17:41

Спасибо, конечно, за ответы.
Очень хотелось бы понять...
Не хочется в дальнейшем быть говнокодером и писать рулоны вместо пару строк.
Завтра будет.
Лучше.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Foenix » 06 сен 2014, 20:46

дело в том, что тебе нужно учить основы джава, если строчка 3 у тебя отражает суть твоего присутствия в программировании. И даже не java, а ООП вначале.
Так вот. Напиши свой пример только не с простым типом int, а с объектным типом любым.
Суть в том, и она тебя удивит, что особой разницы между
Object o = new(Object);
и
Object o1 = o2;
нету. В первом случае в памяти создается объект типа Object и его ссылка помещается в переменную o.
а во втором объект уже был в памяти и его ссылка попала в переменную o1.
А сама область - она просто есть. Сколько ни присваивай таким образом - объект будет, а ссылок делай хоть миллион. И если ты посредством одной из них будешь менять объект - то если потом воспользуешься другой ссылкой, то обнаружишь эти изменения.
Дальше - больше.. и даже когда ты будешь передавать эти ссылки (а будешь думать, что передаешь значения) в какие-нибудь методы в виде параметров и там менять - то изменятся сами объекты! Это совершенно не копирование типа int в саму переменную, когда переменная содержит ЗНАЧЕНИЕ - число.

Дальше - еще больше и навороченнее эти правила.. там еще строковые объекты есть - с ними тоже особенности..кстати очень интересные.
Я может мутно объясняю, но лучше почитать учебник..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Foenix » 06 сен 2014, 20:52

Спасибо поставила потому, что ты не стал как все прочие возмущаться, что форум гавно и тебе до сих пор не растолковали простой вопрос :)
а если после моих слов еще и в учебник заглянешь - то вообще красота будет.
Если тебе видео милее, то посмотри в сети видеокурс по java, а потом видеокурс по андроиду от компании специалист. Очень хороший и понятный и от него можно дальше плыть. Сделан по типу записи с офлайн-уроков.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Sky-VIN » 07 сен 2014, 00:01

Foenix писал(а): ...
В первом случае в памяти создается объект типа Object и его ссылка помещается в переменную o.
...
Сразу бы так.

Для меня всегда укзатели имели такой синтаксис void *variable;
Спасибо!

PS
Начал, еще давно читать Философия Java, но закинул... На досуге возобновлю.
Завтра будет.
Лучше.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Foenix » 07 сен 2014, 00:15

сразу-то сразу, но моих слов мало
философия java вроде сложная книжка
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

duddeniska
Сообщения: 7
Зарегистрирован: 03 сен 2014, 11:51

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение duddeniska » 19 сен 2014, 18:44

Всем привет! Есть такая проблема. Написал по тесту прогу которая при изменении seek bar меняет кнопки. Но есть ошибка. Выкладываю интересующий код.

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

sBar = (SeekBar) findViewById(R.id.seekBar1); - создают объект sBar

Ниже создаю интерфейс обработчика.

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

OnSeekBarChangeListener SeekBarChange = new OnSeekBarChangeListener(){
    			@Override
    			  public void onProgressChanged(SeekBar seekBar, int progress,
    			      boolean fromUser) {
    Сдесб какой то код
    }
Ниже привязываю обработчки к seekBar.

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

sBar.setOnSeekBarChangeListener(SeekBarChange);
Пишет следующую ошибку.

**SeekBarChange cannot be resolved to a variable** Почему? вроде бы все правильно сделал? где ошибка ребята? Не люблю в голове присваивать implements OnSeekBarChangeListener, больше понравился метод через создание отдельного интерфейса.

Аватара пользователя
xamak
Сообщения: 15
Зарегистрирован: 14 апр 2014, 03:05

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение xamak » 28 дек 2014, 00:09

KamiSempai писал(а):При изменении положения ползунка, отрабатывает один и тот же код.
Вы написали:

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

sbWeight.setOnSeekBarChangeListener(this);
sb2Weight.setOnSeekBarChangeListener(this);
Следовательно присвоили одно и то-же событие на перетаскивание ползунка.
Что-бы обработчик события отделял один ползунок от другого, в процедуре onProgressChanged Вам стоит определить какой именно объект вызвал событие, sbWeight или sb2Weight. Ссылка на этот объект сидит в параметре seekBar.

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

public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
	int leftValue = progress;
	int rightValue = seekBar.getMax() - progress;
	switch(seekBar) {
		case sbWeight:
			lParams1.weight = leftValue;
			lParams2.weight = rightValue;
			btn1.setText(String.valueOf(leftValue));
			btn2.setText(String.valueOf(rightValue));
			break;
		case sb2Weight:
			Params3.weight = leftValue;
			Params4.weight = rightValue;
			btn3.setText(String.valueOf(leftValue));
			btn4.setText(String.valueOf(rightValue));
			break;
	}
}
PS: На сколько я понял, у Вас совершенно нет опыта объектно ориентированного программирования. Я бы посоветовал Вам, для начала, прочитать хотя-бы одну книгу по Java программированию. Например, "Философия Java" Эккеля- очень хорошая книга.
Ругается на
switch (seekBar){
case sbWeight:
Пишет: "Constant expression required".

Сделал так:
switch (seekBar.getId()){
case R.id.sbWeight:

Не ругается... Или это и подразумевалось?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Foenix » 28 дек 2014, 00:49

посмотри справку по java по этому оператору и не задавай такие вопросы, а то слишком уж стыдно
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
xamak
Сообщения: 15
Зарегистрирован: 14 апр 2014, 03:05

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение xamak » 28 дек 2014, 01:32

Foenix писал(а):посмотри справку по java по этому оператору и не задавай такие вопросы, а то слишком уж стыдно
Везде примеры типа:
switch(i)
case 1:
case 2:
case 3:
и
switch (выражение)
case значение1:
case значение2:
case значениеN:

В Вашем коде прописано:
switch(seekBar)
case sbWeight:
case sb2Weight:

Прописываю также - ругается. Сделал через .getId() как это было показано в ранних уроках для кнопок - заработало.
Решил спросить в чем же дело, получил ответ : "не задавай такие вопросы, а то слишком уж стыдно".
А для чего тогда форум? Чтобы тех, кто спрашивал, стыдили?

Аватара пользователя
xamak
Сообщения: 15
Зарегистрирован: 14 апр 2014, 03:05

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение xamak » 28 дек 2014, 13:14

Foenix писал(а):посмотри справку по java по этому оператору и не задавай такие вопросы, а то слишком уж стыдно
Согласно Вашему коду в значение case нужно прописывать sbWeight, т.к. это SeekBar, который требуется, т.к. он стоит входным параметром метода onProgressChanged, но sbWeight подчеркивается "Constant expression required".
Попробовал использовать метод getId() и искал в константах как это было показано в предыдущих уроках и программа заработала.

К тому же switch требует byte, short, char, int, а Вы в своем коде, которому я следовал, вписали объект seekBar.
Я так понял, Вы и сами не знаете ответ...

Аватара пользователя
xamak
Сообщения: 15
Зарегистрирован: 14 апр 2014, 03:05

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение xamak » 27 янв 2015, 22:18

deleted писал(а):Что-то я не пойму, почему в lParams1=(LinearLayout.LayoutParams) btn1.getLayoutParams(); lParams всегда будет влиять на кнопку? Он же один раз при создании активити присвоился и все. Как мы можем потом менять( lParams1.weight=leftValue;) Layout-параметры btn1 через него?
Влияние происходит не на кнопку, а на lParams1, кнопке же присваиваются параметры lParams1.
Раньше lParams1 был, например, leftValue, кнопка так и отображалась, а после сказали, что lParams1 rightValue, а т.к. кнопка берет параметры из lParams1, вот она и меняется.

Ответить