Pracuję nad użyciem nowo dodanego paska narzędzi, który został wprowadzony w Lollipop i bibliotece AppCompat-v7. Postępowałem zgodnie z tym przewodnikiem na temat konfigurowania paska narzędzi. Zauważyłem, że kiedy wywołujesz coś, co wywołuje kontekstowy pasek narzędzi Actionbar (np. Zaznaczanie tekstu do kopiowania / wklejania), przesuwa pasek narzędzi w dół na stronie. Na dole strony możesz zobaczyć, o czym mówię:
Zasadniczo tak to skonfigurowałem. Mam pasek narzędzi zdefiniowany w pliku xml, którego używam z tagami dołączania:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"/>
Następnie w moim widoku tworzę instancję:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root"
tools:context=".MainActivity">
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- Rest of view -->
</LinearLayout>
W kodzie skonfigurowałem to tak:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Czy ktoś wie, jak to zrobić, aby kontekstowy pasek akcji znalazł się nad paskiem narzędzi?
Odpowiedzi:
Aktualizacja:
Rozwiązanie: użyj właściwości windowActionModeOverlay . Ustaw to w swoim motywie:
a tryb akcji zostanie wyświetlony nad paskiem akcji, zamiast przesuwać go w dół. (Jeśli nie używasz najnowszego AppCompat, musisz dodać do właściwości przedrostek „android:”). Zasadniczo informuje AppCompat, że masz pasek narzędzi umieszczony w górnej części ekranu i że powinien narysować na nim tryb ActionMode.
Stara odpowiedź / obejście:
Natrafiłem na ten sam problem. Bez względu na to, jaki motyw ustawię, zawsze przesuwa pasek narzędzi ustawiony jako ActionBar. Próbowałem z biblioteką wsparcia i bez niej, ale to nie miało znaczenia.
Niestety nie udało mi się tego naprawić, dlatego stworzyłem obejście. W moim
ActionModeCallback
„sonCreateActionMode
ukryć pasek działań:i
onDestroyActionMode
pokazuję to jeszcze raz:Ukrywanie / pokazywanie odbywa się tak szybko, że nie jest to zauważalne na moich urządzeniach testowych. Istnieje oczywiście pewna wada: chociaż animacja Enter nadal działa, animacja wyjścia z kontekstowego paska akcji ginie, ponieważ pasek narzędzi natychmiast się nad nim pojawia. Ale dopóki nie znajdziemy lepszego rozwiązania, myślę, że utknęliśmy z tym.
(Moja aktywność faktycznie rozszerza
BaseActivity
klasę niestandardową, która ma wywoływaną metodęgetActionBarToolbar()
, pobraną z kodu źródłowego aplikacji Google I / O 2014 , dzięki czemu mogę łatwo pobrać pasek narzędzi Toolbar:Szkoda, że aplikacja I / O nie używa kontekstowego paska akcji.)
źródło
Nie zaczynaj go od aktywności, ale na pasku narzędzi. W tobie aktywność:
i musisz użyć
źródło
AppCompatActivity.startSupportActionMode(callback)
, aby uzyskać zgodność z atrybutami, takimi jakapp:iconTint
pozycja menu xmls.Tylko mały dodatek: dla
do pracy ważne jest, aby zadzwonićsuper.onCreate(savedInstanceState)
ZANIM zadzwoniszsetContentView(R.layout.your_activity)
w swojej działalności. To naprawdę robi różnicę w tym przypadku!źródło
W moim przypadku
<item name="windowActionModeOverlay">true</item>
nie działa, ale ta praca:<item name="android:windowActionModeOverlay">true</item>
Theandroid
jest kluczem.źródło
<item name="windowActionModeOverlay">true</item>
z paska narzędzi appcompat, w przeciwnym razie korzystasz zandroid
przestrzeni nazw.Rozwiązanie Jacoba działało dla mnie, ale kontekstowy pasek ActionBar był przezroczysty, a pasek narzędzi widoczny przez niego. Można to rozwiązać w następujący sposób:
Motyw „AppTheme.Base” musi być tym, który jest zastosowany do paska narzędzi.
Więcej szczegółów dotyczących kontekstowego stylu ActionBar:
jak dostosować kontekstowy pasek akcji za pomocą appCompat w projektowaniu materiałów
źródło
Bardzo przydatna metoda przeniesienia paska narzędzi na pierwszy plan
toolbar.bringToFront()
źródło
View.bringToFront()
jest bardzo ciężką operacją i ogólnie należy jej unikać za wszelką cenę.Kolejny mały dodatek: upewnij się, że ustawiłeś przynajmniej pusty ekran w aktywności poprzez
setContentView(R.layout.empty_screen)
załadowanie całego interfejsu użytkownika we fragmentach (ft.replace(android.R.id.content, fragment)
).źródło