Android 布局问题,一个 ScrollView 中的几个 ListView

Posted

技术标签:

【中文标题】Android 布局问题,一个 ScrollView 中的几个 ListView【英文标题】:Android Layout Issues, Several ListViews in a ScrollView 【发布时间】:2013-01-04 10:51:08 【问题描述】:

首先 - 我知道,我不应该将 ListView 放入 ScrollView,因为 ListView 负责自己的垂直滚动。

无论如何,在我的情况下它是不同的 - 问题:

我有一个视图,其中显示了一些信息,也有一些操作。 这是一个示例屏幕:

Email1 是放置在 ListView 中的 ListItem。 Homepage 也是放置在第二个 ListView 中的 ListItem。 (我使用 ListViews,因为我无法像使用 ListItem 和 ListViews 那样设置按钮样式 - 另一个原因是,我可以显示 Second Mail: Email2 if exists

无论如何。现在的问题是,布局看起来像这样:

<ScrollView>(父)--> <LinearLayout>(子父)--> <LinearLayout>-->((它描述了电子邮件,或“Sonstiges”,与主页)--> @987654327 @(这里是 ListView)..

我遇到的问题是,当使用 ScrollView 时,它会切掉第二个元素,我看不到它,看这里:

在这里,我用黄色标记了它,是我可以点击 ListItem 的地方。它只显示了一点点,甚至无法显示第三个项目:

我尝试的是删除 ScrollView。好吧,现在它向我显示了第二个项目,但是在整个视图中,我需要滚动,因为信息和操作比我在一个“页面”上看到的要多。

一些 axml(它的“Aktionen”,从屏幕上方)其余的看起来完全像这样:

   <?xml version="1.0" encoding="utf-8"?>
    <ScrollView
      style="@style/ScrollView"
      xmlns:local="http://schemas.android.com/apk/res/INMobileCRM4Android.INMobileCRM4Android"
        xmlns:android="http://schemas.android.com/apk/res/android">
      <LinearLayout style="@style/LinearLayout">
        <LinearLayout style="@style/LinearLayoutSmall">
          <TextView
            style="@style/TextAktionen"   
            android:text="Aktionen" />
          <Mvx.MvxBindableListView
            local:MvxBind="'ItemsSource':'Path':'ActionsList','ItemClick':'Path':'ActionCommand'"
            android:layout_
            android:layout_
            android:cacheColorHint="#00000000"
            local:MvxItemTemplate="@layout/addressshowdataactionlistitem"/>
        </LinearLayout>
      </LinearLayout>
    </ScrollView>

风格:

  <style name="LinearLayout" parent="android:Theme">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>
    <item name="android:orientation">vertical</item>
    <item name="android:background">@string/backgroundPicture</item>
  </style>
    <style name="LinearLayoutSmall" parent="android:Theme">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:orientation">vertical</item>
  </style>
    <style name="ScrollView" parent="android:Theme">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
  </style>

ListItem 本身的 Style 并不是必需的。 我改成LinearLayout、FrameLayout、RelativeLayout,都是一样的。

希望有人能帮帮我..

【问题讨论】:

我问了一个关于 ScrollView 和 TimePicker 的类似问题,因为 TimePicker 处理它自己的滚动。虽然没有得到任何答案。我开始担心这是我们不应该做的事情。我真的需要它在我的应用程序中,否则我的布局将是半空的。 虽然很奇怪... 【参考方案1】:

我设法解决了我的 TimePicker 问题,这可能对您和您的 ListViews 有用。本质上,他们都想要同样的东西,控制你的触摸事件,所以你必须在你的 Java 文件中覆盖。

我通过在单独的 Java 文件中创建自定义 TimePicker 并在 XML 中将其作为视图调用来做到这一点。

或许你可以创建一个自定义的ListView,然后在文件末尾调用如下代码:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) 

    // Stop ScrollView from getting involved once you interact with the View
    if (ev.getActionMasked() == MotionEvent.ACTION_DOWN)
    
        ViewParent p = getParent();
        if (p != null)
            p.requestDisallowInterceptTouchEvent(true);
    
    return false;

在执行第一个触摸事件后,View 将获得焦点并接管 Scroll 职责。

【讨论】:

感谢答案,我不能这样做,因为我正在使用 Monodroid。无论如何 +1 的努力【参考方案2】:

由于这似乎是一个已知问题,请看这里:Scrolling with Multiple ListViews for Android,我将自己回答这个问题。

至少我为每个元素使用了一个 ListView。这行得通,但有点不好看,因为每个 ListView 现在只有一个 ListItem。

【讨论】:

以上是关于Android 布局问题,一个 ScrollView 中的几个 ListView的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局时的iOS黑条问题

覆盖其他配置中的资源 - Android studio

android布局 底部导航栏布局问题

请教一个关于Android Studio布局预览的问题

android 线性布局 居右

为啥在eclipes为创建一个android布局文件在R中没有自动生成