Pregunta

I'm pretty new to layouts, but I was able to successfully make a pretty nice looking layout (for a tablet). In Eclipse, it works great. I made it all with the 'target' on Android 4.0 (ICS), but obviously my tablet only runs 3.0 (Honeycomb). When I realised the error, I changed the viewer/editing config to 3.2, but Eclipse won't even display the graphic of the layout anymore, it simply spits out:

com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup
    Exception details are logged in Window > Show View > Error Log
    The following classes could not be found:
    - GridLayout (Change to android.widget.GridLayout, Fix Build Path, Edit XML)

The error log pops out:

java.lang.ClassCastException: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:84)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:702)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:86)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:702)
at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
at android.view.LayoutInflater.inflate(LayoutInflater.java:367)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:324)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:321)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:372)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1317)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1071)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$ConfigListener.onConfigurationChange(GraphicalEditorPart.java:493)
at com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.onRenderingTargetChange(ConfigurationComposite.java:2192)
at com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.access$4(ConfigurationComposite.java:2157)
at com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite$2.widgetSelected(ConfigurationComposite.java:441)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3783)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1375)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1398)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1383)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1195)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3629)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3284)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
at org.eclipse.equinox.launcher.Main.run(Main.java:1408)

And here is my layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#4CBB17"
android:baselineAligned="false" android:weightSum="5"
>

<GridLayout
    android:id="@+id/gridLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:columnCount="1"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:weightSum="5" >

        <GridLayout
            android:id="@+id/gridLayout2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:background="#4CBB17"
            android:columnCount="7" >

            <Space
                android:layout_width="100dp"
                android:layout_height="15dp"
                android:layout_gravity="fill_horizontal" />

            <Space
                android:layout_width="117dp"
                android:layout_height="1dp"
                android:layout_column="0"
                android:layout_gravity="fill_horizontal"
                android:layout_row="0" />

            <Space
                android:layout_width="100dp"
                android:layout_height="15dp"
                android:layout_gravity="fill_horizontal" />

            <Space
                android:layout_width="100dp"
                android:layout_height="15dp"
                android:layout_gravity="fill_horizontal" />

            <Space
                android:layout_width="101dp"
                android:layout_height="15dp"
                android:layout_gravity="fill_horizontal" />

            <Space
                android:layout_width="2225dp"
                android:layout_height="1dp"
                android:layout_column="4"
                android:layout_gravity="fill_horizontal"
                android:layout_row="0" />

            <Space
                android:layout_width="1dp"
                android:layout_height="32dp"
                android:layout_column="0"
                android:layout_gravity="fill_horizontal"
                android:layout_row="0" />

            <ImageButton
                android:id="@+id/imageButton3"
                android:layout_column="2"
                android:layout_gravity="left"
                android:layout_row="1"
                android:src="@drawable/back_small" />

            <ImageButton
                android:id="@+id/imageButton4"
                android:layout_column="3"
                android:layout_gravity="left"
                android:layout_row="1"
                android:src="@drawable/back_small" />

            <ImageButton
                android:id="@+id/imageButton2"
                android:layout_column="4"
                android:layout_gravity="left"
                android:layout_row="1"
                android:src="@drawable/back_small" />

            <ImageButton
                android:id="@+id/imageView2"
                android:layout_column="1"
                android:layout_gravity="left"
                android:layout_row="1"
                android:src="@drawable/back_small" />
        </GridLayout>

        <GridLayout
            android:id="@+id/gridLayout3"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#4CBB17"
            android:columnCount="9" >

            <Space
                android:layout_width="1dp"
                android:layout_height="15dp"
                android:layout_gravity="fill_horizontal" />

            <Space
                android:layout_width="100dp"
                android:layout_height="15dp"
                android:layout_gravity="fill_horizontal"
                android:layout_row="1" />

            <Space
                android:layout_width="100dp"
                android:layout_height="15dp"
                android:layout_gravity="fill_horizontal" />

            <ImageButton
                android:id="@+id/imageView1"
                android:layout_column="8"
                android:layout_gravity="left"
                android:layout_row="1"
                android:src="@drawable/back" />

            <Button
                android:id="@+id/nextButton"
                android:layout_column="2"
                android:layout_gravity="left"
                android:layout_row="1"
                android:text="Next" />

        </GridLayout>

        <GridLayout
            android:id="@+id/gridLayout5"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="2" >

            <LinearLayout
                android:id="@+id/LinearLayout2"
                android:layout_width="match_parent"
                android:layout_height="207dp"
                android:layout_gravity="fill_horizontal"
                android:orientation="horizontal" >

                <Button
                    android:id="@+id/blackButton"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/blackbutton" android:layout_weight="1"/>

                <Button
                    android:id="@+id/redButton"
                    android:layout_width="match_parent"
                    android:layout_height="202dp"
                    android:layout_weight="1"
                    android:background="@drawable/redbutton" />
            </LinearLayout>
        </GridLayout>
    </LinearLayout>

</GridLayout>

</LinearLayout>

Ultimately, I'm able to install the app on my tablet, but it just crashes right away with this from LogCat:

    10-29 23:44:05.180: E/AndroidRuntime(14135): FATAL EXCEPTION: main
    10-29 23:44:05.180: E/AndroidRuntime(14135): java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.ajwest.irishpoker/ca.ajwest.irishpoker.IrishPokerActivity}: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at      android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1741)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1757)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.app.ActivityThread.access$1500(ActivityThread.java:123)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:998)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.os.Handler.dispatchMessage(Handler.java:99)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.os.Looper.loop(Looper.java:126)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.app.ActivityThread.main(ActivityThread.java:4002)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at java.lang.reflect.Method.invokeNative(Native Method)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at java.lang.reflect.Method.invoke(Method.java:491)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at dalvik.system.NativeStart.main(Native Method)
    10-29 23:44:05.180: E/AndroidRuntime(14135): Caused by: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.widget.AdapterView.addView(AdapterView.java:459)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:728)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:247)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.app.Activity.setContentView(Activity.java:1771)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at ca.ajwest.irishpoker.IrishPokerActivity.onCreate(IrishPokerActivity.java:30)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1705)
    10-29 23:44:05.180: E/AndroidRuntime(14135):    ... 11 more

Will re-making the whole layout with 2.3 selected fix this problem? That's sooo sucky...

¿Fue útil?

Solución

The GridLayout was introduced in Android 4.0. You can't use it in 3.0 or 3.2.

Otros consejos

Now that the Ice Cream Sandwich sources became available I had a look to see if it would be possible to use the newly introduced GridLayout on pre-4.0. And it is indeed possible. See my blog post about it at http://blog.peterkuterna.net/2011/11/using-new-gridlayout-on-pre-ice-cream.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top