Android-v4 PagerTabStrip导致IllegalStateException-必须以精确宽度测量
Android-v4 PagerTabStrip导致IllegalStateException-必须以精确宽度测量,android,android-viewpager,Android,Android Viewpager,一个新的观察结果——我尝试了与独立活动和AppWidget配置视图相同的ViewPager——它经常作为配置视图崩溃,同时始终作为一个简单的活动运行良好 另一个观察结果-如果配置布局是ViewPager作为根,则不会发生崩溃。如果ViewPager嵌入FlowLayout或RelativeLayout中,则它经常崩溃 我在AppWidget配置xml中使用带有PagerTabStrip的v4 ViewPager,它在大多数情况下都能正常工作 但是,当加载视图时涉及某些处理时,我会出现此错误(应
java.lang.IllegalStateException: Must measure with an exact width
at android.support.v4.view.PagerTitleStrip.onMeasure(PagerTitleStrip.java:428)
at android.view.View.measure(View.java:8335)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1350)
at android.view.View.measure(View.java:8335)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
...etc...
来自android.support.v4.view.PagerTitleStrip.onMeasure()的代码片段-
如何控制宽度模式
上面所有的堆栈都发生在我的代码之外
在我的代码中,我试图排除许多因素,最终我可能成功地找出了一个根本原因:
当我添加一个模拟的“工作”时,每个片段(X30片段)有5毫秒的睡眠时间,我得到了上面的错误,当删除它时,错误似乎消失了。
尝试将工作移动到onCreate()-没有任何影响
public static class TestFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.splash, container, false);
try {
Thread.sleep(5); // << mock work causes quite consistent error
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i(TAG, "..onCreateView");
return v;
}
}
公共静态类TestFragment扩展了片段{
@凌驾
创建视图上的公共视图(更平坦的充气机,
视图组容器,捆绑包savedInstanceState){
视图v=充气机。充气(右布局。飞溅,容器,假);
试一试{
Thread.sleep(5);//终于解决了!(为此浪费了2天):
这是一句话:
android:background="@drawable/dialog_full_holo_dark"
我将其替换为:
android:background="@color/black"
问题就解决了。
错误中没有任何东西表明这一点,而且它不是确定性的。通过消除-添加代码>测试>再次
这很可能是Android代码中的一个bug,可能是视图布局管理中的一些竞争条件
希望我节省了两天的时间让开发人员在这里碰车
[更新]
在另一个项目中,我通过使用框架布局
包装查看页面
解决了这个问题。我将所需的背景设置为框架布局
,并将@color/transparent
设置为查看页面
这非常简单且有效:
public class PagerTabStripBugfix extends PagerTabStrip {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(
MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY),
heightMeasureSpec);
}
}
我也遇到了这个问题,我通过简单地添加以下行来解决它:
xmlns:tools="http://schemas.android.com/tools"
当我添加android.support.v4.view.PagerTitleStrip
和actionbarsherlock
时,这个错误发生在我身上。我通过添加android:layout\u gravity=“top”解决了这个问题
进入该标签。谢谢,我在9个月前就解决了这个问题,但它可能会帮助其他人。你能解释一下为什么这段代码能解决这个问题吗?谢谢,我目前无法测试它来验证,但我将来会这样做。我在另一个项目中也遇到了同样的问题,并且在谷歌搜索中找到了我自己的帖子。所以我有机会验证——很遗憾它在我的情况下不起作用。到android.support.v4.view.PagerTabStrip
标记?(在我的情况下没有解决)
public class PagerTabStripBugfix extends PagerTabStrip {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(
MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY),
heightMeasureSpec);
}
}
xmlns:tools="http://schemas.android.com/tools"