【发布时间】:2014-05-06 01:50:32
【问题描述】:
我在我的应用程序中使用了 GridLayout,它运行良好。现在我也必须支持 android 3.xx,所以我包含了 android-support-library-v7。我只是在所有地方更改了 GridLayout 和 LayoutParams 的导入语句。我现在可以构建项目,但是当我运行应用程序时,它会因 NoSuchMethodError 异常而崩溃。
我关注了这些steps to include the support library
这里是堆栈跟踪:
03-27 13:37:13.454: E/AndroidRuntime(23016): FATAL EXCEPTION: main
03-27 13:37:13.454: E/AndroidRuntime(23016): java.lang.NoSuchMethodError: android.support.v4.view.ViewCompat.getLayoutDirection
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout.isLayoutRtlCompat(GridLayout.java:675)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout.getDefaultMargin(GridLayout.java:660)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout.getMargin1(GridLayout.java:671)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout$Axis.computeMargins(GridLayout.java:1547)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout$Axis.getLeadingMargins(GridLayout.java:1558)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout.getMargin(GridLayout.java:683)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout.getTotalMargin(GridLayout.java:692)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout.measureChildWithMargins2(GridLayout.java:897)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout.measureChildrenWithMargins(GridLayout.java:911)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.support.v7.widget.GridLayout.onMeasure(GridLayout.java:950)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.measure(View.java:15848)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1052)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.onMeasure(LinearLayout.java:590)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.measure(View.java:15848)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.HorizontalScrollView.measureChildWithMargins(HorizontalScrollView.java:1229)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.HorizontalScrollView.onMeasure(HorizontalScrollView.java:301)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.measure(View.java:15848)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.measure(View.java:15848)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.measure(View.java:15848)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.measure(View.java:15848)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.ListView.setupChild(ListView.java:1918)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.ListView.makeAndAddView(ListView.java:1843)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.ListView.fillDown(ListView.java:675)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.ListView.fillSpecific(ListView.java:1333)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.ListView.layoutChildren(ListView.java:1633)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.AbsListView.onLayout(AbsListView.java:2012)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.layout(View.java:14289)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.layout(ViewGroup.java:4559)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.layout(View.java:14289)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.layout(ViewGroup.java:4559)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.layout(View.java:14289)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.layout(ViewGroup.java:4559)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.layout(View.java:14289)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.layout(ViewGroup.java:4559)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.layout(View.java:14289)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.layout(ViewGroup.java:4559)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.View.layout(View.java:14289)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewGroup.layout(ViewGroup.java:4559)
03-27 13:37:13.454: E/AndroidRuntime(23016): at android.view.ViewRootImpl.perfor
编辑:代码
public class TableRenderingView extends GridLayout{
private Context mContext;
public TableRenderingView(Context context){
super(context);
mContext = context;
setUseDefaultMargins(true);
setAlignmentMode(ALIGN_BOUNDS);
setRowOrderPreserved(false);
}
...
}
当我尝试在 LinearLayout 中动态添加此扩展类时发生异常
TableRenderingView trv = new TableRenderingView(context);
View v = trv.populate(gridRowData);
LinearLayout ll = ((LinearLayout) tableContainerView.getChildAt(0));
ll.removeAllViews();
ll.addView(v);
【问题讨论】:
-
能否也请把代码贴出来?
-
代码跨类。当我实例化 GridLayout 时,我得到了这个异常。
标签: android android-support-library android-gridlayout