草庐IT

android - 减少android中gridlayout的行/列数

coder 2023-11-25 原文

我需要一个可以在 3×3 和 4×4 之间切换的动态 gridlayout。我可以 setRowCountsetColumnCount 从 3 到4 但不是从 4 到 3。它会显示以下问题:

Caused by: java.lang.IllegalArgumentException: rowCount must be greater than or equal to the maximum of all grid indices (and spans) defined in the LayoutParams of each child.

是否有任何解决方法可以使用 gridlayout 实现此目的?

最佳答案

我意识到这个问题已经很老了,但是对于今天仍然遇到这个异常的人,我将提供一个解释,可能会阐明缩小 GridLayout 的工作原理以及我认为它是/正在抛出异常的原因对于 OP。

简而言之:

GridLayout 的 subview 在缩小后可能会占用不在 GridLayout 网格内的单元格,这会导致 OP 提到的 IllegalArgumentException。为避免这种情况,请在实际调用 setRowCount()setColumnCount() 之前移除将占据 GridLayout 网格外部单元格的 subview 。这可以通过 GridLayout.removeView(aboutToBeIllegalChild); 或使用 GridLayout.removeAllViews(); 删除整个布局来完成。

在龙:

调用 GridLayout.setRowCount() 所做的只是指定布局应包含的新行数。但是,它不会与 GridLayout 当前包含的 subview 混淆,也不会指定 Spec( subview 占据的列和行) ).

异常基本上告诉我们,并且文档确认,GridLayout 不允许其任何 subview 占据 GridLayout 之外的单元格> 网格。例如,当网格仅为 4 x 1 时,布局将不允许 subview 占用单元格 (5, 1)

这让我们明白了为什么最初的发帖人能够成功地动态增加 GridLayout 的尺寸,而在减少它时却失败了。扩大尺寸时,如果网格动态接收额外的行或列,则任何已附加到具有指定单元格的 GridLayout 的 subview 仍将放置在合法单元格中。当减少网格的尺寸时,放置在将因删除行或列而消失的单元格中的 subview 现在将被视为非法。

要解决此问题,您必须通过调用 GridLayout.removeView(aboutToBeIllegalChild); 预先从其父级 GridLayout 中删除那些(即将成为)非法 subview ;或者只需调用 GridLayout.removeAllViews(); 即可删除整个 GridLayout

希望这对您有所帮助!

关于android - 减少android中gridlayout的行/列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514673/

有关android - 减少android中gridlayout的行/列数的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - 是否可以让 ActiveRecord 为使用 :joins option? 加载的行创建对象 - 2

    我需要做这样的事情classUser'User',:foreign_key=>'abuser_id'belongs_to:gameendclassGame['JOINabuse_reportsONusers.id=abuse_reports.abuser_id','JOINgamesONgames.id=abuse_reports.game_id'],:group=>'users.id',:select=>'users.*,count(distinctgames.id)ASgame_count,count(abuse_reports.id)asabuse_report_count',:

  3. ruby - 减少数组时使用 Hash.new 作为初始值 - 2

    我有一个这样的数组[1,1,2,3,3,3,4,5,5]我想计算每个数字出现的次数,我正在尝试这样做[1,1,2,3,3,3,4,5,5].reduce(Hash.new(0)){|hash,number|hash[number]+=1}问题是当我尝试运行它时出现以下错误NoMethodError:undefinedmethod`[]='for1:Fixnumfrom(irb):6:in`blockinirb_binding'from(irb):6:in`each'from(irb):6:in`reduce'from(irb):6我能像这样设置初始值吗,还是我弄错了?

  4. ruby-on-rails - 如何(大量)减少 Rails 应用程序中的 SQL 查询数量? - 2

    在我的Rails应用程序中,我有users,它可以有许多invoices,而invoices又可以有许多payments。现在在dashboardView中,我想总结一个user曾经收到的所有payments,按年、季度或月。付款也分割为毛额、Netty和税额。user.rb:classUser:items).allpayments_with_invoice.select{|x|range.cover?x.date}.sum(&:"#{kind}_amount")endend发票.rb:classInvoicepayment.rb:classPaymentdashboards_cont

  5. Ruby 相当于 "grep -C 5"以获取匹配项周围的行的上下文? - 2

    我搜索了一下,但我一定是使用了错误的术语-ruby​​是否有办法grep查找字符串/正则表达式并返回周围的5行(上方和下方)?我知道我可以调用"grep-C5..."或什至编写我自己的方法,但这似乎是ruby​​应该有的东西,我只是没有使用正确的搜索词。 最佳答案 您可以使用正则表达式来完成。这是我们要搜索的字符串:s=%{ThefirstlineThesecondlineThethirdlineThefourthlineThefifthlineThesixthlineTheseventhlineTheeightlineThenin

  6. ruby - 减少挂起 Sinatra 应用程序 - 2

    我正在尝试将Bootstrap添加到Sinatra应用程序中。我已经设置了编译路径bootstrap.less和responsive.less.在Web浏览器中分别加载两个样式表会按预期工作。但是当我尝试在html页面中使用它们时,我的应用程序挂起。我只能用kill-9停止应用程序.似乎Lessimports和multiplestylesheets以某种方式导致应用程序挂起。我能够隔离问题:app.rbrequire'rubygems'require'bundler/setup'require'sinatra'require'less'get'/'dohaml:indexendget'

  7. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  8. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  9. ruby - 在 Rails 应用程序中导入 CSV 时忽略具有空白值的行 - 2

    我有一个允许用户导入CSV数据的应用程序。一切正常,直到用户开始导入CSV文件中包含空白行的数据。我正在使用以下内容从CSV文件中获取行:CSV.readlines(import_file,headers:true,skip_blanks:true)我认为如果我将选项添加到skip_blanks它会这样做,但事实并非如此。关于如何忽略空白行的任何想法。谢谢! 最佳答案 这应该可行CSV.open(import_file,skip_blanks:true).reject{|row|row.all?(&:nil?)}编辑您请求了read

  10. ruby-on-rails - 如何在 Rails 控制台中将数组的每个元素打印在各自的行中? - 2

    当我运行Rails控制台时,如何在单独的行中显示每个项目?而不是>Post.all=>#,#它会显示为>Post.all=>#,#类似于Perl调试器中的x。我试过了Post.all.each{|e|e.inspect+"\n"}但这只会让事情变得更糟,而且不是很方便。我看到了RubyonRails:prettyprintforvariable.hash_set.inspect...isthereawaytoprettyprint.inpsectintheconsole?和https://github.com/michaeldv/awesome_print但这似乎行不通irb(main

随机推荐