首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在app:layout_behavior之后,安卓NestedScrollView的大小错误

在app:layout_behavior之后,安卓NestedScrollView的大小错误
EN

Stack Overflow用户
提问于 2015-06-03 14:22:30
回答 3查看 13K关注 0票数 20

由于谷歌已经发布了android的设计支持库,所以可以在不实现自定义代码的情况下完成许多很好的事情。虽然我已经测试了这个库中的自定义视图,但我发现了更糟糕的事情,我不知道这是不是一个bug。

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

当我取下app:layout_behavior="@string/appbar_scrolling_view_behavior"的时候,NestedScrollView就是他的全部尺寸了。

但是当我移除布局行为时,工具栏并没有折叠。

有什么办法解决这个问题吗?示例布局文件可在以下位置找到:https://github.com/Smove/cheesesquare/blob/stackoverflow/app/src/main/res/layout/activity_detail.xml

您可以从我的github分支stackoverflow构建cheesesquare

EN

回答 3

Stack Overflow用户

发布于 2020-08-17 00:03:36

使用@natario的答案,如果你为孩子设置一个填充(在我的例子中是LinearLayout),它看起来会更好:

代码语言:javascript
复制
<androidx.core.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"
                android:layout_gravity="fill_vertical">
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:paddingBottom="?attr/actionBarSize">
                <!--Rest of the code-->

或者在Kotlin中,你可以这样做:

代码语言:javascript
复制
 coordinator.doOnLayout {
        nestedScrollView.minimumHeight = resources.displayMetrics.heightPixels - with(TypedValue().also {theme.resolveAttribute(android.R.attr.actionBarSize, it, true)}) {
            TypedValue.complexToDimensionPixelSize(data, resources.displayMetrics)}
    }
票数 1
EN

Stack Overflow用户

发布于 2021-04-17 18:38:35

CollapsingToolbarLayout添加android:minHeight="?attr/actionBarSize"

票数 0
EN

Stack Overflow用户

发布于 2015-06-13 01:33:43

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

我的代码:

代码语言:javascript
复制
    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)) {
            };
        }
    });
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30612310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档