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

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

Добавлено: 15 май 2016, 15:17
alex_on
NIKENIT писал(а):Интересный баг. После создания нескольких динамических кнопок, если переключить ориентацию телефона - все кнопки пропадут. Если вернуть старую ориентацию - обратно они не вернутся. Из-за чего такое может происходить?

EDIT: Добавил простой код для проверки количества элементов в лейауте llMain, после комбинации клавиш Ctrl+F12 число обнуляется, т.е. llMain очищается.
Это не баг, это фича)))
Так задумано. При повороте Activity пересоздается заново.

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

Добавлено: 30 май 2017, 15:36
YettyZzZone
Ребят, подскажите, в чем может быть проблема? При использовании LinearLayout.LayoutParams атрибут gravity отображает кнопку именно там, где надо (слева, справа, по центру). А когда использую библиотеку поддержки LinearLayoutCompat.LayoutParams этот атрибут не применяется. Все кнопки появляются только слева. В документации ничего про это не нашел.

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

package com.yettyzzzone.dynamiclayout2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutCompat;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    LinearLayout llMain;
    RadioGroup rgGravity;
    EditText etName;
    Button btnCreate;
    Button btnClear;

    int wrap_content = LinearLayout.LayoutParams.WRAP_CONTENT;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        llMain = (LinearLayout)findViewById(R.id.llMain);
        rgGravity = (RadioGroup)findViewById(R.id.rgGravity);
        etName = (EditText)findViewById(R.id.etName);

        btnCreate = (Button)findViewById(R.id.btnCreate);
        btnCreate.setOnClickListener(this);

        btnClear = (Button)findViewById(R.id.btnClear);
        btnClear.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btnCreate:
                //Создаем LinearLayout с шириной и высотой по содержимому
                LinearLayoutCompat.LayoutParams lParams = new LinearLayoutCompat.LayoutParams(
                        wrap_content, wrap_content);
                int btnGravity = Gravity.START;
                //Выясняем,какой radioButton чекнут
                switch (rgGravity.getCheckedRadioButtonId()){
                    case R.id.rbLeft:
                        btnGravity = Gravity.START;
                        break;
                    case R.id.rbCenter:
                        btnGravity = Gravity.CENTER;
                        break;
                    case R.id.rbRight:
                        btnGravity = Gravity.END;
                        break;
                }
                lParams.gravity = btnGravity;
                //Создаем Button
                Button btn = new Button(this);
                btn.setText(etName.getText().toString());
                llMain.addView(btn, lParams);
                break;
        }

    }
}

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

Добавлено: 09 июл 2017, 23:49
dassad
есть проект с кастомным View и все когда-то работало
теперь пытаюсь разобраться что не работает и вижу что видимо метод onMeasure этого View не вызывается вовсе
а по идее должен вызываться несколько даже раз.
отсюда у меня вообще нет размеров view - а что и кто запускает onMeasure?

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

Добавлено: 14 фев 2021, 12:46
RuslanSkee
Надеюсь форум ещё кто то читает, и сможет помочь мне с вопросом.Он заключается в следующем.В уроке 16 мы программно создали экран.
Но экран у нас получился без иерархий Layout.В методе setContentView(), мы задаём один Layout,как задать иерархию layout ов, что бы создать, программно такойже экран как в уроке 17.

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {

LinearLayout linearLayout1 = new LinearLayout(this);
linearLayout1.setOrientation(LinearLayout.VERTICAL);

LinearLayout linearLayout2 = new LinearLayout(this);
linearLayout2.setOrientation(LinearLayout.HORIZONTAL);

LinearLayout linearLayout3 = new LinearLayout(this);
linearLayout3.setOrientation(LinearLayout.HORIZONTAL);

LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.MATCH_PARENT);

Button btn1 = new Button(this);
Button btn2 = new Button(this);
Button btn3 = new Button(this);
Button btn4 = new Button(this);

btn1.setText("A");
btn2.setText("B");
btn3.setText("C");
btn4.setText("D");

linearLayout1.addView(btn1,layoutParams1);
linearLayout1.addView(btn2,layoutParams1);

linearLayout2.addView(btn3,layoutParams1);
linearLayout2.addView(btn4,layoutParams1);


super.onCreate(savedInstanceState);
setContentView(linearLayout2,layoutParams1);

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

Добавлено: 08 янв 2022, 18:09
andreii
RuslanSkee писал(а):
14 фев 2021, 12:46
Надеюсь форум ещё кто то читает, и сможет помочь мне с вопросом.Он заключается в следующем.В уроке 16 мы программно создали экран.
Но экран у нас получился без иерархий Layout.В методе setContentView(), мы задаём один Layout,как задать иерархию layout ов, что бы создать, программно такойже экран как в уроке 17.
А добавить дочерний Layout в корневой Layout не получится?

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

setContentView(Layout1)
Layout1.addView(Layout2)