[英]Percentage based guideline in ConstraintLayout moves when view is made visible, android
上下文:我正在制作注冊頁面的一部分。 一旦用戶輸入他們的 email,他們點擊繼續並輸入他們的密碼。 點擊 continue 會觸發 Kotlin 代碼,該代碼將密碼視圖的可見性設置為 VISIBLE。
頂部 TextView 受限於屬性“app:layout_constraintGuide_percent=".3"。我希望這意味着它永遠不會移動。
問題:當密碼輸入視圖通過 Kotlin 代碼設置為可見時,所有視圖都莫名其妙地向下移動。 就好像 30% 變成了 35%,當然事實並非如此。
我查看了這篇文章並嘗試使用偏見,但它會產生完全相同的行為。
fragment_sign_up_email.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:padding="@dimen/sign_up_in_outer_padding"
android:animateLayoutChanges="true"
tools:context=".SignUpEmailFragment">
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/lato_bold"
android:text="@string/xxxx"
android:textSize="@dimen/title_font_size"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline3"/>
<TextView
android:id="@+id/textView5"
android:layout_width="20dp"
android:layout_height="wrap_content"
android:fontFamily="@font/lato"
android:text="@string/or"
android:textSize="@dimen/subtitle_font_size"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4" />
<TextView
android:id="@+id/sign_in_button_on_sign_up_screen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/lato_bold"
android:text="@string/sign_in"
android:textColor="@color/main_green"
android:textSize="@dimen/subtitle_font_size"
app:layout_constraintStart_toEndOf="@+id/textView5"
app:layout_constraintTop_toBottomOf="@+id/textView4"/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/email_field_sign_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:hint="@string/email_hint"
app:boxBackgroundColor="@color/white"
app:errorEnabled="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sign_in_button_on_sign_up_screen"
app:startIconDrawable="@drawable/common_google_signin_btn_icon_light">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/email_input_sign_up"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/password_field_sign_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password_hint"
app:boxBackgroundColor="@color/white"
android:visibility="gone"
app:errorEnabled="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/email_field_sign_up"
app:startIconDrawable="@drawable/common_google_signin_btn_icon_light">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/password_input_sign_up"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/sign_up_email_pass_continue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/continue_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/password_field_sign_up" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent=".3" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
SignUpEmailFragment.kt:
package com.example.xxxxx
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import com.example.xxxxx.databinding.FragmentSignUpEmailBinding
/**
* Fragment that handles the sign in procedure
*/
class SignUpEmailFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
val binding: FragmentSignUpEmailBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_sign_up_email , container, false)
binding.signUpEmailPassContinue.setOnClickListener{view: View ->
continueIsClicked(binding)
}
return binding.root
}
private fun continueIsClicked(binding: FragmentSignUpEmailBinding) {
if(emailIsValid(binding)){
binding.passwordFieldSignUp.setVisibility(View.VISIBLE);
if(passwordIsValid(binding)){
//TODO navigate to next page
}
}
}
private fun passwordIsValid(binding: FragmentSignUpEmailBinding): Boolean {
//TODO implement
return true
}
private fun emailIsValid(binding: FragmentSignUpEmailBinding): Boolean {
//TODO implement
return true
}
companion object {
fun newInstance() = SignUpEmailFragment()
}
}
點擊前:截圖1
點擊后:截圖2
我想到了。
出現此 Fragment 的androidx.fragment.app.FragmentContainerView
具有屬性android:layout_height="wrap_content"
。 我將其更改為android:layout_height="match_parent"
並且它工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.