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!
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"