Estou mostrando a barra de ferramentas em DialogFragment Dentro do clique positivo de alertDialog. Aqui está meu trecho de código.
Snackbar snackbar = Snackbar.make(view, "Please enter customer name", Snackbar.LENGTH_LONG)
.setAction("Action", null);
View sbView = snackbar.getView();
sbView.setBackgroundColor(Color.BLACK);
snackbar.show();
Estou passando a visualização do fragmento de diálogo para a barra de ferramentas. Eu quero a cor de fundo preta? Como posso fazer isso? Estou retornando alertDialog no DialogFragment. E o tema que estou definindo para o diálogo é o seguinte
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">@color/accent</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">@color/primary</item>
<!-- Used for the background -->
<item name="android:background">@color/white</item>
</style>
Embora eu esteja definindo a cor de fundo como branco para a caixa de diálogo, ela deve ser substituída definindo a cor de fundo para a barra de ferramentas.
Respostas:
Tente definir a cor de fundo como esta:
Vai funcionar 100%!
fonte
snackBarView.getView().setBackgrondColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
sbView.setBackgroundColor(getResources().getColor(R.color.BLACK))
getResources#getColor
está obsoleto desde o nível 23 da API (Marshmallow) eContextCompat#getColor
deve ser usado em seu lugar.você pode fazer assim
fonte
Se você quiser definir uma cor de fundo para todos os seus Snackbars, basta substituir o
design_snackbar_background_color
valor em algum lugar dos seus recursos. Por exemplo:fonte
Como nenhuma das outras respostas forneceu uma substituição de estilo personalizado (que considero uma das formas de atualização mais seguras de fazer isso), posto aqui minha solução.
Eu posto uma solução que já aborda o tema new
AndroidX
(support design 28
).Desde que seu aplicativo use um personalizado chamado
MyAppTheme
emAndroidManifest.xml
:Crie (se ainda não o fez)
values/style.xml
substituindo o tema usado pelo seu aplicativo:e forneça suas cores em seu
values/colors.xml
arquivoATUALIZAÇÃO 2020
Como a solução acima remove o canto arredondado do fundo do lanche, definir o plano de fundo dessa forma usa o design de barra de lanche legado, se você quiser preservar o design do material, pode.
substituir
android:background
comandroid:backgroundTint
Se você está visando API <21, então se você decidir usar o snackbar legado para API <21, você pode definir seu abouve
MySnackbarStyle
em res / values-21 / folder e deixar o estilo anterior - legacy - em sua pasta res / values .Se você tem como alvo a API <21 e deseja ter o estilo de material da lanchonete também nesses níveis de API mais baixos, você pode alterar o estilo da lanchonete em seus res / valores / desta forma:
e peça emprestado
my_snackbar_background
do repositório oficial , desta forma:Aqui está um repositório de playground .
fonte
my_snackbar_background
. Sem ele, o Snackbar desenhou com cantos arredondados.Versão Kotlin (com extensão ):
Crie em um arquivo (por exemplo, SnackbarExtension.kt) uma extensão:
Em seguida, em sua Atividade / Fragmento, você poderá fazer o seguinte:
fonte
O código abaixo é útil para alterar a cor do texto da mensagem.
Segunda maneira: Você pode mudar a cor mudando o tema da atividade também.
fonte
É tarde demais, mas caso alguém ainda precise de ajuda. Aqui está a solução de trabalho.
fonte
Enquanto trabalhava com o xamarin android, descobri que ContextCompat.GetColor () retorna Int, mas setBackgroundColor () espera um parâmetro do tipo Color. Então, aqui está como eu fiz isso funcionar no meu projeto xamarin android.
fonte
View snckView = snackbarview.View;
vez dosnackbar.getView();
que não está disponível, masParseColor
não está funcionando.System.Drawing.Color.ParseColor
vez deAndroid.Graphics.Color.ParseColor
. agora tenho: "o nome 'getstring' não existe no contexto atual"Com o
Snackbar
incluído na Biblioteca de Componentes de Materiais(com.google.android.material.snackbar.Snackbar
) basta usar osetBackgroundTint
método.fonte
Eu fiz uma pequena aula de utilitários para que eu possa facilmente fazer lanchonetes coloridas personalizadas por meio do aplicativo.
em seguida, para usá-lo, como este em qualquer lugar do aplicativo:
fonte
Coloque-o em uma classe de utilitário:
Usando assim:
fonte
Basicamente, as soluções fornecidas têm uma desvantagem. Eles mudam a forma de snackbar e removem o raio.
Pessoalmente, prefiro algo assim
fonte
Nenhuma das outras soluções realmente funcionou para mim. Se eu definir apenas a cor de fundo do Snackbar, o layout em TextView e Button estará na cor padrão. Se eu definir o fundo do TextView, ele piscará um pouco depois que SnackBar for mostrado. E o layout ao redor do botão ainda estava na cor padrão.
No final, descobri que a melhor maneira para mim é mudar a cor de fundo do pai do TextView (SnackbarContentLayout). Agora o Snackbar inteiro está colorido corretamente e não pisca quando aparece.
fonte
setBackgroundResource()
funciona tão bem.fonte
Não sei por que setBackgroundColor () não encontrou em meu projeto. É por isso que criei uma função de extensão e ela está bem agora.
e chamá-lo como abaixo
activity_login.xml
LoginActivity.kt
fonte
}
fonte