ActionBarSherlock — стиль содержит ключ с неверной записью

Я пытаюсь использовать ActionBarSherlock в одном конкретном действии, которое я объявил в манифесте следующим образом:

<activity
        android:name=".activities.Bla"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock" />

Мой код активности таков:

public class Bla extends SherlockFragmentActivity implements ActionBar.OnNavigationListener {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bla);
    getSupportActionBar().setTitle("");
    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

    Context context = getSupportActionBar().getThemedContext();
    ArrayAdapter<CharSequence> list =
        ArrayAdapter.createFromResource(context, R.array.cartaz_filters, R.layout.actionbar_spinner_item);
    list.setDropDownViewResource(R.layout.actionbar_spinner_dropdown_item);
    getSupportActionBar().setListNavigationCallbacks(list, this);
  }

  @Override
  public boolean onNavigationItemSelected(int itemPosition, long itemId) {
    return true;
  }
}

Однако каждый раз, когда я запускаю это в Android 2.1, я получаю следующую ошибку:

E/ResourceType(9672): Style contains key with bad entry: 0x01000000

Я думаю, что это может быть связано с этим вопросом: Читать новые атрибуты темы на старой платформе но я не знаю, как это решить.

Какие-либо предложения? Спасибо!


person Hugo Fernandes    schedule 13.03.2012    source источник
comment
На какой API вы ориентируетесь и каковы ваши максимальные/минимальные уровни API в вашем AndroidManifest.xml?   -  person dymmeh    schedule 13.03.2012
comment
Android: maxSdkVersion = 15 Android: minSdkVersion = 7   -  person Hugo Fernandes    schedule 13.03.2012


Ответы (1)


Это связано с тем, что вы используете атрибуты темы, которых нет на платформе, на которой вы запускаете свое приложение. Несмотря на гигантский красный журнал ошибок, который он добавляет, это скорее предупреждение, поскольку оно не влияет на другие атрибуты. Новые атрибуты никогда не считываются на старых платформах.

Связанный вопрос от меня был моей попыткой не требовать использования зеркальных атрибутов ABSv4.

Если вы действительно хотите избавиться от ошибки, вы можете создать два набора своих стилей. Один в values/ для панели действий совместимости и один в values-v14/, которые используют атрибуты с префиксом для собственной панели действий.

И пожалуйста, пожалуйста, пожалуйста, пожалуйста, не используйте maxSdkVersion. Вместо этого используйте targetSdkVersion.

person Jake Wharton    schedule 13.03.2012
comment
Спасибо! Я использую targetSdkVersion. maxSdkVersion был моей последней попыткой исправить ошибку. - person Hugo Fernandes; 14.03.2012
comment
У меня много стилей, и я не могу понять, какой из них вызывает проблему. Есть ли способ найти его на основе шестнадцатеричного кода ресурса? - person gsingh2011; 26.11.2012
comment
У меня тот же вопрос, что и у @gsingh2011. Помогает ли шестнадцатеричный код определить проблему? - person Eric K; 22.10.2014
comment
Регистрация getResources().getResourceName(id), например, getResources().getResourceName(0x7f0a00f7), в большинстве случаев даст вам имя ресурса стиля. - person Frank; 16.02.2015