我创建了一个简单的登录活动,其外观如下:
我希望在将电子邮件EditText聚焦后,整个布局都将移至“登录”按钮的底部。
我写了这段代码:
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"
,因为如果删除它,整个布局会缩小。
谢谢!
我创建了一个简单的Sign-In活动,其外观如下:我希望一旦将电子邮件EditText聚焦后,整个布局将移至Sign In按钮的底部。我写了这个...
以编程方式在Fragment / activity的onCreate中设置softInputLayout。
为在清单文件中保存布局的活动添加以下属性