Search code examples
androidactionbarsherlock

ActionbarSherlock - crashing with a list_navigation error about layout_height attribute


I have this implementation of the list_navigation of ActionbarSherlock:

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Context context = getSupportActionBar().getThemedContext();
    ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
            context, R.array.locations, R.layout.sherlock_spinner_item);
    list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);

    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    getSupportActionBar().setListNavigationCallbacks(list, this);     

And this is my xml for list_navigation.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="20dip">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:text="@string/list_navigation_content" />
    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

And here is the array of items for the navigation:

<resources>
    <string-array name="locations">
        <item>Home</item>
        <item>Learn</item>
        <item>Services</item>
        <item>Next Steps</item>
    </string-array>
</resources>

And the dropdown renders. The crash happens when I choose one of the items. Here is the crash report:

java.lang.RuntimeException: Binary XML file line #20: You must supply a layout_height attribute.
        at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491)
        at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:5319)
        at android.view.ViewGroup$LayoutParams.<init>(ViewGroup.java:5271)
        at android.view.ViewGroup.generateLayoutParams(ViewGroup.java:4471)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:477)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371)
        at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:415)
        at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:569)
        at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:565)
        at android.widget.Spinner.measureContentWidth(Spinner.java:513)
        at android.widget.Spinner$DropdownPopup.show(Spinner.java:739)
        at android.widget.Spinner.performClick(Spinner.java:453)
        at android.view.View$PerformClick.run(View.java:14105)
        at android.os.Handler.handleCallback(Handler.java:605)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4424)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
        at dalvik.system.NativeStart.main(Native Method)

Would anyone know why this happens and how to fix it?

Thank you!


Solution

  • Your problem is similar to this link. It seems the root cause still hasn't been found, but you can solve it by either calling

    setTheme(R.style.Theme_Sherlock_Light)
    

    in your your activity onCreate() method. Alternatively, you can modify the sherlock_spinner_dropdown_item.xml in folder actionbarsherlock\res\layout-v14 the line

    android:layout_height="?attr/dropdownListPreferredItemHeight"
    

    to

    android:layout_height="48dp"