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

Обсуждение уроков
alex_on
Сообщения: 2
Зарегистрирован: 03 апр 2016, 19:14

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

Сообщение alex_on » 15 май 2016, 15:17

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

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

YettyZzZone
Сообщения: 8
Зарегистрирован: 03 фев 2014, 15:40
Откуда: Izhevsk

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

Сообщение YettyZzZone » 30 май 2017, 15:36

Ребят, подскажите, в чем может быть проблема? При использовании 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;
        }

    }
}

dassad
Сообщения: 8
Зарегистрирован: 20 дек 2015, 00:03

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

Сообщение dassad » 09 июл 2017, 23:49

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

Ответить