我将如何在 FrameLayout 中使用 ScrollView?
How would I use a ScrollView inside a FrameLayout?
我在让 ScrollView 正常运行时遇到了很多麻烦。我正在使用主从设计。 Master 滚动,因为它是一个 listView。当 Activity 在消失前膨胀时,选择时的详细信息将显示在我的 XML 中实现的滚动条几秒钟(Whosebug 不允许我 post 错误的屏幕截图,因为这是我的第一个 post)
当我尝试使用触摸输入滚动详细信息 Activity 时,没有任何反应。我已经尝试复制并粘贴 Mel 的解决方案,以解决 ScrollView doesn't work 的 post 中看似相同的问题。我还为父级、子级和 ScrollView 本身尝试了 match_parent 和 fill_parent 的所有可能的组合。任何帮助表示赞赏。我的 XML 代码如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ItemDetailActivity"
tools:ignore="MergeRootFrame">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fillViewport="true"
>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:layout_marginTop="20dp"
android:stretchColumns="1, 2"
>
<ImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:src="@drawable/bmp1"
android:layout_alignParentTop="true"
/>
<TableLayout
android:id="@+id/tableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginTop="20dp"
android:stretchColumns="1, 2">
<!-- Table Row 0 -->
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/tableRow0">
<TextView
android:id="@+id/priWeapon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/priWeapon" android:textColor="#000" android:textStyle="bold"
android:gravity="left"
android:padding="5dp"/>
<EditText
android:id="@+id/priWeaponEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/NA" android:textSize="14sp" android:textStyle="bold"
android:gravity="center"
android:focusable="false"
android:layout_weight="1"
android:cursorVisible="false"
android:longClickable="false"/>
</TableRow>
<!-- Table Row 1 -->
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/tableRow1">
<TextView
android:id="@+id/priWeaponRange"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/priMaxRange" android:textColor="#000"
android:gravity="left"
android:padding="5dp"/>
<EditText
android:id="@+id/priWeaponRangeEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/NA" android:textSize="14sp"
android:gravity="center"
android:focusable="false"
android:layout_weight="1"
android:cursorVisible="false"
android:longClickable="false"/>
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
</FrameLayout>
您的目标是使用 ImageView
的最大屏幕尺寸,然后向下滚动到(起初不可见)TableLayout
?那是不可能的。当您在 ImageView 上设置 android:layout_height="fill_parent"
时,它会使用最大可能(在您的示例中所有屏幕尺寸)space。所以没有 TableLayout
被渲染,也不需要滚动。您应该在 ImageView 中设置 android:layout_height="wrap_content"
。
源码的一些注释:
- 使用
match_parent
而不是 fill_parent
。自 API 级别 8 起已重命名
- 你在
TableLayout
中有一个没用的android:layout_below="@id/picture"
。 RelativeLayout
? 可能是以前版本的工件
- 删除
TableLayout
中的名称space 定义
我找到了解决办法!我没有尝试将格式应用于 Activity XML 本身,而是将其剪切并粘贴到 Activity 的片段 XML 之一,该片段没有一个框架布局。由于此更改,它现在可以完美滚动,同时在整个滚动过程中将标题栏保持在顶部,这正是我想要的行为。我已经在下面发布了最终代码。如果您有一个解决方案仍然允许我在 FrameLayout 中使用 scrollView,但我很乐意看到它以供将来参考。感谢您的帮助!
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fillViewport="true"
>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:layout_marginTop="20dp"
android:stretchColumns="1, 2"
>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_detail"
style="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:textIsSelectable="true"
tools:context=".ItemDetailFragment"/>
<ImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:src="@drawable/bmp1"
android:layout_alignParentTop="true"
/>
<TableLayout
android:id="@+id/tableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginTop="20dp"
android:stretchColumns="1, 2">
<!-- Table Row 0 -->
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/tableRow0">
<TextView
android:id="@+id/priWeapon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/priWeapon" android:textColor="#000" android:textStyle="bold"
android:gravity="left"
android:padding="5dp"/>
<EditText
android:id="@+id/priWeaponEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/NA" android:textSize="14sp" android:textStyle="bold"
android:gravity="center"
android:focusable="false"
android:layout_weight="1"
android:cursorVisible="false"
android:longClickable="false"/>
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
我在让 ScrollView 正常运行时遇到了很多麻烦。我正在使用主从设计。 Master 滚动,因为它是一个 listView。当 Activity 在消失前膨胀时,选择时的详细信息将显示在我的 XML 中实现的滚动条几秒钟(Whosebug 不允许我 post 错误的屏幕截图,因为这是我的第一个 post)
当我尝试使用触摸输入滚动详细信息 Activity 时,没有任何反应。我已经尝试复制并粘贴 Mel 的解决方案,以解决 ScrollView doesn't work 的 post 中看似相同的问题。我还为父级、子级和 ScrollView 本身尝试了 match_parent 和 fill_parent 的所有可能的组合。任何帮助表示赞赏。我的 XML 代码如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ItemDetailActivity"
tools:ignore="MergeRootFrame">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fillViewport="true"
>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:layout_marginTop="20dp"
android:stretchColumns="1, 2"
>
<ImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:src="@drawable/bmp1"
android:layout_alignParentTop="true"
/>
<TableLayout
android:id="@+id/tableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginTop="20dp"
android:stretchColumns="1, 2">
<!-- Table Row 0 -->
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/tableRow0">
<TextView
android:id="@+id/priWeapon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/priWeapon" android:textColor="#000" android:textStyle="bold"
android:gravity="left"
android:padding="5dp"/>
<EditText
android:id="@+id/priWeaponEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/NA" android:textSize="14sp" android:textStyle="bold"
android:gravity="center"
android:focusable="false"
android:layout_weight="1"
android:cursorVisible="false"
android:longClickable="false"/>
</TableRow>
<!-- Table Row 1 -->
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/tableRow1">
<TextView
android:id="@+id/priWeaponRange"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/priMaxRange" android:textColor="#000"
android:gravity="left"
android:padding="5dp"/>
<EditText
android:id="@+id/priWeaponRangeEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/NA" android:textSize="14sp"
android:gravity="center"
android:focusable="false"
android:layout_weight="1"
android:cursorVisible="false"
android:longClickable="false"/>
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
</FrameLayout>
您的目标是使用 ImageView
的最大屏幕尺寸,然后向下滚动到(起初不可见)TableLayout
?那是不可能的。当您在 ImageView 上设置 android:layout_height="fill_parent"
时,它会使用最大可能(在您的示例中所有屏幕尺寸)space。所以没有 TableLayout
被渲染,也不需要滚动。您应该在 ImageView 中设置 android:layout_height="wrap_content"
。
源码的一些注释:
- 使用
match_parent
而不是fill_parent
。自 API 级别 8 起已重命名
- 你在
TableLayout
中有一个没用的android:layout_below="@id/picture"
。RelativeLayout
? 可能是以前版本的工件
- 删除
TableLayout
中的名称space 定义
我找到了解决办法!我没有尝试将格式应用于 Activity XML 本身,而是将其剪切并粘贴到 Activity 的片段 XML 之一,该片段没有一个框架布局。由于此更改,它现在可以完美滚动,同时在整个滚动过程中将标题栏保持在顶部,这正是我想要的行为。我已经在下面发布了最终代码。如果您有一个解决方案仍然允许我在 FrameLayout 中使用 scrollView,但我很乐意看到它以供将来参考。感谢您的帮助!
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fillViewport="true"
>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:layout_marginTop="20dp"
android:stretchColumns="1, 2"
>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_detail"
style="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:textIsSelectable="true"
tools:context=".ItemDetailFragment"/>
<ImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:src="@drawable/bmp1"
android:layout_alignParentTop="true"
/>
<TableLayout
android:id="@+id/tableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginTop="20dp"
android:stretchColumns="1, 2">
<!-- Table Row 0 -->
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/tableRow0">
<TextView
android:id="@+id/priWeapon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/priWeapon" android:textColor="#000" android:textStyle="bold"
android:gravity="left"
android:padding="5dp"/>
<EditText
android:id="@+id/priWeaponEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/NA" android:textSize="14sp" android:textStyle="bold"
android:gravity="center"
android:focusable="false"
android:layout_weight="1"
android:cursorVisible="false"
android:longClickable="false"/>
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>