Android-GridView与ScrollView共用的冲突问题(类似ListView)

本文详细介绍了在嵌套ScrollView的情况下,ListView只显示一行多一点的问题,并提供了解决方案通过重写ListView或GridView的OnMeasure方法。具体展示了自定义GridView和MyGridView的实现方式,以及如何在XML布局文件中正确配置它们,以解决ScrollView嵌套导致的ListView高度显示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于ListView,GridView本身都继承于ScrollView,一旦在ScrollView中嵌套ScrollView,在ScrollView中嵌套使用ListView或者GridView,ListView只会显示一行多一点。两者进行嵌套,即会发生冲突。核心解决方案:重写ListView或者GridView的OnMesure方法。重写GridView方法,使其在绘制时重新计算GridView高度

---------------------

import android.content.Context;

import android.util.AttributeSet;
import android.widget.GridView;
/** 
 *
 * @author  作者 :desaco
 *
 * @version 创建时间:2016-1-22 上午9:43:33 
 *
 */
public class CustomGridView extends GridView{
public CustomGridView(Context context) {  
        super(context);  
    }  
  
    public CustomGridView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    public CustomGridView(Context context, AttributeSet attrs, int defStyle) {  
        super(context, attrs, defStyle);  
    }  
  
    @Override  
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
        int expandSpec = MeasureSpec.makeMeasureSpec(   
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);   
        super.onMeasure(widthMeasureSpec, expandSpec);   
    }
}

----------------------------------

public class MyGridView extends GridView {   
    private boolean haveScrollbar = true;   
    public MyGridView(Context context) {   
        super(context);   
    }   
    public MyGridView(Context context, AttributeSet attrs) {   
        super(context, attrs);   
    }   
    public MyGridView(Context context, AttributeSet attrs, int defStyle) {   
        super(context, attrs, defStyle);   
    }   
    /**  
     * 设置是否有ScrollBar,当要在ScollView中显示时,应当设置为false。 默认为 true  
     *   
     * @param haveScrollbars  
     */   
    public void setHaveScrollbar(boolean haveScrollbar) {   
        this.haveScrollbar = haveScrollbar;   
    }   
    @Override   
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   
        if (haveScrollbars == false) {   
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);   
            super.onMeasure(widthMeasureSpec, expandSpec);   
        } else {   
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);   
        }   
    }   
}

------------------------

XML代码如下:

<cn.com.example.fang_com.beta_content.iwidgets.CustomGridView
                    android:id="@+id/common_show_workbenchs_gview"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/white_color"
                    android:listSelector="#00000000"
                    android:numColumns="2"
                    android:horizontalSpacing="1dp"    
    android:verticalSpacing="1dp"
                    android:scrollbars="none" />

---------------------------------

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View.MeasureSpec; 
import android.widget.ListView; 
 
public class TestListView extends ListView{ 
    public TestListView(Context context) 
        super(context); 
        // TODO Auto-generated constructor stub 
    
    public TestListView(Context context, AttributeSet attrs) 
        super(context, attrs); 
        // TODO Auto-generated constructor stub 
    
    public TestListView(Context context, AttributeSet attrs, int defStyle) 
        super(context, attrs, defStyle); 
        // TODO Auto-generated constructor stub 
    
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
        // TODO Auto-generated method stub 
        int expandSpec MeasureSpec.makeMeasureSpec(  
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);  
        super.onMeasure(widthMeasureSpec, expandSpec); 
    

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc xls。Apache POI 提供了 HSSF XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值