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

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

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

Сообщение Foenix » 13 дек 2014, 19:34

я не очень тебя понимаю, Но мне кажется, ты смешиваешь визуальное представление и сами данные. Данные - это одно, а их визуальное представление - другое. Активность или фрагмент - это шаблон, средство для отображения данных и не более того.
И думаю тебе нужно воспользоваться фрагментами в данной ситуации.
R.id.team

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

Imar
Сообщения: 1
Зарегистрирован: 14 янв 2015, 13:18

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

Сообщение Imar » 14 янв 2015, 13:21

выполняю ваши уроки в android studio.
какой class import выбрать для LinearLayout или я что то не так делаю?

Аватара пользователя
NovikPY
Сообщения: 26
Зарегистрирован: 31 янв 2015, 21:37
Откуда: Беларусь

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

Сообщение NovikPY » 13 мар 2015, 14:50

Imar писал(а):выполняю ваши уроки в android studio.
какой class import выбрать для LinearLayout или я что то не так делаю?
В AS немного отличается код от описанного кода в Eclipse, но суть одна и та же, посмотрите видео к уроку, там наглядно показывается из чего состоит экран, довольно просто и понятно.
В Android Studio Вам нужно импортировать

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

import android.view.ViewGroup;
 import android.widget.LinearLayout;
Получается при создании LinearLayout у Вас будет просто:

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

LinearLayout linLayout = new LinearLayout(this);
А при создании параметров:

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

ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
Чуть больше кода на первый взгляд, но благодаря AS, Вам и писать все это почти не придется, Studio все допишет за Вас ;)

Аватара пользователя
wtor
Сообщения: 33
Зарегистрирован: 05 янв 2015, 16:27

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

Сообщение wtor » 30 апр 2015, 17:23

Способ интересный, но зачем выводить программно, если легче через main.xml?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

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

Сообщение doter.ua » 30 апр 2015, 17:59

wtor писал(а):Способ интересный, но зачем выводить программно, если легче через main.xml?
Наверно потому, что название урока "Программное создание экрана"
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

miha10999
Сообщения: 8
Зарегистрирован: 25 май 2015, 20:01

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

Сообщение miha10999 » 01 июн 2015, 20:45

Всем привет! помогите пожалуйста. Входе изучения уроков задался вопросом "Как сделать по нажатию на кнопку автоматическое создание нескольких других элементов например TextView"
и как сделать их создание с отступом вниз(чтобы каждый элемент в отдельной строчке). В моем примере они выводятся последовательно в одной строке.

public class MainActivity extends Activity implements OnClickListener {

int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
List<TextView> textVilist;
LinearLayout llMain;
Button btn;
TextView tvVopros;
LinearLayout.LayoutParams lParams;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

llMain = (LinearLayout) findViewById(R.id.linLayout);


// setContentView()
textVilist = new ArrayList<TextView>();
tvVopros = (TextView)findViewById(R.id.textView);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(this);

}

@Override
public void onClick(View v) {

int j = f1(3);
int otstup = 0;
switch (v.getId()) {
case R.id.button :
lParams = new LinearLayout.LayoutParams(wrapContent, wrapContent);
tvVopros.setText("Вопрос №1");
for (int i = 0; i < j; i++) {

TextView tv = new TextView(this);
//tv.setId(i);
tv.setText("Ответ№+"+ i +" ");
textVilist.add(i, tv);
otstup+=25;
lParams.topMargin=otstup;
lParams.leftMargin=10;
llMain.addView(tv,lParams);

;
}
break;
}

}
public int f1(int i)
{

return i;
}

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

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

Сообщение doter.ua » 01 июн 2015, 20:47

У LinearLayout должен быть orientation vertical
layout.setOrientation(LinearLayout.VERTICAL);
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

miha10999
Сообщения: 8
Зарегистрирован: 25 май 2015, 20:01

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

Сообщение miha10999 » 02 июн 2015, 18:01

Спасибо! оказалось все просто

Vasyabest
Сообщения: 6
Зарегистрирован: 17 июл 2015, 10:46

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

Сообщение Vasyabest » 17 июл 2015, 10:51

Ребят, только начинаю разбираться, может кто подскажет. Есть у меня простой проект HelloWorld, из примера, подключил я к нему другой сложный проект smms, как модуль. Каким образом мне из моего HelloWorld проекта, запустить smms?

Человек
Сообщения: 3
Зарегистрирован: 27 окт 2015, 22:11

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

Сообщение Человек » 27 окт 2015, 22:18

Делаю в Android Studio 1.4. Вот код из MainActivity.java

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

package ru.blabla.libname;

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.ContextMenu;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);
        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll, lp);
        ViewGroup.LayoutParams lp2 = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        TextView tv = new TextView(this);
        ll.addView(tv,lp2);
        Button bt = new Button(this);
        bt.setLayoutParams(lp2);
        ll.addView(bt);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu m) {

        getMenuInflater().inflate(R.menu.mymenu,m);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem it) {
        return 5>4;
    }
    @Override
    public boolean onPrepareOptionsMenu(Menu m){

        return super.onPrepareOptionsMenu(m);
    }
}
В результате пишет про ошибку в смартфоне.
Этот урок и предыдущие делал в одном модуле (чтоб времени не терять). Может из-за прошлых уроков конфликт возник.

RomanAndreich
Сообщения: 1
Зарегистрирован: 19 мар 2013, 07:59

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

Сообщение RomanAndreich » 04 дек 2015, 21:04

Человек писал(а):Делаю в Android Studio 1.4. Вот код из MainActivity.java

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

package ru.blabla.libname;

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.ContextMenu;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);
        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll, lp);
        ViewGroup.LayoutParams lp2 = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        TextView tv = new TextView(this);
        ll.addView(tv,lp2);
        Button bt = new Button(this);
        bt.setLayoutParams(lp2);
        ll.addView(bt);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu m) {

        getMenuInflater().inflate(R.menu.mymenu,m);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem it) {
        return 5>4;
    }
    @Override
    public boolean onPrepareOptionsMenu(Menu m){

        return super.onPrepareOptionsMenu(m);
    }
}
В результате пишет про ошибку в смартфоне.
Этот урок и предыдущие делал в одном модуле (чтоб времени не терять). Может из-за прошлых уроков конфликт возник.
Если для вас еще актуально. Удалите XML файлы и студия вам подскажет какие строчки кода нужно убрать что-бы работало. =)

seamoon
Сообщения: 1
Зарегистрирован: 23 фев 2016, 18:20

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

Сообщение seamoon » 23 фев 2016, 18:21

icamys ваше изображение схемы, к сожалению, не открывается :cry:

levgilman
Сообщения: 2
Зарегистрирован: 11 сен 2018, 08:48

Сообщение levgilman » 20 сен 2018, 06:57

Что такое LayoutParams, когда слева нет класса и точки? Это по директиве вроде uses или что там в Джаве? А тут как назло в код урока не включены импорты и что ещё там должно быть.

Денис87
Сообщения: 1
Зарегистрирован: 06 июл 2021, 22:16

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

Сообщение Денис87 » 06 июл 2021, 22:22

Кнопка обязательно прописывается как Button btn или можно писать просто Button? Извините ежели что , начал изучение ваших уроков буквально вчера.

andreii
Сообщения: 3
Зарегистрирован: 08 янв 2022, 10:42

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

Сообщение andreii » 08 янв 2022, 10:50

Для Button1 kotlin:

val linLayout = LinearLayout(this)
linLayout.orientation = LinearLayout.VERTICAL
linLayout.layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
setContentView(linLayout)
...
val leftMarginParams = LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)
leftMarginParams.leftMargin = 50
val btn1 = Button(this)
btn1.text = "Button1"
linLayout.addView(btn1, leftMarginParams)

fat_fly
Сообщения: 1
Зарегистрирован: 25 фев 2022, 11:53

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

Сообщение fat_fly » 25 фев 2022, 11:57

package com.example.p0161_dynamiclayout;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Gravity;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout liLay = new LinearLayout(this);
}
}

//если нужно явно указать контекст в этой строке "LinearLayout liLay = new LinearLayout(this);" на что в данном случае указывает слово "this"?

Ответить