Установка splitActionBarWhenNarrow из Java на Android
Мне интересно, можно ли сказать андроиду разделить ActionBar только тогда, когда я этого захочу, но на том же самом Activity. Мой вариант использования заключается в том, что по умолчанию действия, которые у меня есть на панели, являются ОК для свертывания, но при длительном нажатии на элемент я вхожу в режим "Редактировать задачу", где панель действий используется для предоставления некоторых сокращений отредактируйте задачу. Я бы хотел, чтобы этот "режим редактирования" использовал панель действий split, так как у нее есть значок, который лучше видеть сразу, и держать панель действий "не разделена" для общего вида - там, где это просто "настройки", и др.
Итак, вопрос в том, могу ли я установить android:uiOptions="splitActionBarWhenNarrow"
из кода вместо жесткого кода в манифесте?
PS: Я использую ActionBar Sherlock.
Ответы
Ответ 1
Собственная панель действий может быть установлена в режим разделения, вызвав getWindow().setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW)
.
Параметры пользовательского интерфейса Windows не могут быть прочитаны после их установки, поэтому с помощью ActionBarSherlock вы должны вызвать getSherlock().setUiOptions(...)
. Вам не нужно звонить обоим. ABS будет автоматически вызывать вышеуказанное, когда это необходимо.
Это должно быть сделано до создания декора. Самое безопасное место, чтобы поставить этот вызов, чтобы всегда было в вашей деятельности onCreate
метод до, вы вызываете super.onCreate
.
Ответ 2
Взгляните на ActionBarSherlockSamples, SplitActionModes.java. В этом примере, когда нажата кнопка "Пуск", в нижней части экрана отображается панель действий разделения:
Вызовите это, чтобы отобразить панель действий split:
mMode = startActionMode(new AnActionModeOfEpicProportions());
mMode - это тип ActionMode, и вам нужно называть его "finish()", когда вы хотите, чтобы панель действий исчезла.
AnActionModeOfEpicPropotions - это реализация ActionMode.Callback:
private final class AnActionModeOfEpicProportions implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// add your menu here...
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// handles your action menu clicked event
return true;
}
}
Ответ 3
Я просто пытался, если бы у меня мог быть ActionBar в одном Activity и Split один в другом.
Я добавил панель действий в onCreateOptionsMenu в обоих действиях и добавил . GetWindow() setUiOptions (ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);
прямо перед onCreate в деятельности, которую я хотел разделить, и, к моему удивлению, это сработало.:)
Затем я использовал getActionBar(). hide(), чтобы скрыть панель действий split при нажатии кнопки, и она тоже сработала.
Я предполагаю, что если вы можете попробовать это, вы можете получить эту работу и настроить для своих нужд. Скрыв его сначала, а onLongClick покажет его и после того, как будут предприняты необходимые действия, снова спрятайте его.
(Единственное, что я пропустил, это проверить это с помощью библиотек поддержки. Будет делать и обновлять вас)
Надеюсь, это может помочь вам каким-то образом. Счастливое кодирование:)
Ответ 4
private final class AnActionModeOfEpicProportions implements ActionMode.Callback
{
@Override
public boolean onCreateActionMode(ActionMode mode,Menu menu)
{
// add your menu here...
}
@Override
public boolean onActionItemClicked(ActionMode mode,MenuItem item)
{
// handles your action menu clicked event
returntrue;
}
}