Страница 2 из 4

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

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

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

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

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

Добавлено: 13 сен 2012, 19:11
rezak90
как я и сказал что не силён в теории, но на View можно спокойно рисовать ;)

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

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

Спасибо.

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

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

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

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

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

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

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

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

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

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

Добавлено: 01 ноя 2012, 19:18
AndreyI
Они и так должны располагаться в 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 будет на весь экран, а кнопка будет поверх него.

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

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

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

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

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

Добавлено: 16 янв 2013, 21:41
rezak90
карта должна лежать на релативной разметке и первая по иерархии, инлфейтите сам лейаут, вытаскиваете релативный лейаут и на него цепляете кнопку (соответственно кнопка должна иметь соответствующие параметры, какие вам там понадобятся, alignParent и т.д.).

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

Добавлено: 16 янв 2013, 23:03
$01ny$hko
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?

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

Добавлено: 16 янв 2013, 23:18
rezak90
button1.setId(12345);
в onClicke:
case 12345: и т.д.

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

Добавлено: 16 янв 2013, 23:48
$01ny$hko
rezak90, огромное СПАСИБО!!! Надо же было так заШкодиться :lol:

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

Добавлено: 03 мар 2013, 14:51
Virun
Господа, поясните пожалуйста за эту диаграмму из урока. Она ведь верна только в том случае когда в том же LinearLayout я применяю один единственный экземпляр LinearLayout.LayoutParams и к RelativeLayout и к обоим View? Т.е. Диаграмма сделана чисто под конкретный случай, ведь я могу создать еще два экземпляра LinearLayout.LayoutParams и каждому View и RelativeLayout присвоить свой? Аналогично и с View принадлежащими RelativeLayout: я могу и для них насоздавать разных RelativeLayout.LayoutParams, т.е. в диаграмме опять же рассмотрен частный случай когда используется один экземпляр RelativeLayout.LayoutParams на несколько View?

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

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

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

Добавлено: 29 апр 2013, 12:04
igrok-vip
Подскажите пожалуйста как пользоваться 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);
В итоге никакой отступ не применяется. В чём проблема?

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

Добавлено: 17 июн 2013, 10:15
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);
но выходит вот так:
Изображение
подскажите, в чём дело?

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

Добавлено: 17 июн 2013, 11:02
Foenix
все правильно выводится. Что нужно-то?

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

Добавлено: 18 июн 2013, 00:30
rezak90
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