我如何在FrameLayout中使用ScrollView?

时间:2015-04-10 19:19:11

标签: android xml scrollview master-detail android-framelayout

我在让ScrollView正常运行方面遇到了很多麻烦。我使用的是Master-Detail设计。主人滚动,因为它是一个listView。选中的详细信息将显示我的XML中实现的滚动条几秒钟,当活动膨胀之前消失(Stackoverflow赢了,因为这是我的第一篇文章,所以我允许发布错误的屏幕截图)

当我尝试使用触摸输入滚动详细信息活动时,没有任何反应。我曾尝试将梅尔的解决方案复制并粘贴到ScrollView doesn't work帖子中的相同问题。我还为父,子和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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:4)

我找到了解决方案!我没有尝试将格式应用于Activity XML本身,而是将其剪切并粘贴到Activity的Fragment XML中,而这些XML没有frameLayout。由于这种变化,它现在可以完美滚动,同时在整个滚动条中保持标题栏的顶部,这正是我想要的行为。我已经发布了下面的最终代码。如果你有一个解决方案仍然允许我在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>

答案 1 :(得分:1)

您的目标是使用ImageView的最大屏幕尺寸,然后向下滚动到(首先看不见)TableLayout?多数民众赞成不可能。在ImageView上设置android:layout_height="fill_parent"时,它会使用最大可能空间(在您的示例中为所有屏幕大小)空间。因此,不会呈现TableLayout,也不需要滚动。您应该在ImageView中设置android:layout_height="wrap_content"

关于源代码的一些注释:

  • 使用match_parent代替fill_parent。它自API等级8起重命名
  • android:layout_below="@id/picture"中有一个无用的TableLayout。是否使用RelativeLayout
  • 的先前版本中的工件
  • 删除TableLayout
  • 中的命名空间定义