ListView 与 ScrollView 嵌套使用

MacOS下微信小程序源码提取与逆向实战:从找到.wxapkg到完整还原 本文详细介绍了在MacOS系统下进行微信小程序源码提取与逆向分析的完整实战流程。从定位沙盒机制中的.wxapkg缓存文件,到搭建Node.js环境与配置wxappUnpacker工具链,再到执行核心反编译命令并处理分包等复杂情况,提供了清晰的操作步骤。文章还汇总了Node版本、依赖缺失、文件乱码等常见问题的解决方案,旨在帮助开发者、安全研究人员高效完成小程序安全审计与学习。 阅读详情

先看一种效果
这里写图片描述

看上去这种布局效果,不需要嵌套ScrollView也可以实现,我知道的还有另外两种方式。

1:最外层一个LinearLayout布局,属性垂直,内含两个子View,一个是上面滑动的部分P1,一个是底部固定的部分P2。使用layout_weight分配高度权重,P2给一个固定高度,P1 ayout_weight指定为1占满剩余空间。然后P1是一个ListView,分别使用addHeadView和addFooterView添加头部和尾部的布局即可。

2:使用getItemViewType,如果不嫌麻烦。

3:使用ScrollView嵌套ListView
虽然这个案例使用方法1可以实现了,但是如果稍微麻烦一点,比如实现下面这种有两个ListView的效果。

这里写图片描述

这里有两个ListView,你可能和我一样,会想到把其中一个ListView加到另一个ListView的HeaderView里面,按1里面说的那样。

如果这样做,个人感觉不是很舒服,我也没试过,最后使用方法3实现。

下面把代码贴出来,没什么技巧性,只是有几个需要注意的地方。

  • Sample4Activity
public class Sample4Activity extends AppCompatActivity {

    private ListView mListView1, mListView2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample4);

        mListView1 = (ListView) findViewById(R.id.list1);
        mListView1.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getData()));

        mListView2 = (ListView) findViewById(R.id.list2);
        mListView2.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getData()));
    }

    private String[] getData() {
        String[] data = new String[10];
        for (int i = 0; i < data.length; i++) {
            data[i] = "item " + i;
        }
        return data;
    }
}
  • R.layout.activity_sample4
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:orientation="vertical"
            tools:context="com.lxq.customview.Sample4Activity">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:scaleType="fitXY"
                android:src="@drawable/banner" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#eeaa"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:text="TextView1" />

                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:text="TextView2" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:text="TextView3" />

                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:text="TextView4" />

                </LinearLayout>
            </LinearLayout>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="列表1" />

            <com.lxq.customview.sample4.MyListView
                android:id="@+id/list1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="列表2" />

            <com.lxq.customview.sample4.MyListView
                android:id="@+id/list2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="80dp"
                android:layout_weight="1"
                android:background="#aeae"
                android:gravity="center"
                android:text="Function1"
                android:textSize="18sp" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="80dp"
                android:layout_weight="1"
                android:background="#eeaa"
                android:gravity="center"
                android:text="Function2"
                android:textSize="18sp" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="80dp"
                android:layout_weight="1"
                android:background="#acdc"
                android:gravity="center"
                android:text="Function3"
                android:textSize="18sp" />

        </LinearLayout>
    </ScrollView>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="#a33"
        android:gravity="center"
        android:text="Bottom Layout" />
</LinearLayout>
  • MyListView
public class MyListView extends ListView {

    public MyListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

需要注意的地方:

  1. MyListView
    解决ListView嵌套ScrollView只显示一行,不能显示完整的问题。实现原理参考:http://blog.youkuaiyun.com/hanhailong726188/article/details/46136569

  2. android:focusable=”true” 和 android:focusableInTouchMode=”true”
    在ScrollView第一个子控件LinearLayout的属性设置了以上两个属性,如果不设置,当进入该页面时,会自动滑到ListView的第一行,可以删除这两行代码看下效果。具体原因没深究。

另外在项目开发中还遇到一个关于ScrollView的属性 : android:fillViewport=”true”。
这个属性是何用途,下面举个例子。

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

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="460dp"
        android:fillViewport="true">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#bb3"
            android:text="占满ScrollView空间"
            android:textSize="16sp" />
    </ScrollView>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#a33"
        android:gravity="center"
        android:text="Bottom Layout" />
</LinearLayout>

TextView想占满ScrollView的整个空间,看上去代码是没问题的,但是效果确实这样:

这里写图片描述

现在在ScrollView标签中添加属性:android:fillViewport=”true” 再看效果:
这里写图片描述

android:fillViewport=”true” 官方解释:

/**
 * When set to true, the scroll view measure its child to make it fill the currently
 * visible area.
 */
@ViewDebug.ExportedProperty(category = "layout")
private boolean mFillViewport;

当设置为真时,滚动视图测量它的子视图,使其填充当前可见的区域。

【数据集6】全球人工不透水面积GAIA(清华数据) 全球人工不透水面GAIA简介及其应用 阅读详情

相关推荐

从零开始:小鼠Bulk RNA-seq全流程实战指南

本文提供了一份详尽的小鼠Bulk RNA-seq全流程实战指南,涵盖从软件环境搭建、原始数据质控与清洗、序列比对、基因定量到下游差异表达分析与功能富集。内容面向生物信息学新手,通过清晰的代码示例和步骤解析,帮助读者系统掌握Bulk RNA-seq数据分析的核心技能,并产出可靠的生物学洞见。

lake5的博客 715

ScrollView中嵌套ListView,ListView无法滚动

ScrollView中嵌套ListView,ListView无法滚动

qq_42605889的博客 1042

别再傻傻分不清!5分钟搞懂倾斜摄影里‘地面分辨率’和‘模型精度’到底啥关系

本文深入解析倾斜摄影中‘地面分辨率’与‘模型精度’的关系,帮助读者快速理解两者的本质区别与内在关联。通过实战案例和公式计算,详细说明如何从航飞设计到精度验证全流程控制,避免常见认知误区,并针对不同应用场景提供精度需求建议。

weixin_33700350的博客 477

滑动冲突研究之ScrollView+ListView

有一定经验的Android开发者应该都遇到过类似的需求,看图 简单来说就是外层一个ScrollView,在内部又需要一个ListView来展示数据,在滑动时ListView上部的控件需要先收起来。 现在为了达到这种效果,主流是两种做法: 1.编写一个UnscrollListView,即不可滑动的ListView,然后将其嵌套在ScrollView中,这样就避免了滑动冲突的问题了。但是这样

javine的专栏 1952

【ERROR】ERROR1: PROJ: proj_create_from_database: Cannot find proj.db - 环境变量配置与路径修复指南

本文详细解析了地理空间数据处理中常见的【ERROR】ERROR1: PROJ: proj_create_from_database: Cannot find proj.db 错误。该错误的根源是PROJ库无法定位其核心数据文件proj.db。文章提供了从问题诊断到修复的完整指南,包括如何在不同系统(Windows/macOS/Linux)和安装方式(Conda/pip/源码编译)下找到正确的proj.db文件路径,并通过设置PROJ_LIB环境变量(临时、代码内或永久)彻底解决问题,同时给出了进阶排查技巧和

m2n3o4p5的博客 557

从零构建安全通信:mbedtls与ECDSA在嵌入式系统中的实战指南

本文详细介绍了如何在嵌入式系统中使用mbedtls和ECDSA实现安全通信,重点探讨了ECDSA相比RSA的优势、mbedtls的模块化裁剪策略、密钥安全存储方案以及完整的签名验签流程。通过实战案例和优化技巧,帮助开发者在资源受限环境下构建高效可靠的安全通信系统。

weixin_28338005的博客 685

如何在ScrollView中嵌套ListView和GridView

public void setListViewHeightBasedOnChildren(GridView listView) { ListAdapter listAdapter = listView.getAdapter(); int lineNum = 3; //GridView 每行的个数 if (listAdapter == nul

努力后才会有收获....加油! 2149

windows中搭建sonic云真机环境/云真机环境搭建-基于docker容器部署

基于Windows系统搭建Sonic远程云真机环境实现通过浏览器操作手机端系统

雾林小妖的博客 1016

Listview中嵌套Listview或者ScrollView中嵌套Listview【显示不完整和滑动冲突】

问题描述 解决方法 ScrollView布局中嵌套Listview显示不正常 1自定义一个Listview继承自Listview 2重新计算Listview的高度 在Listview中嵌套Listview的滑动冲突 效果 问题描述: 一个滑动控件或布局里面,添加另外一个可以滑动的控件; 工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题。 解决方法: 1.ScrollView布局中嵌套Li

Venus 的博客 866

AIGC实战——基于Transformer实现音乐生成

Transformer 是最流行的音乐生成技术之一,因为音乐可以视为一个序列预测问题,Transformer 模型将音符视为一个个符号的序列(类似于句子中的单词),从而用于生成音乐。Transformer 模型基于先前音符预测下一个音符,生成音乐作品。在本节中,将学习如何处理音乐数据,并应用 Transformer 生成与给定训练集风格相似的音乐。

盼小辉丶的博客 1万+

【Bug已解决】Codex 报错 MCP client for context7 failed to start: program not found 解决方案

方案适用场景推荐指数改用绝对路径Windows 上最常见、最有效的解决方式⭐⭐⭐⭐⭐提前全局安装避免依赖 npx减少运行时网络下载的不确定性⭐⭐⭐⭐使用 .cmd 后缀Windows 平台快速尝试⭐⭐⭐⭐开启调试日志需要更精确定位失败原因⭐⭐⭐⭐统一封装启动脚本需要跨平台兼容多个 MCP 服务⭐⭐⭐报错的本质是Codex 启动 MCP 子进程时,无法正确定位配置文件中写的简写命令名对应的可执行文件,尤其容易发生在 Windows 平台上使用npx这类简写命令的场景。

一键难忘的博客 5814

ListView和ScrollView嵌套解决滑动冲突问题

首先,说明一下,我这里的ListView和ScrollView都是上下滑动的,如果是左右滑动,虽然差距不大,但就不能直接生搬硬套了。 1.解决ListView和ScrollView嵌套滑动冲突问题 当ListView放在ScrollView的布局中间,直接实现ListView的setOnTouchListener就可以了 listView.setOnTouchListener(new Vi...

ALee_130158的博客 2450

linux内核学习(八)---摄像头框架移植(上)

本章来开始进行摄像头的移植,同时回顾一下V4L2的整个框架

文艺小少年的博客 113

ScrollView和listView嵌套使用

ScrollView和listView嵌套使用,会出现无法自动测量的情况,需要重写listView的测量方法。 自定义listView。 public class InnerListView extends ListView {     public InnerListView(Context context) {         super(context);     }

marry_的博客 310

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ScrollView与ListView嵌套使用,导致ListView下拉失效

在一次项目开发中,在Scrollv中嵌套进ListView,当触摸ListView范围下拉时,整个展示页面滑动,而不是ListView内容滑动, 也就是说ListView滑动事件被ScrollView截掉(消费掉),没有向下子级View下传,而导致ListView无法滑动的效果, listview_list.setOnTouchListener...

aiqu2133的博客 224

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android ScrollView + ListView嵌套使用

首先需要自定义ListView public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { ...

Falcon2000的专栏 3356

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ScrollView与Listview嵌套使用时的滑动冲突问题

滑动冲突解决方案在我们的布局中有可能使用Scrollview嵌套Listview的情况,这时候如果不加任何的处理,就会发生滑动冲突问题,即Listview没有完全显示,也不能滑动,触摸事件被Scrollview拦截而使只有Scrollview在滑动。根据Android开发ViewGroup及View事件分发总结,我们可以用以下的方案来解决:根据对捕获到的事件,我们可以对事件作出判断(处理或不处理),

mXianLin的博客 2324

ScrollView+listview嵌套使用

ScrollView 建议使用【android.support.v4.widget.NestedScrollView】进行使用,不需要自定义重写ScrollView ,NestedScrollView用起来比自定义好用的多 主要解决listview 的高度问题即可 高度解决方案如下: 使用方法: if (lvAdapterLeft != null) { ...

唐衡三 552

listview和scrollview嵌套使用--解决方案

相信大家都知道listview和scrollview在嵌套使用的时候会有一点点小问题,那就是在运行后只显示一行的问题。遇到这个问题该如何解决呢?当然在度娘那里肯定也有不少的答案【解决方案应该是五种】,但是我只推荐使用两种,这两种是我经常用到的,也是解决此问题最简单的两种。下面就边贴代码边阐述: 首先,我先介绍一下自定义list view的方法: 首先创建一个MyListView的类,用

Coco 719

ScrollView与ListView嵌套使用

public void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; }

Deng 879

ScrollView中嵌套使用ListView,GridView

http://blog.youkuaiyun.com/wulianghuan/article/details/8627958 在ScrollView中嵌套使用ListView,ListView只会显示一行到两行的数据。起初我以为是样式的问题,一直在对XML文件的样式进行尝试性设置,但始终得不到想要的效果。后来在网上查了查,ScrollView和ListView两个View都有滚动的效果,在嵌套使用时

Laisx 838

ListView,GridView与ScrollView嵌套使用的故事

ListView,GridView 与scrollView嵌套使用出现的问题: 1, LV 与 GV显示不完整: 写一个类 继承LV或GV protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integ

qq_36029400的博客 281

Android--ScrollView中嵌套使用ListView

前几天由于需要,需要在一个垂直的ScrollView添加一个相同方向的ListView,但是默认的情况下是不行的,ListView会显示不完全。 后来在博客中找到了一种解决办法简便而有方便的操作,就是在ListView中的每个子项重新计算ListView的高度,再把高度作为LayoutParams中。下面简述这种方法的实现:1.创建自定义的ListView这里的ListViewInScrollVi

NoClay's Home 620

Android开发笔记之 RecyclerView和ScrollView嵌套使用,ListView和ScrollView嵌套使用对比

直接上代码:    1、 Activity的代码:public class MainActivity extends AppCompatActivity { private List&lt;String&gt; list; @Override protected void onCreate(Bundle savedInstanceState) { supe...

奋斗路上的文艺女青年的博客 1048

ScrollView嵌套使用ListView冲突的解决与分析

因为ScrollView与ListView都是具有滚动条的控件,所以嵌套在一起使用的时候可能会出现事件的冲突,比如我就遇见了ListView中只显示一条数据的问题。解决的办法,就是自定义了一个ListView,重写它的onMeasure()方法:    1 public class MyListView extends ListView { 2 3 public M

tangxueqin的博客 275

自定义ListView,既可以与Scrollview嵌套使用正常显示,也可以独立使用正常滑动

ListView与Scrollview嵌套使用时,只能显示一个item的高度,需要重写onMeasure方法,这样就可以显示完整了,但是ListView的高度就是所有子item的高度的和并且无法滑动,正好使用scrollview的滑动功能,二指完美结合。 @Override public void onMeasure(int widthMeasureSpec, int heightM...

qiantanlong的博客 385
上一篇: Activity四种启动模式
下一篇: 热补丁HotFix使用
OnlySnail
博客等级 码龄17年 51粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值