I have created a simple Sign-In activity that looks as follows:
I had like that the whole layout will move up to the bottom of the Sign In button once the E-mail EditText is focused.
I wrote this code:
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());
}
});
}
}
The XML is:
<?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>
Is there any reason that nothing happens? I debugged the app to check if it catches the focus and it does but still, for some reason, it doesn't move the scrollview.
My manifest has android:windowSoftInputMode="adjustPan"
now because if I remove it the whole layout shrinks.
Thank you!
Go with Programmatically setting the softInputLayout in onCreate of the Fragment/activity.
OR
Try out any of these,
android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden",
"stateAlwaysHidden", "stateVisible",
"stateAlwaysVisible", "adjustUnspecified",
"adjustResize", "adjustPan"]
Add below attribute for your activity that holds your layout in the manifest file
android:windowSoftInputMode="adjustResize"
So, for example
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.androidxtest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Also you need to get the Button
out of the ScrollView
, I wrapped that into RelativeLayout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SignInActivity">
<ScrollView
android:id="@+id/sv_SignInLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorWhite"
android:fillViewport="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_SignIn"
android:layout_width="0dp"
android:layout_height="wrap_content"
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="wrap_content"
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="wrap_content"
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" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
<Button
android:id="@+id/btn_SignIn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="40dp"
android:layout_marginBottom="80dp"
android:layout_marginEnd="40dp"
android:background="@drawable/btn_rounded_purple"
android:textColor="@color/colorWhite"
android:text="sign in"
android:textAllCaps="false"
android:textSize="20sp" />
</RelativeLayout>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.