Eu queria fazer meu aplicativo parecer mais profissional, então decidi que queria criar uma tela inicial.
Como eu o criaria e depois o implementaria?
android
splash-screen
Efraim
fonte
fonte
Respostas:
Leitura adicional:
Resposta antiga:
COMO : Tela inicial simples
Essas respostas mostram como exibir uma tela inicial por um período fixo de tempo quando o aplicativo é iniciado por, por exemplo, motivos de marca. Por exemplo, você pode optar por mostrar a tela inicial por 3 segundos. No entanto, se você quiser mostrar a tela de spash por um período variável de tempo (por exemplo, tempo de inicialização do aplicativo), verifique a resposta de Abdullah https://stackoverflow.com/a/15832037/401025 . No entanto, esteja ciente de que a inicialização do aplicativo pode ser muito rápida em novos dispositivos, para que o usuário veja apenas um flash com mau UX.
Primeiro você precisa definir a tela de spash no seu
layout.xml
arquivoE sua atividade:
Isso é tudo ;)
fonte
SPLASH_DISPLAY_LENGTH
tempo. Você deve fazer isso em vez disso: bignerdranch.com/blog/splash-screens-the-right-wayObserve que esta solução não permitirá que o usuário espere mais: o atraso da tela inicial depende do tempo de inicialização do aplicativo.
Ao abrir qualquer aplicativo Android, você terá, por padrão, uma tela preta com o título e o ícone do aplicativo na parte superior, pode alterar isso usando um estilo / tema.
Primeiro, crie um style.xml na pasta values e adicione um estilo a ela.
Em vez de usar,
@android:style/Theme.DeviceDefault.Light.NoActionBar
você pode usar qualquer outro tema como pai.Segundo, no seu aplicativo Manifest.xml, adicione
android:theme="@style/splashScreenTheme"
à sua atividade principal.Terceiro, atualize seu tema em sua atividade de inicialização onCreate ().
ATUALIZAÇÃO Confira este post .
Obrigado a @ mat1h e @adelriosantiago
fonte
<item name="android:background">
iria substituir owindowBackground
. E, semandroid:background
definido, meu histórico em qualquer fragmento seria transparente, revelando a atividade por trás do conteúdo em primeiro plano.seu Splash.java pode ficar assim:
mude
ActivityB.class
para a atividade que você deseja iniciar após a tela inicialverifique seu arquivo de manifesto e ele deve parecer
fonte
As respostas acima são muito boas, mas gostaria de acrescentar outra coisa. Eu sou novo no Android, conheci esses problemas durante o meu desenvolvimento. Espero que isso possa ajudar alguém como eu.
A tela inicial é o ponto de entrada do meu aplicativo, então adicione as seguintes linhas no AndroidManifest.xml.
A tela inicial deve aparecer apenas uma vez no ciclo de vida do aplicativo, eu uso uma variável booleana para registrar o estado da tela inicial e mostrá-la apenas na primeira vez.
feliz codificação!
fonte
android:noHistory="true"
emAndroidManifest.xml
para impedir que o usuário de volta à tela inicial utilizando o botão voltar indo.A resposta de Abdullah é ótima. Mas quero acrescentar mais alguns detalhes com a minha resposta.
Implementando uma tela inicial
A implementação de uma tela inicial da maneira certa é um pouco diferente do que você imagina. A exibição inicial exibida deve estar pronta imediatamente, mesmo antes de você poder aumentar um arquivo de layout em sua atividade inicial.
Portanto, você não usará um arquivo de layout. Em vez disso, especifique o plano de fundo da tela inicial como plano de fundo do tema da atividade. Para fazer isso, primeiro crie um drawable XML em res / drawable.
background_splash.xml
É apenas uma lista de camadas com o logotipo na cor de fundo do centro.
Agora abra styles.xml e adicione este estilo
Este tema terá que barra de ação e com fundo que acabamos de criar acima.
E no manifesto, você precisa definir o SplashTheme para a atividade que deseja usar como splash.
Em seguida, dentro do código de atividade, navegue o usuário para a tela específica após o splash usando a intenção.
Essa é a maneira certa de fazer. Eu usei essas referências para resposta.
fonte
YouTube
sobre isso. Mas acho que o tamanho do bitmap será o problema, já que você não pode redimensioná-lo usandolayer-list
.Criar um
Activity
SplashScreen.java
splashscreen.xml
vai ser assimfonte
Um Splash Screnn, por padrão, não torna automaticamente seu Aplicativo mais profissional. Uma tela inicial projetada profissionalmente tem a possibilidade de tornar seu aplicativo mais profissional, mas se você não sabe escrever um, qual será o nível profissional do restante do aplicativo.
O único motivo (desculpa) para ter uma tela de abertura é porque você está realizando uma grande quantidade de cálculos ou está aguardando a inicialização do GPS / WiFi porque o seu aplicativo depende disso antes de iniciar. Sem o resultado desses cálculos ou acesso ao GPS / WiFi (etc.), seu aplicativo está morto na água, assim você sente que precisa de uma tela inicial e DEVE bloquear a visualização da tela para quaisquer outros programas em execução (incluindo o plano de fundo )
Essa tela inicial deve se parecer com o seu aplicativo de tela cheia para dar a impressão de que já foi inicializado; depois que os cálculos demorados forem concluídos, os detalhes finais poderão ser preenchidos (a imagem foi aprimorada). A chance de que isso aconteça ou que seja a única maneira de o Programa ser concebido é muito pequena .
Seria melhor permitir que o usuário (e o restante do sistema operacional) fizesse outra coisa enquanto espera, em vez de projetar seu programa para depender de algo que levará um tempo (quando a duração da espera for incerta).
Já existem ícones no seu telefone que indicam que o GPS / WiFi está sendo iniciado. O tempo ou espaço ocupado pela tela inicial pode ser gasto carregando pré-cálculos ou realmente fazendo os cálculos. Veja o primeiro link abaixo para os problemas que você cria e o que deve ser considerado.
Se você absolutamente precisar aguardar esses cálculos ou GPS / WiFi, seria melhor simplesmente iniciar o aplicativo e exibir uma janela pop-up indicando que é necessário aguardar os cálculos (uma mensagem TEXTUAL de "Inicialização" está correta). A espera por GPS / WiFi é esperada (se já não estiver ativada em outro programa), portanto, anunciar os tempos de espera é desnecessário.
Lembre-se de que quando a tela inicial inicia, o programa já está em execução, tudo o que você está fazendo é atrasar o uso do programa e monopolizar a CPU / GPU para fazer algo que a maioria não considera necessário.
É melhor que realmente desejemos esperar e ver sua tela inicial toda vez que iniciarmos o seu programa, ou NÃO sentiremos que é muito profissionalmente escrito. Tornar a tela inicial tela cheia e uma duplicata da tela do programa real (então achamos que ela foi inicializada quando na verdade não foi) PODE atingir seu objetivo (tornar o programa mais profissional), mas eu não apostaria muito nisso.
Por que não fazê-lo: http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/
Como fazer: https://encrypted.google.com/search?q=Android+splash+screen+source
Portanto, há uma boa razão para não fazê-lo, mas se você tiver certeza de que, de alguma forma, sua situação está fora desses exemplos, os meios para fazê-lo são dados acima. Certifique-se de que realmente faz seu aplicativo parecer mais profissional ou você derrotou o único motivo que você deu para fazer isso.
É como um canal do YouTube que inicia todos os vídeos com uma introdução gráfica longa (e Outro) ou sente a necessidade de contar uma piada ou explicar o que aconteceu durante a semana passada (quando não é um canal de comédia ou de estilo de vida). Apenas mostre o show! (Basta executar o programa).
fonte
Acima de todas as respostas são realmente muito boas. Mas existem problemas de vazamento de memória. Esse problema geralmente é conhecido na comunidade Android como "Vazando uma atividade" . Agora, o que exatamente isso significa?
Quando ocorre uma alteração na configuração, como mudança de orientação, o Android destrói a Atividade e a recria. Normalmente, o Garbage Collector apenas limpa a memória alocada da instância antiga da Activity e estamos todos bem.
"Vazando uma atividade" refere-se à situação em que o Garbage Collector não pode limpar a memória alocada da instância antiga da Activity, pois é
being (strong) referenced
de um objeto que viveu fora da instância da Activity. Todo aplicativo Android tem uma quantidade específica de memória alocada para ele. Quando o Garbage Collector não pode liberar memória não utilizada, o desempenho do aplicativo diminui gradualmente e, eventualmente, trava comOutOfMemory
erro.Como determinar se o aplicativo vaza memória ou não? A maneira mais rápida é abrir a guia Memória no Android Studio e preste atenção à memória alocada conforme você altera a orientação. Se a memória alocada continuar aumentando e nunca diminuir, haverá um vazamento de memória.
Vazamento 1.Memory quando o usuário muda a orientação.
Primeiro, você precisa definir a tela inicial no
splashscreen.xml
arquivo de recursos de layoutPara mais informações, acesse este link
fonte
A tela Parando na tela inicial para os 4 e 5 desnecessariamente não faz muito sentido. Tudo bem se você carregar algo em segundo plano, caso contrário, siga esta abordagem para implementar a tela inicial: - A implementação de uma tela inicial da maneira correta é um pouco diferente do que você imagina. A exibição inicial que você vê precisa estar pronta imediatamente, mesmo antes que você possa aumentar um arquivo de layout em sua atividade inicial.
Portanto, você não usará um arquivo de layout. Em vez disso, especifique o plano de fundo da tela inicial como plano de fundo do tema da atividade. Para fazer isso, primeiro, crie um drawable XML em res / drawable.
Aqui, configurei uma cor de fundo e uma imagem.
Em seguida, você definirá isso como plano de fundo da sua atividade inicial no tema. Navegue até o arquivo styles.xml e adicione um novo tema para sua atividade inicial:
No seu novo SplashTheme, defina o atributo background da janela como seu drawable XML. Configure isso como o tema da sua atividade inicial no seu AndroidManifest.xml:
Por fim, a classe SplashActivity deve encaminhar você para a sua atividade principal:
Mais detalhes leia isto: 1. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 2. http://blog.goodbarber.com/3-tips-to-create-a -great-splash-screen-for-your-mobile-app_a287.html
fonte
Este é o código completo aqui
SplashActivity.java
Nos drawables, crie este bg_splash.xml
No styles.xml, crie um tema personalizado
e, finalmente, no AndroidManifest.xml, especifique o tema para sua atividade
Felicidades.
fonte
drawable
As telas iniciais não devem ser carregadas de um arquivo de layout; ainda pode haver algum atraso ao carregá-lo.
A melhor maneira é criar um tema apenas para o seu SplashScreenActivity e definir
the android:windowBackground
um recurso desenhável.https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Em poucas palavras:
Declare sua SplashScreenActivity no manifesto:
No seu SplashScreenActivity.java:
Em seguida, crie o recurso para a janela de plano de fundo do seu tema:
Arquivo drawable splash.xml:
fonte
Após o Android Marshmallow , outro uso produtivo da tela inicial que eu penso é a solicitação necessária
Android Permissions
na tela inicial do seu aplicativo.parece que a maioria dos aplicativos processa solicitações de permissão dessa maneira.
Os diálogos produzem um UIX ruim e interrompem o fluxo principal e fazem você decidir sobre o tempo de execução, e a verdade é que a maioria dos usuários pode nem se importar se seu aplicativo deseja escrever algo no cartão SD. Alguns deles podem nem entender o que estamos tentando transmitir até traduzi-lo para o inglês comum.
Solicitar permissões de uma vez gera menos número de "se houver" antes de cada operação e faz com que seu código pareça desorganizado.
Este é um exemplo de como você pode solicitar permissões na sua atividade inicial para o dispositivo com Android OS 23+.
Se todas as permissões forem concedidas OU já concedidas OU o aplicativo estiver sendo executado no Pre Marshmallow, ENTÃO, basta exibir o conteúdo principal com pouco atraso de meio segundo para que o usuário possa apreciar o esforço que fizemos ao ler esta pergunta e tentar dar o nosso melhor.
fonte
você não usará um arquivo de layout. Em vez disso, especifique o plano de fundo da tela inicial como plano de fundo do tema da atividade. Para fazer isso, primeiro crie um drawable XML em res / drawable.
Nota: todo o código abaixo está disponível no GitHub Link
Aqui, configurei uma cor de fundo e uma imagem.
Em seguida, você definirá isso como plano de fundo da sua atividade inicial no tema. Navegue até o arquivo styles.xml e adicione um novo tema para sua atividade inicial:
No seu novo SplashTheme, defina o atributo background da janela como seu drawable XML. Configure isso como o tema da sua atividade inicial no seu AndroidManifest.xml:
Por fim, sua classe SplashActivity deve encaminhar você para a sua atividade principal:
Observe que você nem configurou uma exibição para esta SplashActivity. A visão vem do tema. Quando você configura a interface do usuário para sua atividade inicial no tema, ela fica disponível imediatamente.
Se você tivesse um arquivo de layout para a sua atividade inicial, esse arquivo de layout ficaria visível para o usuário somente depois que o aplicativo fosse totalmente inicializado, o que é muito tarde. Você deseja que o splash seja exibido apenas nessa pequena quantidade de tempo antes que o aplicativo seja inicializado.
fonte
fonte
Crie uma atividade, deixe-nos a atividade denominada 'A', crie um arquivo xml chamado myscreen.xml, que defina a imagem da tela inicial como plano de fundo e use o temporizador para navegar de uma atividade para outra. Para saber como usar o temporizador de contagem regressiva, veja minha resposta nesta pergunta TimerTask no Android?
fonte
Exemplo de tela inicial:
fonte
A tela inicial é um pequeno objeto inutilizável no Android: não pode ser carregada o mais rápido possível para ocultar o atraso do início da atividade principal. Há duas razões para usá-lo: operações de publicidade e rede.
A implementação como caixa de diálogo dá um salto sem demora da tela inicial para a interface principal da atividade.
Layout:
E comece:
fonte
Outra abordagem é alcançada usando o CountDownTimer
fonte
fonte
Abordagem realmente fácil & gr8:
Primeiro, crie seu splash com o seguinte site:
https://www.norio.be/android-feature-graphic-generator/
Escolha seu logotipo e slogan, escolha seu plano de fundo bonito. redimensione para 4096x4096.
Agora baixe essa imagem e a atualize para:
https://apetools.webprofusion.com/app/#/tools/imagegorilla
E gere todas as telas de apresentação necessárias, todos os dispositivos, todas as plataformas.
Aproveitar!
Aqui existem respostas suficientes que ajudarão na implementação. este post foi criado para ajudar outras pessoas com a primeira etapa da criação da tela inicial!
fonte
Que tal uma tela de inicialização super flexível que possa usar o mesmo código e esteja definida no AndroidManifest.xml, para que o código nunca precise ser alterado. Geralmente desenvolvo bibliotecas de código e não gosto de personalizar o código porque é desleixado.
Em seguida, o próprio SpashActivity pesquisa os metadados para "launch_class" para criar o próprio Intent. A "duração" dos metadados define por quanto tempo a tela inicial permanece ativa.
fonte
Em algum momento, o usuário abre
SplashActivity
e sai imediatamente, mas o aplicativo ainda é utilizadoMainActivity
depoisSPLASH_SCREEN_DISPLAY_LENGTH
.Para evitá-lo:
SplashActivity
você deve verificar seSplashActivity
está terminando ou não antes de passar paraMainActivity
Espero que esta ajuda
fonte
Embora haja boas respostas, mostrarei a maneira recomendada pelo Google:
1) Primeiro crie uma
Theme
tela inicial: você tem um tema chamadosplashscreenTheme
, seu tema do iniciador seria:Nota:
android:windowBackground
já define sua imagem da tela inicial, não énecessário fazer isso na interface do usuário novamente.
você também pode usar cores aqui em vez de um drawable.
2) Defina o tema como manifesto da tela de abertura
3) verifique se launch_screen
drawable
não está nadrawable
pasta se a sua imagem não for pequena.Isso resultará em um início mais rápido da tela de inicialização e salvará você da tela preta
Também evita o excesso de extração
fonte
Este é o melhor post que eu já vi nas telas de abertura: http://saulmm.github.io/avoding-android-cold-starts
Saúl Molinero entra em duas opções diferentes para telas de abertura: aproveitando o plano de fundo da janela para animar sua tela inicial e exibindo a interface do usuário do marcador de posição (que é uma escolha popular que o Google usa para a maioria dos aplicativos atualmente).
Refiro-me a este post toda vez que preciso considerar o tempo de inicialização a frio e evitar a desistência do usuário devido a longos períodos de inicialização.
Espero que isto ajude!
fonte
No meu caso, não queria criar uma nova atividade apenas para mostrar uma imagem por 2 segundos. Ao iniciar
MainAvtivity
, as imagens são carregadas nos suportes usando o picasso, eu sei que isso leva cerca de 1 segundo para carregar, então decidi fazer o seguinte na minha MainActivityOnCreate
:Ao iniciar o aplicativo, a primeira coisa que acontece é a
ImageView
exibição e a barra de status é removida configurando os sinalizadores de janela para tela cheia. Em seguida, usei aHandler
para executar por 2 segundos, após os 2 segundos, limpei os sinalizadores de tela cheia e defino a visibilidade deImageView
paraGONE
. Fácil, simples, eficaz.fonte
É realmente simples no Android, apenas usamos o conceito de manipulador para implementar a tela inicial
No seu arquivo java SplashScreenActivity, cole esse código.
No seu arquivo xml SplashScreenActivity, coloque qualquer imagem usando o imageview.
fonte
Você pode adicionar isso no seu método onCreate
E inicialize seu valor de tempo em milissegundos conforme você deseja ...
para obter mais detalhes, faça o download do código completo neste link ...
https://github.com/Mr-Perfectt/Splash-Screen
fonte
No Kotlin, escreva este código: -
Espero que isso ajude você.Obrigado ........
fonte
Código simples, funciona :) Respingo simples
fonte
fonte