Estou trabalhando no uso da barra de ferramentas recém-adicionada que foi introduzida no Lollipop e na biblioteca AppCompat-v7. eu segui este guia sobre a configuração da barra de ferramentas. Observei que, quando você invoca algo que abrirá a ActionBar contextual (como realçar o texto para copiar / colar), ele empurrará a barra de ferramentas para baixo na página. Você pode ver o que estou falando na imagem na parte inferior da página:
Então, essencialmente, eu configurei assim. Eu tenho a barra de ferramentas definida em um arquivo xml que eu uso com tags de inclusão:
<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"/>
Em seguida, instanciamo-o em minha opinião:
<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>
No código, eu configurei assim:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Alguém sabe como fazer isso para que a ActionBar contextual chegue ao topo da barra de ferramentas?
Respostas:
Atualizar:
Solução: use a propriedade windowActionModeOverlay . Defina isso no seu tema:
e o modo de ação será mostrado sobre a barra de ação em vez de pressioná-lo. (Se você não estiver usando o AppCompat mais recente, precisará adicionar o prefixo "android:" à propriedade). Basicamente, permite ao AppCompat saber que você tem uma barra de ferramentas localizada na parte superior da tela e que ela deve desenhar o ActionMode sobre ela.
Resposta antiga / solução alternativa:
Eu tive o mesmo problema. Independentemente do tema definido, ele sempre pressiona a barra de ferramentas que defini como ActionBar. Eu tentei com e sem a biblioteca de suporte, mas isso não importava.
Infelizmente, não consegui corrigi-lo, então criei uma solução alternativa. Nos meus
ActionModeCallback
,onCreateActionMode
escondo a barra de ação:e
onDestroyActionMode
eu mostro novamente:A ocultação / exibição acontece tão rapidamente que não é perceptível nos meus dispositivos de teste. É claro que há uma desvantagem: embora a animação de entrada ainda funcione, a animação de saída da barra de ação contextual se perde porque a Barra de Ferramentas aparece imediatamente sobre ela. Mas até encontrarmos uma solução melhor, acho que estamos presos a isso.
(Minha atividade, na verdade, está estendendo uma
BaseActivity
classe personalizada que possui um método chamadogetActionBarToolbar()
, extraído do código-fonte do aplicativo Google I / O 2014 , para que eu possa facilmente buscar a Barra de Ferramentas:Pena que o aplicativo de E / S não use a barra de ação contextual.)
fonte
Não o inicie em sua atividade, mas na barra de ferramentas. Na sua atividade:
e você tem que usar
fonte
AppCompatActivity.startSupportActionMode(callback)
, para obter compatibilidade com atributos comoapp:iconTint
no item xmls do menu.Apenas uma pequena adição: para
Para trabalhar, é importante ligarsuper.onCreate(savedInstanceState)
ANTES de ligarsetContentView(R.layout.your_activity)
em sua atividade. Realmente faz diferença neste caso!fonte
No meu caso,
<item name="windowActionModeOverlay">true</item>
não funcionou, mas este trabalho:,<item name="android:windowActionModeOverlay">true</item>
aandroid
é a chave.fonte
<item name="windowActionModeOverlay">true</item>
com a barra de ferramentas appcompat, caso contrário, usa oandroid
espaço para nome.A solução de Jacob funcionou para mim, mas a ActionBar contextual era transparente e a Barra de Ferramentas visível através dela. Isso pode ser resolvido da seguinte maneira:
O tema "AppTheme.Base" deve ser o aplicado à barra de ferramentas.
Mais detalhes sobre o estilo contextual do ActionBar:
como personalizar a barra de ação contextual usando appCompat no design de materiais
fonte
Método muito útil para colocar a barra de ferramentas na frente
toolbar.bringToFront()
fonte
View.bringToFront()
é uma operação muito pesada e geralmente deve ser evitada a qualquer custo.Outra pequena adição: defina pelo menos uma tela vazia na atividade via
setContentView(R.layout.empty_screen)
se você carregar a interface do usuário inteira em fragmentos (ft.replace(android.R.id.content, fragment)
).fonte