É necessário manter as boas práticas dentro da aplicação, pois não só evita futuros problemas com coerência ou colisões de nomenclatura - dentro do backend, por exemplo, umas variáveis são escritas em forma de serpente (nome_de_variavel) enquanto outras são em camelo (nomeDaVariavel). Não só isso, como também ajuda posteriormente na partilha do projeto ou documentação do mesmo. Sendo por isso necessário seguir por estas e outras regras de boas práticas:
Por vezes é útil criar um ficheiro com ferramentas usadas ao longo do projeto e/ou que não tenha relacionamento com as outras funcionalidades que se esteja a desenvolver. Para tal, é útil utilizar o ficheiro Utils.kt, que se gera e normalmente fica ou numa pasta própria ou na pasta global e pode ter como exemplo o seguinte:
class Utils { companion object { /** * As variáveis daqui podem ser chamadas * onde quiserem, usando apenas o comando * Utils.
Quando se dimensiona layout’s, tem-se que ter noção do Box Model, um conceito proveniente de CSS e tem como objetivo ter zonas dum objeto que podem mudar de grossura, fazendo caixas com os limites grossos ou finos, juntos ou afastados do conteúdo ou fazer com que um objeto esteja próximo ou afastado de um outro objeto.
Content: Onde estará o conteúdo do objeto, podendo ser uma imagem ou texto
Dentro da aplicação pode haver elementos que sejam constantes durante a sua utilização, tanto para dimensões, esquemas ou até textos que podem ser usados para serem internacionalizados posteriormente. Para isto, o Android permite armazenamento de Resources dentro do mesmo, localizando-se como a superpasta dos layouts, res.
Aqui só se encontram ficheiros de formato .xml, visto na secção de frotend, mas com uma particularidade:
<resources> <tipo name="nome_do_recurso">valor</tipo> </resources> res/value/strings Aqui se pode colocar os textos estáticos da aplicação, onde até se mais tarde se podem internacionalizar a partir deste ficheiro.
SharedPreferences: Interface for accessing and modifying preference data returned by Context.getSharedPreferences(String, int). (…) Modifications to the preferences must go through an Editor object to ensure the preference values remain in a consistent state and control when they are committed to storage.
As SharedPreferences servem para guardar e restaurar valores dentro do armazenamento alocado para a aplicação, sendo esses valores os primitivos discutidos na trivia de Kotlin.
Para se poder usar, tem-se que inicializar uma variável que represente um dos blocos de dados que poderemos usar.
Intent: An intent is an abstract description of an operation to be performed.
Intent servem para poder efetuar operações dentro do sistema android, como iniciar uma atividade e/ou serviço, indicar a um listener para reagir a mudanças de rede - Wifi ou dados por exemplo - entre outras forma de comunicação dentro do sistema.
Esta página é um pouco extensa, recomendo irem com calma
No android, cada página pode ser vista como uma atividade ou como um fragmento:
Activity: An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView(View)
Fragment: A Fragment represents a reusable portion of your app’s UI.
Vai-se ao /src/main/res/ da estrutura do projeto e abre-se o MainActivity.kt. Para ajuda, pode-se carregar em Shift duas vezes rapidamente para aparecer uma palete de comandos. Daí, pode-se escrever MainActivity e deve aparecer o ficheiro que se pretende como um dos sugeridos.
Daí, deve-se ter o seguinte:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } Daqui, tem-se que o código aqui feito é dentro do onCreate.
Para concluir a parte de Backend, a fim de se poder conectar o UI já criado com o Backend da aplicação, deve-se usar o método findViewById, que vem já importado, se assim se pode dizer, dentro da atividade:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Pode-se chamar o método aqui val txtView : TextView = findViewById(R.id.txt_menu) }
Um dos maiores problemas que JAVA criou desde da sua criação foi o erro NullPointerException, um erro gerado quando se tenta efetuar uma operação sobre uma variável nula - null. Ora, como a variável é nula, não representa nada na memória, então efetuar qualquer operação sobre a mesma seria o mesmo como efetuar uma operação em nada.
// Se se correr este código em JAVA // 'String nula' irá aparecer na consola // pois se está a efetuar uma operação // sob uma variável nula String stringNula = null; try { stringNula.