Я создал простую операцию входа в систему, которая выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/3blz8.png)
Мне хотелось, чтобы весь макет переместился вверх до в нижней части кнопки «Вход», как только выделен текст редактирования электронной почты.
Я написал этот код:
public class SignInActivity extends AppCompatActivity {
private EditText Et_Email, Et_Password;
private Button Btn_Login;
private ScrollView Sv_Layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
initUI();
}
private void initUI() {
getSupportActionBar().hide();
Sv_Layout = findViewById( R.id.sv_SignInLayout );
Et_Email = findViewById(R.id.et_SignInEmail);
Et_Password = findViewById(R.id.et_SignInPassword);
Btn_Login = findViewById(R.id.btn_SignIn );
Et_Email.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean hasfocus) {
if (hasfocus) {
focusOnView();
} else {
Log.e("TAG", "e1 not focused");
}
}
});
}
private final void focusOnView(){
Sv_Layout.post(new Runnable() {
@Override
public void run() {
Sv_Layout.scrollTo(0, Btn_Login.getBottom());
}
});
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/sv_SignInLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorWhite"
android:fillViewport="true"
tools:context=".SignInActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv_SignIn"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="48dp"
android:layout_marginEnd="8dp"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/img_signin"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.2"
app:layout_constraintHorizontal_bias="0.55"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.48" />
<TextView
android:id="@+id/tv_SignIn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="40dp"
android:text="@string/ActivitySignIn_SignIn"
android:textColor="@color/colorLightPurple"
android:textSize="24sp"
app:layout_constraintHeight_percent="0.05"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_SignIn"
app:layout_constraintWidth_percent="0.3" />
<EditText
android:id="@+id/et_SignInEmail"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="40dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="40dp"
android:background="@drawable/btn_underline"
android:drawableStart="@drawable/ic_signin_email"
android:drawablePadding="10dp"
android:hint="@string/ActivitySignIn_EmailHint"
android:textColor="@color/colorBlackText"
android:inputType="textEmailAddress"
app:layout_constraintHeight_percent="0.06"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_SignIn" />
<EditText
android:id="@+id/et_SignInPassword"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:layout_marginTop="16dp"
android:background="@drawable/btn_underline"
android:drawableStart="@drawable/ic_login_lock"
android:drawablePadding="10dp"
android:hint="@string/ActivitySignIn_PasswordHint"
android:inputType="textPassword"
android:textColor="@color/colorBlackText"
app:layout_constraintHeight_percent="0.06"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_SignInEmail" />
<Button
android:id="@+id/btn_SignIn"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="40dp"
android:layout_marginBottom="80dp"
android:layout_marginEnd="40dp"
android:background="@drawable/btn_rounded_purple"
android:text="@string/ActivitySignIn_SignIn"
android:textAllCaps="false"
android:textColor="@color/colorWhite"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.08"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
Есть ли причина, по которой ничего не происходит? Я отладил приложение, чтобы проверить, ловит ли оно фокус, и оно делает, но по какой-то причине оно не перемещает представление прокрутки.
Мой манифест теперь имеет android:windowSoftInputMode="adjustPan"
, потому что если я удаляю его весь макет сжимается.
Спасибо!