Android NestedScrollView在app:layout_behavior后大小错误该怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

由于Google发布了针对android的设计支持库,因此无需实现自定义代码即可完成许多好事。虽然我在这个库中测试了自定义视图,但是我发现了一个更糟糕的东西,而且我不知道这是否是一个错误。

我在github上找到了cheesesquare项目。在activity_detail.xml(布局文件)中,NestedScrollView中有3个CardView。如果删除它们中的2个,则可以看到NestedScrollView没有父级的完整大小(match_parent)。NestedScrollView绑定到父视图的底部。http://i.stack.imgur.com/BXl7w.png

当我删除NestedScrollView时,它的全尺寸app:layout_behavior="@string/appbar_scrolling_view_behavior"

但是,当我删除布局的行为,工具栏不崩溃。

提问于
用户回答回答于

我遇到了这个问题并修正了添加:

android:layout_gravity="fill_vertical"

当然,NestedScrollView需要某种孩子(即它不能为空),否则工具栏不会崩溃。

更新

虽然这对小内容效果很好,但我注意到它存在一些显示较长内容的问题,例如activity_detail.xml上面的完整内容。问题是你不能滚动到内容的最底部 - 它在底部是无法访问的。

从我的测试中,我可以发现缺少的部分与折叠的工具栏一样大(或者至少这是它看起来对我来说)。为了解决这个问题,并为小型和大型内容提供可靠的解决方案,您应该添加一个layout_marginBottomScrollView,以便测量并释放缺失的底部部分。从而:

android:layout_gravity="fill_vertical"
android:layout_marginBottom="?attr/actionBarSize"

或者你给的任何尺寸Toolbar

但仍然

使用此解决方案以小内容滚动,即使内容刚好在顶部对齐,也不会像大内容滚动一样顺畅。我会使用,直到库修复来。

UPDATE2

看起来这是在v22.2.1中修复的。

用户回答回答于

使用RecyclerView替换NestedScrollView,修复这个bug设置项数1,即ViewHolder返回你真实的contentView;

我的代码:

    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

    recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
    // 添加分割线
    recyclerView.addItemDecoration(new DividerItemDecoration(getApplicationContext()));

    recyclerView.setAdapter(new Adapter<ViewHolder>() {

        @Override
        public int getItemCount() {
            return 1;
        }

        @Override
        public void onBindViewHolder(ViewHolder holder, int arg1) {
            WebView view = (WebView) holder.itemView;
            view.getSettings().setJavaScriptEnabled(true);
            view.loadUrl("http://www.baidu.com");
        }

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
            return new ViewHolder(inflater.inflate(R.layout.webview, arg0, false)) {
            };
        }
    });

扫码关注云+社区