Android FrameLayouts并排独立内部滚动

时间:2017-02-02 11:42:12

标签: android android-layout android-fragments scrollview

我尝试设置一个平板电脑布局,左侧是列表,右侧是详细信息窗格。单击列表项时,详细信息窗格中将填充一系列比左侧列表长的卡。我希望详细信息窗格和列表(回收站视图)可以独立滚动,但我无法理解如何执行此操作。

这是我的main_content.axml - 将recyclerview加载到framelayout listcontainer中,并将详细信息放入详细信息容器中(在发生这种情况之前删除textview) - 但这两个框架仍然滚动为' as一个' - 整个应用程序滚动,框架不会单独滚动。

顺便说一句,main_content.xml包含在nestedscrollview中,因此我可以使用折叠工具栏 - 您可以在此处查看main.xml:http://pastebin.com/raw/PGsVuAp6

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

  <ScrollView
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:layout_weight="1">
      <FrameLayout
          android:id="@+id/listcontainer"
          android:layout_weight="1"
          android:layout_width="450dp"
          android:layout_height="match_parent" >
      </FrameLayout>
  </ScrollView>

  <View android:layout_height="fill_parent"
    android:layout_width="1dp"
    android:background="?android:attr/listDivider"/>

  <ScrollView
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:layout_weight="2">
    <FrameLayout
          android:id="@+id/detailscontainer"
          android:layout_width="match_parent"
          android:layout_weight="2"
          android:layout_height="match_parent" >
      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:id="@+id/nodetails"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:text="No inspection selected."/>

    </FrameLayout>
  </ScrollView>

</LinearLayout>

为了清楚起见,请修改以下列出的内容:http://pastebin.com/raw/1Wm8Tntf -----以及此处加载到详细信息窗格中的内容:http://pastebin.com/raw/FetE8JP1

编辑2:这里的图片展示了两个框架,列表和细节应如何滚动,独立于一个和另一个,即滚动细节时,列表不应移动,当您滚动列表时,detial不应该移动:

enter image description here

1 个答案:

答案 0 :(得分:1)

而不是FrameLayout的孩子ScrollView使用LinearLayout而不是android:fillViewport="true",它会起作用!或者在ScrollView

中试试<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ScrollView android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_weight="1"> <LinearLayout android:orientation="vertical" android:id="@+id/listcontainer" android:layout_weight="1" android:layout_width="450dp" android:layout_height="match_parent" > <LinearLayout android:background="#897" android:layout_width="match_parent" android:layout_height="300dp"></LinearLayout> <LinearLayout android:background="#127" android:layout_width="match_parent" android:layout_height="300dp"></LinearLayout> <LinearLayout android:background="#908" android:layout_width="match_parent" android:layout_height="300dp"></LinearLayout> </LinearLayout> </ScrollView> <View android:layout_height="fill_parent" android:layout_width="1dp" android:background="?android:attr/listDivider"/> <ScrollView android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_weight="2"> <LinearLayout android:orientation="vertical" android:id="@+id/listcontainerTwo" android:layout_weight="1" android:layout_width="450dp" android:layout_height="match_parent" > <LinearLayout android:background="#897" android:layout_width="match_parent" android:layout_height="300dp"></LinearLayout> <LinearLayout android:background="#127" android:layout_width="match_parent" android:layout_height="300dp"></LinearLayout> <LinearLayout android:background="#908" android:layout_width="match_parent" android:layout_height="300dp"></LinearLayout> </LinearLayout> </ScrollView> </LinearLayout>

enter image description here

示例xml:

LinearLayout

FrameLayout只是一个容器,并且大多数情况下使用ScrollView方案都有问题,如果你使用{ "error": { "statusCode": 401, "name": "Error", "message": "login failed", "code": "LOGIN_FAILED", "stack": "Error: login failed\n ..." } } 无论如何它滚动我已经测试过了。你可以找到smiler问题&gt; here