如何防止 FrameLayout 隐藏我的视图?
How can I prevent FrameLayout from shadowing my Views?
我的界面是这样的:
XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/profile_fields_container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/account_person_name_label" />
<EditText
android:id="@+id/person_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="150dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/account_person_emailId_label" />
<EditText
android:id="@+id/person_emailId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:minWidth="150dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/account_person_phoneNo_label" />
<EditText
android:id="@+id/person_phoneNo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="phone"
android:maxLength="10"
android:minWidth="150dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/account_person_password_label" />
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:minWidth="150dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/account_person_retypePassword_label" />
<EditText
android:id="@+id/retype_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:minWidth="150dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/learner_tutor_status_label" />
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/learner_tutor_status_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
<!--Floating Button-->
<Button
android:id="@+id/create_account"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="@string/create_account_string"
style="@style/Widget.AppCompat.Button.Colored"/>
</FrameLayout>
现在,您可以在底部看到 我来这里是为了...。这是一个下拉列表,当我选择其中一个选项时,我的代码动态地向层次结构添加了一些视图,但问题是它们不可见(不是全部;只是 我是a... 可见。)
我通过布局检查器检查了布局层次结构,发现层次结构仍然存在,但浮动按钮(创建帐户)遮住了它。
现在,我知道如果我用 LinearLayout
替换根 FrameLayout
,它将是可见的,但问题是如果那样我会点击 EditText
按钮,键盘将覆盖屏幕,同时覆盖创建帐户按钮。 我真的希望这个按钮一直显示在屏幕上。
有人知道我该如何解决这个问题吗?
您的布局不完全正确,因为您的浮动按钮一直隐藏在 ScrollView
的底部。您应该将 FrameLayout
替换为垂直 LinearLayout
(就像您说的那样),然后在软键盘弹出 [=] 时指定 activity 的 window 行为AndroidManifest.xml 文件中 activity 元素中的 13=] 属性。如果您使用 android:windowSoftInputMode="adjustResize"
,window 将相应地调整大小并且该按钮应该始终可见。
我的界面是这样的:
XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/profile_fields_container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/account_person_name_label" />
<EditText
android:id="@+id/person_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="150dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/account_person_emailId_label" />
<EditText
android:id="@+id/person_emailId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:minWidth="150dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/account_person_phoneNo_label" />
<EditText
android:id="@+id/person_phoneNo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="phone"
android:maxLength="10"
android:minWidth="150dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/account_person_password_label" />
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:minWidth="150dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/account_person_retypePassword_label" />
<EditText
android:id="@+id/retype_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:minWidth="150dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/learner_tutor_status_label" />
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/learner_tutor_status_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
<!--Floating Button-->
<Button
android:id="@+id/create_account"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="@string/create_account_string"
style="@style/Widget.AppCompat.Button.Colored"/>
</FrameLayout>
现在,您可以在底部看到 我来这里是为了...。这是一个下拉列表,当我选择其中一个选项时,我的代码动态地向层次结构添加了一些视图,但问题是它们不可见(不是全部;只是 我是a... 可见。)
我通过布局检查器检查了布局层次结构,发现层次结构仍然存在,但浮动按钮(创建帐户)遮住了它。
现在,我知道如果我用 LinearLayout
替换根 FrameLayout
,它将是可见的,但问题是如果那样我会点击 EditText
按钮,键盘将覆盖屏幕,同时覆盖创建帐户按钮。 我真的希望这个按钮一直显示在屏幕上。
有人知道我该如何解决这个问题吗?
您的布局不完全正确,因为您的浮动按钮一直隐藏在 ScrollView
的底部。您应该将 FrameLayout
替换为垂直 LinearLayout
(就像您说的那样),然后在软键盘弹出 [=] 时指定 activity 的 window 行为AndroidManifest.xml 文件中 activity 元素中的 13=] 属性。如果您使用 android:windowSoftInputMode="adjustResize"
,window 将相应地调整大小并且该按钮应该始终可见。