我目前正在开发一款大量使用 ViewPager 小部件的平板电脑应用程序。我还在屏幕上同时显示了多个 Viewpager。
现在我遇到了以下问题:
如果一个 ViewPager 滚动到下一页/上一页,它(当然)必须重新计算其布局并添加/删除 View 。我注意到 requestLayout 一直调用到 View Hierarchy 的顶部,因此使平板电脑屏幕上的 ALL View 无效(很多!)。 这是非常昂贵的。
我现在的问题是:是否有可能围绕 ViewPager 实现一个框架,它执行初始布局,然后不传播布局-请求 View 层次结构,因为我知道在初始布局之后布局,框架保持相同大小,不会改变。
我提出了以下框架,但效果不是很好,因为它不是 100% 的时间都有效。
public class MyFrame extends FrameLayout
{
// VARIABLE CONTROLLING THE DISPATCH OF THE LAYOUT
// REQUEST UP THE VIEW HIERARCHY
private boolean doLayout = true;
public MyFrame(Context context)
{
super(context);
doLayout = true;
}
@Override
public void requestLayout()
{
if (doLayout) // DO THE LAYOUT REQUEST UP TO THE TOP
super.requestLayout();
else
{
// JUST MEASURE MYSELF AND MY CHILDREN
measure(MeasureSpec.getMode(MeasureSpec.AT_MOST),
MeasureSpec.getMode(MeasureSpec.AT_MOST));
layout(getLeft(), getTop(), getRight(), getBottom());
}
doLayout = false;
}
}
感谢您的任何建议!
最佳答案
我知道这个问题有点老了,但我的回答可能会帮助其他人,因为您的问题和 Colin 的回答对我有帮助。
我遇到的问题跟你一模一样。有两种解决方案。 首先,您需要确保您的 ViewPager 将其 *layout_width* 和 *layout_height* 设置为 *match_parent*,并且 View 层次结构的组织方式使得 Android 不会得出结论认为它需要重新布局任何ViewPager 父布局。 例如,假设您有一个 RelativeLayout,其中有两个固定大小的 View ,一个在另一个下方,一个 ViewPager 在第二个 View 下方。在这种情况下,对 ViewPager 的任何更改都会传播到父布局。但是,如果将这两个固定大小的 View 和 ViewPager 放入 LinearLayout 中,则不会发生这种情况,布局请求将不会传播到 ViewPager 之外。更好的是,一个 ViewPager 页面上的布局请求也不会传播到其他页面。
第二种方案(其实更多的是方案的第二部分)是你的FrameLayout,但是修改成这样:
public class LayoutStopperFrameLayout extends FrameLayout {
private boolean doLayout;
public LayoutStopperFrameLayout(Context context) {
super(context);
doLayout = true;
}
public LayoutStopperFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
doLayout = true;
}
public LayoutStopperFrameLayout(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
doLayout = true;
}
public void setPropagateRequestLayout(boolean doLayout) {
this.doLayout = doLayout;
}
@Override
public void requestLayout() {
if (doLayout) {
// DO THE LAYOUT REQUEST UP TO THE TOP
super.requestLayout();
}
}
}
在我的应用程序中,我在 Fragment 的 onStart 和 onStop 方法中调用 setPropagateRequestLayout() 来分别关闭和打开布局请求传播。
关于android - 阻止 Android 布局我所有的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9868885/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'