Изминение положения КМП в зависимости от ориентации экрана
Добавлено: 26 окт 2013, 11:05
Всем привет, многие новички иногда могут столкнуться иногда с тем что менеджер может захотеть фичу чтобы расположение компонентов менялось в зависимости от ориентации экрана
так ну собственно вы ведите, что при одной ориентации экрана у меня одно расположение логина и пароля, при другой другое.
собственно создаем разметку слоя на котором будет содержаться поля логина и пароля
в зависимости от ориентации экрана мы выбираем ориентацию слоя
создаем слой для отображения компонентов, там можно расположить любые компоненты какие вы хотите, в данном случае у нас TextView и EditText. Обратите внимание на параметры слоя (wrapMath, wrapMath, 0.1f) 0.1f означает вес слоя, то есть если у вас будет рядом два такие слоя то они растянутся и займут равное место на экране, поделят его поровну в зависимости от ширины экрана.
итак мы создали 2 таких слоя и закинули на них компоненты
но это еще не все, нам нужен метод смены ориентации видь нам же надо в зависимости от ориентации экрана менять расположение, а так только при создании мы получим нужное нам расположение
собственно тут все понятно, в зависимости от ориентации экрана мы ставим ножную ориентацию слоя, и получаем нам нужный эффект, этот метод прекрасно работает с флагом без пересоздания активити, нам ненужно заботиться о сохранении данных при пересоздании активити
извиняюсь за большие скрины, если кто подскажит как тут их размер можно обрезать я это сделаютак ну собственно вы ведите, что при одной ориентации экрана у меня одно расположение логина и пароля, при другой другое.
собственно создаем разметку слоя на котором будет содержаться поля логина и пароля
Код: Выделить всё
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);
итак мы создали 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);
}
}