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

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

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

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

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

 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);
        }

    }

  
собственно тут все понятно, в зависимости от ориентации экрана мы ставим ножную ориентацию слоя, и получаем нам нужный эффект, этот метод прекрасно работает с флагом без пересоздания активити, нам ненужно заботиться о сохранении данных при пересоздании активити

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

Добавлено: 26 окт 2013, 13:41
trew
Уменьшить размер скриншотов можно например так:
открываем сайт http://pixlr.com/editor/?loc=ru
загружаем туда картинку
Изображение - Размер изображения... указываем меньший размер (галка сохранять пропорции)
Файл - Сохранить...

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

Добавлено: 26 окт 2013, 22:32
Foenix
не пойму, в чем фишка этого способа, если есть стандартный метод - сделать два лэйаута - один в layout, другой в layout-land и все будет показываться автоматически?

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

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

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

Добавлено: 27 окт 2013, 21:41
Foenix
создавать динамически layout, когда в этом нету необходимости? а чтобы потом через год что-нибудь подредактировать в нем? увольте)) я лучше старый добрый xml буду использовать..

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

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

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