Урок 16. Программное создание экрана. LayoutParams

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение AndreyI » 13 сен 2012, 18:54

Скорее View является компонентом, но не холстом, холст немного другое понятие из графического пакета Андроид, canvas передается в onDraw для отрисовки изображения в пределах выделенной области (прямоугольной), там можно уже рисовать все что угодно, для этого есть целый пакет специальных классов.

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение dil_android » 13 сен 2012, 19:10

Извините, мне надо было сразу оговориться, что выражение "холст" образное, имеется в виду понятие awt панели в Java, которая может содержать и демонстрировать UI компоненты или другие панели.

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение rezak90 » 13 сен 2012, 19:11

как я и сказал что не силён в теории, но на View можно спокойно рисовать ;)
R.id.team
Политика на форуме запрещена

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение dil_android » 13 сен 2012, 19:28

Если нет больше коментов, разрешите тему считать закрытой и уроки 16,17 и 18 мною изученными.
Завтра пойду дальше.

Спасибо.

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение AndreyI » 13 сен 2012, 19:29

dil_android писал(а):Извините, мне надо было сразу оговориться, что выражение "холст" образное, имеется в виду понятие awt панели в Java, которая может содержать и демонстрировать UI компоненты или другие панели.
Но все равно несовсем верное представление.

Правильнее было бы перевести не "строительная площадка", а основной строительный блок для компонентов пользовательского интерфейса. Т.е. не на нем нужно строить UI, а из него. Как-то так.

razer89
Сообщения: 3
Зарегистрирован: 26 июл 2012, 00:50

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение razer89 » 31 окт 2012, 01:46

Всем привет! У меня в роли setContentView выступает класс Draw2D, в котором я собираюсь рисовать кое-какую графику. Графика рисуется замечательно, но вот проблема - в нем я не могу программно создавать кнопки. У класса LinearLayout есть метод .addView (child, params). А у класса Draw2D (а он унаследован от View) этот метод отсутствует. Как выходить из данной ситуации? Заранее благодарен!

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение AndreyI » 31 окт 2012, 05:41

метод addView есть только у классов унаследованных от ViewGroup.
Вы можете поместить Draw2D в любой удобный для вас контейнер layout (если Draw2D унаследован от View, то должно получиться) и добавлять кнопки уже в этот контейнер поверх вашего Draw2D

razer89
Сообщения: 3
Зарегистрирован: 26 июл 2012, 00:50

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение razer89 » 31 окт 2012, 17:05

AndreyI писал(а):и добавлять кнопки уже в этот контейнер поверх вашего Draw2D
Спасибо, но подскажите еще, как добавлять кнопки именно поверх draw2d?

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение AndreyI » 01 ноя 2012, 19:18

Они и так должны располагаться в Z в порядке добавления (последние добавленные наверху). Если используется макет xml то сверху вниз , нижние элементы будут наверху

К примеру

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <com.yourpackage.Draw2D
        android:id="@+id/draw2d"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
         
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="65dp"
        android:text="Button" />

</RelativeLayout>
Draw2D будет на весь экран, а кнопка будет поверх него.

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение $01ny$hko » 16 янв 2013, 18:54

Всем доброго вечера! У меня вопрос наполовину не по теме урока, а наполовину - по теме ))). Необходимо (эта часть по теме) добавить программно кастомную кнопку (а вот эта вроде не по теме) поверх MapView. Для добавления представления поверх карты нашла вот это

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

int y = 10;
int x = 10;
Button button1 = new Button(getApplicationContext());
button1.setText("эта кнопка должна быть прозрачной, с текстом и картинкой");
.
Может кто подскажет как это реализовать?

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение rezak90 » 16 янв 2013, 21:41

карта должна лежать на релативной разметке и первая по иерархии, инлфейтите сам лейаут, вытаскиваете релативный лейаут и на него цепляете кнопку (соответственно кнопка должна иметь соответствующие параметры, какие вам там понадобятся, alignParent и т.д.).
R.id.team
Политика на форуме запрещена

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение $01ny$hko » 16 янв 2013, 23:03

rezak90, получилось через код создать и разместить кнопку нужного вида.

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

int y = 5;
		int x = 1;
		Button button1 = new Button(getApplicationContext());
		button1.setText("здесь нужный текст");
		button1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.warn, 0, 0, 0);
		button1.setOnClickListener(this);
		
		

		MapView.LayoutParams screenLP;
		screenLP = new MapView.LayoutParams(MapView.LayoutParams.MATCH_PARENT,
				MapView.LayoutParams.WRAP_CONTENT, x, y,
				MapView.LayoutParams.TOP);
		mapView.addView(button1, screenLP);
Теперь втупила как же обработать нажатие. Подскажите что в онКлике писать если кнопка без Id?

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение rezak90 » 16 янв 2013, 23:18

button1.setId(12345);
в onClicke:
case 12345: и т.д.
R.id.team
Политика на форуме запрещена

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение $01ny$hko » 16 янв 2013, 23:48

rezak90, огромное СПАСИБО!!! Надо же было так заШкодиться :lol:

Virun
Сообщения: 1
Зарегистрирован: 03 мар 2013, 14:39

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение Virun » 03 мар 2013, 14:51

Господа, поясните пожалуйста за эту диаграмму из урока. Она ведь верна только в том случае когда в том же LinearLayout я применяю один единственный экземпляр LinearLayout.LayoutParams и к RelativeLayout и к обоим View? Т.е. Диаграмма сделана чисто под конкретный случай, ведь я могу создать еще два экземпляра LinearLayout.LayoutParams и каждому View и RelativeLayout присвоить свой? Аналогично и с View принадлежащими RelativeLayout: я могу и для них насоздавать разных RelativeLayout.LayoutParams, т.е. в диаграмме опять же рассмотрен частный случай когда используется один экземпляр RelativeLayout.LayoutParams на несколько View?
Вложения
linearLayout.png
linearLayout.png (44.41 КБ) 20990 просмотров

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение damager82 » 09 мар 2013, 18:52

Virun писал(а):Господа, поясните пожалуйста за эту диаграмму из урока. Она ведь верна только в том случае когда в том же LinearLayout я применяю один единственный экземпляр LinearLayout.LayoutParams и к RelativeLayout и к обоим View? Т.е. Диаграмма сделана чисто под конкретный случай, ведь я могу создать еще два экземпляра LinearLayout.LayoutParams и каждому View и RelativeLayout присвоить свой? Аналогично и с View принадлежащими RelativeLayout: я могу и для них насоздавать разных RelativeLayout.LayoutParams, т.е. в диаграмме опять же рассмотрен частный случай когда используется один экземпляр RelativeLayout.LayoutParams на несколько View?
Тут речь не про экземпляры, а про классы. Этот класс вам надо будет использовать, чтобы работать с layout-параметрами объектов. А экземпляров там уже сколько угодно можно создать.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение igrok-vip » 29 апр 2013, 12:04

Подскажите пожалуйста как пользоваться MarginLayoutParams? Создаю FrameLayout как корневой, в него хочу поместить TextView с отступом слева от FrameLayout. Пытаюсь сделать так:

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

FrameLayout FrLayout = new FrameLayout(this);
FrameLayout.LayoutParams FrLayoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
FrLayout.setLayoutParams(FrLayoutParams);

TextView tv = new TextView(this);
tv.setText("HELLO!");
MarginLayoutParams tvParams = new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
tvParams.leftMargin=10;
tv.setLayoutParams(tvParams);

FrLayout.addView(tv);

setContentView(FrLayout);
В итоге никакой отступ не применяется. В чём проблема?

luccello
Сообщения: 1
Зарегистрирован: 17 июн 2013, 10:04

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение luccello » 17 июн 2013, 10:15

пытаюсь сделать кнопку с выравниванием по нижнему краю:

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

//сделаем параметры вывода с гравити к правому краю
		LinearLayout.LayoutParams bottGravityParams= new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
		bottGravityParams.gravity=Gravity.BOTTOM;
		
		// создадим кнопку с гравити парметрами
		Button btng=new Button(this);
		btng.setText("Button with bottom gravity");
		linLayout.addView(btng, bottGravityParams);
но выходит вот так:
Изображение
подскажите, в чём дело?

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение Foenix » 17 июн 2013, 11:02

все правильно выводится. Что нужно-то?
R.id.team

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

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

Re: Урок 16. Программное создание экрана. LayoutParams

Сообщение rezak90 » 18 июн 2013, 00:30

Foenix писал(а):все правильно выводится. Что нужно-то?
невнимательная ;)
luccello писал(а):пытаюсь сделать кнопку с выравниванием по нижнему краю:

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

//сделаем параметры вывода с гравити к правому краю
		LinearLayout.LayoutParams bottGravityParams= new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
		bottGravityParams.gravity=Gravity.BOTTOM;
		
		// создадим кнопку с гравити парметрами
		Button btng=new Button(this);
		btng.setText("Button with bottom gravity");
		linLayout.addView(btng, bottGravityParams);
но выходит вот так:
Изображение
подскажите, в чём дело?
главный лейаут куда цепляется кнопка какой? если LinearLayout то высоту поставьте fill_parent
R.id.team
Политика на форуме запрещена

Ответить