Изминение положения КМП в зависимости от ориентации экрана

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
knight
Сообщения: 44
Зарегистрирован: 21 сен 2012, 09:25

Изминение положения КМП в зависимости от ориентации экрана

Сообщение knight » 26 окт 2013, 11:05

Всем привет, многие новички иногда могут столкнуться иногда с тем что менеджер может захотеть фичу чтобы расположение компонентов менялось в зависимости от ориентации экрана
1.jpg
1.jpg (30.33 КБ) 5048 просмотров
2.jpg
2.jpg (28.65 КБ) 5048 просмотров
извиняюсь за большие скрины, если кто подскажит как тут их размер можно обрезать я это сделаю
так ну собственно вы ведите, что при одной ориентации экрана у меня одно расположение логина и пароля, при другой другое.

собственно создаем разметку слоя на котором будет содержаться поля логина и пароля

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

 MenyToedit = new LinearLayout(this);
            if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
            {
                MenyToedit.setOrientation(MenyToedit.VERTICAL);
            }
            else
            {
                MenyToedit.setOrientation(MenyToedit.HORIZONTAL);
            }
MenyToedit.setGravity(Gravity.CENTER);
в зависимости от ориентации экрана мы выбираем ориентацию слоя

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

 LinearLayout.LayoutParams ToStepP = new LinearLayout.LayoutParams(wrapMath, wrapMath, 0.1f);
            ToStepP.setMargins(dptopx(10), 0, dptopx(10), 0);

            LinearLayout ToStep = new LinearLayout(this);
            ToStep.setLayoutParams(ToStepP);
            ToStep.setOrientation(ToStep.VERTICAL);

            LinearLayout.LayoutParams lf1Params = new LinearLayout.LayoutParams(wrapMath, wrapContent);
       
            TextView txt = new TextView(this);
            txt.setGravity(Gravity.LEFT);
            txt.setText("Логин");

            txt.setTextColor(Color.WHITE);
            txt.setGravity(Gravity.BOTTOM);
            txt.setTextSize(20);
            ToStep.addView(txt,lf1Params);

            tx1 = new EditText(this);
            tx1.setGravity(Gravity.CENTER);
            tx1.setSingleLine();
            tx1.setEllipsize(TruncateAt.END);
            tx1.setTextSize(20);
            ToStep.addView(tx1, lf1Params);

            MenyToedit.addView(ToStep);


            txt = new TextView(this);
            txt.setGravity(Gravity.LEFT);
            txt.setText("Пароль");

            txt.setTextColor(Color.WHITE);
            txt.setGravity(Gravity.BOTTOM);
            txt.setTextSize(20);
            ToStep.addView(txt,lf1Params);

            tx1 = new EditText(this);
            tx1.setGravity(Gravity.CENTER);
            tx1.setSingleLine();
            tx1.setEllipsize(TruncateAt.END);
            tx1.setTextSize(20);
            tx1.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD);
           
            ToStep.addView(tx1, lf1Params);

            MenyToedit.addView(ToStep);

создаем слой для отображения компонентов, там можно расположить любые компоненты какие вы хотите, в данном случае у нас TextView и EditText. Обратите внимание на параметры слоя (wrapMath, wrapMath, 0.1f) 0.1f означает вес слоя, то есть если у вас будет рядом два такие слоя то они растянутся и займут равное место на экране, поделят его поровну в зависимости от ширины экрана.
итак мы создали 2 таких слоя и закинули на них компоненты
но это еще не все, нам нужен метод смены ориентации видь нам же надо в зависимости от ориентации экрана менять расположение, а так только при создании мы получим нужное нам расположение

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

   public void onConfigurationChanged(Configuration newConfig)

    {

        super.onConfigurationChanged(newConfig);

        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)

        {
              MenyToedit.setOrientation(MenyToedit.HORIZONTAL);
            }
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
        {
           MenyToedit.setOrientation(MenyToedit.VERTICAL);
        }

    }

  
собственно тут все понятно, в зависимости от ориентации экрана мы ставим ножную ориентацию слоя, и получаем нам нужный эффект, этот метод прекрасно работает с флагом без пересоздания активити, нам ненужно заботиться о сохранении данных при пересоздании активити
Последний раз редактировалось knight 26 окт 2013, 14:09, всего редактировалось 3 раза.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Изминение положения КМП в зависимости от ориентации экра

Сообщение trew » 26 окт 2013, 13:41

Уменьшить размер скриншотов можно например так:
открываем сайт http://pixlr.com/editor/?loc=ru
загружаем туда картинку
Изображение - Размер изображения... указываем меньший размер (галка сохранять пропорции)
Файл - Сохранить...
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

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

Re: Изминение положения КМП в зависимости от ориентации экра

Сообщение Foenix » 26 окт 2013, 22:32

не пойму, в чем фишка этого способа, если есть стандартный метод - сделать два лэйаута - один в layout, другой в layout-land и все будет показываться автоматически?
R.id.team

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

Аватара пользователя
knight
Сообщения: 44
Зарегистрирован: 21 сен 2012, 09:25

Re: Изминение положения КМП в зависимости от ориентации экра

Сообщение knight » 27 окт 2013, 21:06

Foenix писал(а):не пойму, в чем фишка этого способа, если есть стандартный метод - сделать два лэйаута - один в layout, другой в layout-land и все будет показываться автоматически?
я не пробовал с лайаут ленд, так как на андроиде я полностью самоучка для меня был приемлим этот способ, собственно в чем фишка я написал в конце. -> этот метод прекрасно работает с флагом без пересоздания активити, нам ненужно заботиться о сохранении данных при пересоздании активити
тоесть когда я ввел пол пароля при повороте экрана у меня не пропали данные
да и наверно это быстрее по времени)

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

Re: Изминение положения КМП в зависимости от ориентации экра

Сообщение Foenix » 27 окт 2013, 21:41

создавать динамически layout, когда в этом нету необходимости? а чтобы потом через год что-нибудь подредактировать в нем? увольте)) я лучше старый добрый xml буду использовать..
R.id.team

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

akeinhell
Сообщения: 1
Зарегистрирован: 10 дек 2013, 00:34

Re: Изминение положения КМП в зависимости от ориентации экра

Сообщение akeinhell » 10 дек 2013, 00:35

knight писал(а):
Foenix писал(а):не пойму, в чем фишка этого способа, если есть стандартный метод - сделать два лэйаута - один в layout, другой в layout-land и все будет показываться автоматически?
я не пробовал с лайаут ленд, так как на андроиде я полностью самоучка для меня был приемлим этот способ, собственно в чем фишка я написал в конце. -> этот метод прекрасно работает с флагом без пересоздания активити, нам ненужно заботиться о сохранении данных при пересоздании активити
тоесть когда я ввел пол пароля при повороте экрана у меня не пропали данные
да и наверно это быстрее по времени)

Сохранение данных это +2 строки кода )
А у вас целая поэма

Ответить