【问题标题】:Layout inside horizontalScrollView that is the size of the screen水平滚动视图内的布局,即屏幕的大小
【发布时间】:2018-02-15 21:25:50
【问题描述】:

我是 android 新手,一直在寻找解决方案,但到目前为止还没有运气。我想创建一个类似于下图的布局。

我想要一个与屏幕大小相同的线性布局。然后再有另一个与屏幕大小相同但在屏幕外的线性布局。然后我可以在两个虚拟“屏幕”之间滚动。

有一篇有趣的文章解释了如何扩展 scrollView 类,这样我就可以得到一个很酷的捕捉效果,所以如果我可以让它工作,我的应用会感觉很像在主屏幕之间滚动。

我已经阅读了有关权重以及 scrollView 的 fillViewport="true" 的信息。恐怕我不明白如何将这些与 Horizo​​ntalScrollView 一起使用以使 linearLayouts 填满屏幕。我尝试了各种 fill_parent 和 wrap_content 的组合,但无济于事。

在我看来,只要我在构建子视图(每个“屏幕”中的元素)时考虑到屏幕可变性,此功能不会损害应用程序在具有不同屏幕的设备之间的可移植性。

这是我尝试的 XML 的一个简单示例:

<HorizontalScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/HorizontalScrollView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true">

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/txtTestBox"
            >
        </EditText>
    </LinearLayout>

    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Button 1"
        />

    </LinearLayout>

</LinearLayout>

</HorizontalScrollView>

不幸的是,这甚至与我正在寻找的东西不相近。希望这可以做到……

感谢您的任何帮助或建议。

【问题讨论】:

  • 我认为放置指向我所指的“快照”代码的链接可能会有所帮助。可以在这里找到:blog.velir.com/index.php/2010/11/17/…
  • 我希望实现的功能的另一个示例可以在适用于 android 的 Firefox 移动应用程序中找到。位于页面左侧的选项卡栏(在您滚动之前离开屏幕)似乎以某种方式创建了一个可滚动的表面,该表面具有一个与屏幕确切大小的子视图(它创建一个“屏幕”,即大小的物理电话屏幕,当用户滚动时,他们可以查看他们的选项卡和屏幕)。希望这能说明我的问题。

标签: android


【解决方案1】:

See here 解决方案是在ScrollView. 上使用android:fillViewport="true",无需修复LinearLayout 宽度。

     <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:fillViewport="true"
            android:orientation="vertical"
            android:scrollbars="none">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                //create your views
            </LinearLAyout>
</HorizontalScrollView>

【讨论】:

  • android:fillViewport="true" 解决了我的问题
【解决方案2】:

水平滚动视图可以左右无限缩放,因此“填充父级”很可能不会像您期望的那样在内部布局上工作。您是否尝试过在内部布局上明确指定宽度?

类似:

<HorizontalScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/HorizontalScrollView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true">

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="400dp"
    android:layout_height="fill_parent">

.....

</LinearLayout>


</HorizontalScrollView>

【讨论】:

  • 这是我现在采用的方法。我希望避免手动格式化每个视图,但似乎这是唯一的选择。谢谢!
【解决方案3】:

您是否需要在一个屏幕中包含几乎 2 个屏幕?为什么不把它们分开呢?你可以扩展GestureDetector,所以当滚动手势发生时,它会自动“捕捉”到下一个屏幕

【讨论】:

  • 好问题,我对此很感兴趣,因为我认为它可以提供更直观的界面。由于我的界面有些复杂,我认为“窥视”下一个屏幕上的内容的能力将证明是有用的。另外,在这一点上,我想知道如何做到这一点,因为我知道它可以做到(我一直在努力解决这个问题,所以我不想放弃)。如果我找不到答案,我打算回到你建议的方式。
  • 顺便说一下,我所指的“快照”代码的链接可以在这里找到:blog.velir.com/index.php/2010/11/17/…
  • 这并不是问题的真正答案。希望有更好的答案。或许我可以在火狐移动源代码中找到答案……
猜你喜欢
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多