Categorias
Android Video

Vídeo 9: Como usar ViewFlipper Kotlin

Nesse Vídeo 9: Como usar ViewFlipper Kotlin vou descrever como usar um ViewFlipper para que assim você possa usar vários layouts em uma activity.

Curta nossos vídeos e siga nosso canal no YouTube para que assim nossa comunidade possa crescer cada vez mais.

Primeiramente vamos partir de um projeto vazio para criar o nosso projeto e utilizar o ViewFlipper.

Logo após criar o projeto vazio vamos adicionar um LinearLayout contendo 3 botões para que eles façam a mudança do layout dentro do ViewFlipper.

Então vamos criar nosso ViewFlipper e incluir os 3 layouts que vamos utilizar para nossos botões.

Logo depois de ter feito o layout vamos programar a nossa MainActivity para que os botões chamem o layout referente a cada botão.

Veja como fazer no vídeo a seguir.

Veja também os vídeos:

Também de uma olhada em nossos tutoriais:

Enfim espero poder ter ajudado com Vídeo 9: Como usar ViewFlipper Kotlin para que você possa utilizar do recurso em seus aplicativos.

[asb]

Categorias
Android Video

Video 8: Como posicionar LinearLayout e ConstraintLayout

Nesse tutorial Video 8: Como posicionar LinearLayout e ConstraintLayout em uma tela de login no Android Studio para assim utilizar vários tipos de layout.

Nesse oitavo video vou mostrar como posicionar o constraintlayout e o linerlayout para fazer uma tela de login simples no android studio.

Assista nossos vídeos e curta nosso canal no YouTube.

Vamos fazer uma simples tela de login com o ContraintLayout como base e 2 LinearLayouts dentro dele para posicionar os componentes de nossa tela de login.

É uma simples tela de login em XML para que você possa entender como os componentes funcionam dentro dela.

Agora então veja o nosso vídeo no Youtube para fazer essa nossa tela de login.

 

Então peço novamente que curtam nossos vídeos e sigam nosso canal no YouTube para fazer com que nossa comunidade cresça.

Veja também:

Veja também nossos tutoriais:

Enfim espero poder ter ajudado com mais este Video 8: Como posicionar LinearLayout e ConstraintLayout no Android Studio.

[asb]

Categorias
Android Kotlin

Como fazer login no firebase em Kotlin

Nesse tutorial vou descrever Como fazer login no firebase em Kotlin com conta do google e facebook assim vai ter registro de usuários em seu aplicativo.

Primeiramente vamos já ter nosso aplicativo integrado com o firebase para poder fazer o login.

Se você não sabe como integrar o seu aplicativo ao firebase veja o tutorial Como adicionar o aplicativo ao Firebase.

Vamos então adicionar o método de login no firebase e para isso você tem que entrar em sua conta e seguir os seguintes passos.

Entrar na parte de autentication e clicar em configurar métodos de login.

Firebase autentication
Firebase autentication

Logo depois de clicar em configurar métodos de login vamos então setar o método de login do goolge e ativa lo como na imagem a seguir.

Como fazer login no firebase em Kotlin
Login com google firebase.

Agora vamos fazer o login no facebook e para isso você já deve ter feito a inscrição no site Facebook for Developers.

Logo após logar você deve fazer os seguintes passos.

Criar um novo aplicativo.

Criar aplicativo no facebook.
Criar aplicativo no facebook.

Colocar o nome do aplicativo.

Colocar o nome do aplicativo no facebook for developers
Colocar o nome do aplicativo no facebook for developers

Agora vamos configurar o login do facebook para android.

Configurar Login do facebook.
Configurar Login do facebook.
Selecionar android.
Selecionar android.

Clique em avançar no número 1.

Etapa 1 clique em avançar.
Etapa 1 clique em avançar.

Clique em avançar no número 2.

Etapa 2 clique em avançar.
Etapa 2 clique em avançar.

Coloque o nome do seu pacote e a classe que é iniciado seu projeto no número 3.

Coloque o nome do seu pacote e a classe que é iniciado seu projeto.
Coloque o nome do seu pacote e a classe que é iniciado seu projeto.

[ads]

No número 4 nós devemos abrir o terminal do nosso android studio e digitar a seguinte linha caso você use linux.

[sterm]keytool exportcert alias androiddebugkey keystore ~/.android/debug.keystore | openssl sha1 binary | openssl base64[/sterm]

Ele vai gerar um número que você deve colocar como na seguinte imagem.

Como fazer login no firebase em Kotlin
Inserindo hash do aplicativo no facebook for developers.

Clique em avançar no número 5.

Etapa 5 clique em avançar.
Etapa 5 clique em avançar.

Logo depois no número 6 agora devemos adicionar algumas linhas em nosso projeto.

Então vamos abrir nosso arquivo strings e colocar as seguintes linhas com o número que aparece no passo 6.

Obs: As linhas são diferentes das que tem na página de developers muda o fb por facebook.

strings.xml

<string name="facebook_application_id">93432432444447</string>
<string name="facebook_login_protocol_scheme">fb413243456749</string>

Adicionar a seguinte linha ao nosso arquivo AndroidManifest.xml.

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

Imagem do passo número 6.

Imagem do passo número 6.
Imagem do passo número 6.

Os próximos passos é somente clicar em avançar.

Logo após ter terminado vamos incluir o login com facebook no firebase e para isso vamos precisar copiar para a configuração do facebook login a linha que está no firebase como na imagem seguinte.

Como fazer login no firebase em Kotlin
Linha que deve ser copiada para o facebook login.

No facebook for developers você deve entrar no menu Login do facebook -> Configurações e inserir a linha como na próxima imagem.

Linha que deve ser copiada para o facebook login.
Linha que deve ser copiada para o facebook login.

Agora nós vamos na parte de configurações -> Básico e vamos ver a seguinte imagem, então vamos copiar o ID do aplicativo e Chave secreta do Aplicativo e vamos colar lá na parte da autenticação do facebook no firebase e salvar.

ID do apluicativo e Chave secreta.
ID do apluicativo e Chave secreta.

Depois de ter salvo as alterações no firebase e facebook for developers vamos agora começar a programar para podermos ter nossa tela de login.

[ads]

Vamos adicionar as bibliotecas necessárias no gradle.

gradle.app

dependencies {
    ...
    //Firebase Auth
    implementation 'com.firebaseui:firebase-ui-auth:5.1.0'
    implementation 'com.facebook.android:facebook-login:4.41.0'
}

Agora vamos criar 2 classes em kotlin para inserir os seguintes valores nos seguintes arquivos, os dois arquivos são BaseActivity e SignInActivity para poder fazer o sistema de login.

BaseActivity

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
abstract class BaseActivity : AppCompatActivity() {
    protected val fbAuth: FirebaseAuth = FirebaseAuth.getInstance()
    protected var hasInitCalled = false
    private var authListener: FirebaseAuth.AuthStateListener =
        FirebaseAuth.AuthStateListener { firebaseAuth ->
            val user = firebaseAuth.currentUser
            if(user != null){
                if(!hasInitCalled){
                    hasInitCalled = true
                    init()
                }
            }
            else {
                finish()
                val intent = Intent(this, SignInActivity::class.java).apply {
                    addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
                    addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
                }
                startActivity(intent)
            }
        }
    public override fun onStart() {
        super.onStart()
        fbAuth.addAuthStateListener(authListener)
    }
    public override fun onStop() {
        super.onStop()
        fbAuth.removeAuthStateListener(authListener)
    }
    protected abstract fun init()
}

SignInActivity

import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.firebase.ui.auth.AuthUI
import com.firebase.ui.auth.IdpResponse
class SignInActivity : AppCompatActivity() {
    val providers = arrayListOf(
        AuthUI.IdpConfig.GoogleBuilder().build(),
        AuthUI.IdpConfig.FacebookBuilder().build()
    )
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initSignIn()

    }
    private fun initSignIn(){
        startActivityForResult(
            AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                    "https://uware.com.br/terms.html",
                    "https://uware.com.br/privacy.html")
                .build(),
            RC_SIGN_IN)
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == RC_SIGN_IN) {
            val response = IdpResponse.fromResultIntent(data)
            if (resultCode == Activity.RESULT_OK) {
                val intent = Intent(this, MainActivity::class.java)
                startActivity(intent)
            } else {
                Toast.makeText(this,"Erro no login.", Toast.LENGTH_SHORT).show()
            }
        }
    }
    companion object{
        const val RC_SIGN_IN = 1
    }
}

Logo depois vamos adicionar nossa SignInActivity no AndroidManifest.xml  colocando a seguinte linha.

AndroidManifest.xml

<activity android:name=".SignInActivity"></activity>

Agora chegou a hora de modificar a MainActivity para que ele faça o pedido de SignIn se o usuário não for registrado. Para isso usamos a classe estendida BaseActivity e sobrescrevendo a função init como mostrado no código a seguir.

MainActivity

import android.os.Bundle
class MainActivity : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    override fun init() {
    }
}

E também vamos modificar a nossa activity_main para mostrar que o usuário entrou.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">
    <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Entrou"
       android:textSize="50sp"
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Agora vamos compilar e executar o nosso projeto para ver como tudo funciona.

Enfim espero poder ter ajudado com mais esse tutorial sobre Como fazer login no firebase em Kotlin.

[asb]

Categorias
Android Java

Como passar dados entre Activities Java

Nesse tutorial vou descrever Como passar dados entre Activities Java para que você possa assim utilizar dados gerados em uma activity em outra.

Primeiramente vamos utilizar o projeto do tutorial Como criar uma nova Activity em Java e fazer algumas modificações nele para enviar uma String e um Inteiro da MainActivity para a NovaActivity sendo o nome e idade.

Logo depois de estar com o projeto aberto você deve ir no layout da sua activity_main e fazer as seguintes modificações para que seu código fique de acordo com o seguinte.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_margin="20dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Nome"/>
        <EditText
            android:id="@+id/etNome"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Idade"/>
        <EditText
            android:id="@+id/etIdade"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"/>
        <Button
            android:id="@+id/btnClick"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Nova Activity" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Logo depois de modificar a activity_main vamos modificar o layout activity_nova para receber o valor enviado.

activity_nova

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".NovaActivity">
    <TextView
        android:id="@+id/tvResp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nova Activity."
        android:textSize="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Agora vamos modificar o código da MainActivity para que fique como o seguinte.

MainActivity

package br.com.uware.novaactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnClick = findViewById(R.id.btnClick);
        final EditText etNome = findViewById(R.id.etNome);
        final EditText etIdade = findViewById(R.id.etIdade);
        btnClick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), NovaActivity.class);
                intent.putExtra("nome", etNome.getText().toString());
                intent.putExtra("idade", Integer.parseInt(etIdade.getText().toString()));
                startActivity(intent);
            }
        });
    }
}

Depois de ter feito as modificações no MainActivity para enviar os dados você deve modificar a NovaActivity.

Então na NovaActivity você deve receber os dados e imprimi-los na tela.

Vamos agora deixar assim o nosso código da NovaActivity.

NovaActivity

package br.com.uware.novaactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class NovaActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nova);
        TextView tvResp = findViewById(R.id.tvResp);
        Intent intent = getIntent();
        String nome = intent.getStringExtra("nome");
        Integer idade = intent.getIntExtra("idade", 0);
        tvResp.setText("Nome: "+nome+"\nIdade: "+idade);
    }
}

Agora vamos compilar e executar o nosso projeto para ver o funcionamento dele.

Enfim espero poder ter ajudado com mais este tutorial sobre Como passar dados entre Activities Java.

Para fazer perguntas entre em nosso Forum.

[asb]

Categorias
Android Básico Java

Como criar uma nova Activity em Java

Nesse tutorial vou descrever Como criar uma nova Activity em Java para que assim você possa saber como criar e abrir uma nova activity.

Nesse tutorial vou descrever como criar e abrir uma nova activity na linguagem java.

Primeiramente vamos criar um novo projeto vazio(Empty) para fazer as modificações necessárias.

Se você não sabe como criar um novo projeto veja o tutorial Como criar um projeto no Android Studio somente mude a linguagem de kotlin para java.

Logo depois de ter criado o projeto vamos então adicionar uma nova activity com o nome de NovaActivity.

Se você não sabe como adicionar uma nova activity veja o tutorial Como criar uma Activity no Android Studio somente modifique a linguagem de kotlin para java.

Então agora chegou a hora de começar a programar modificando o nosso layout da main_activity para ter um botão que vai ser clicado para abrir a NovaActivity.

Nosso código do layout activity_main deve ficar assim como o seguinte.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">
    <Button
       android:id="@+id/btnClick"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Nova Activity"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Logo após modificar o layout da nossa activity_main vamos então modificar o layout da nova_activity para que imprima na tela a frase “Nova Activity.” deixando então o código da seguinte forma.

nova_activity

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".NovaActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nova Activity."
        android:textSize="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Agora vamos fazer o código que vai abrir a NovaActivity então vamos editar o código do MainActivity deixando o assim como seguinte.

MainActivity

package br.com.uware.novaactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnClick = findViewById(R.id.btnClick);
        btnClick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), NovaActivity.class);
                startActivity(intent);
            }
        });
    }
}

Agora vamos compilar e executar o projeto para ver como funciona.

Enfim espero poder ter ajudado com mais este tutorial.

Se precisar de ajudar recorra ao nosso forum.

[asb]

Categorias
Android Kotlin

Como utilizar o Alert Dialog em Kotlin

Nesse tutorial vou descrever Como utilizar o Alert Dialog em Kotlin para poder enviar mensagens para o usuário assim também executar ações.

Primeiramente vamos criar um projeto vazio(Empty) para criarmos o nosso Alert DIalog.

Se você não sabe como criar um projeto vazio veja o tutorial Como criar um projeto no Android Studio.

Logo depois de criar o nosso projeto vamos criar o nosso layout com um Button para que quando for clicado seja exibido o nosso Alert Dialog.

O código do layout deve ficar assim como o seguinte.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
   android:id="@+id/layMain"
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">
    <Button
       android:id="@+id/btnAlert"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Alert"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Então para o nosso aplicativo vai ser criado para que o Alert Dialog modifique a cor do background para azul quando clicado em Sim e modifique para a cor branca quando for clicado em não.

A ação será cancelada se for clicado no Cancelar e assim será mostrado também um Toast comentando sobre a ação executada.

Vamos deixar o nosso código da MainActivity assim como o seguinte para que seja executada as ações acima descritas.

MainActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        btnAlert.setOnClickListener {
            val builder = AlertDialog.Builder(this)
            builder.setTitle("Alert que muda background.")
            builder.setMessage("Você deseja modificar o background para cor azul?")
            builder.setPositiveButton("Sim"){dialog, which ->
                Toast.makeText(this,"Background está da cor azul.",Toast.LENGTH_SHORT).show()
                layMain.setBackgroundColor(Color.BLUE)
            }
            builder.setNegativeButton("Não"){dialog,which ->
                Toast.makeText(this,"Background está da cor branca.",Toast.LENGTH_SHORT).show()
                layMain.setBackgroundColor(Color.WHITE)
            }
            builder.setNeutralButton("Cancelar"){_,_ ->
                Toast.makeText(this,"Você cancelou a ação.",Toast.LENGTH_SHORT).show()
            }
            val dialog: AlertDialog = builder.create()
            dialog.show()
        }
    }
}

Espero poder ter ajudado com mais esse tutorial sobre Como utilizar o Alert Dialog em Kotlin.

Veja também

[asb]

Categorias
Android Kotlin

Verificando validade de cpf/cnpj em Kotlin

Nesse tutorial vou mostrar a parte de Verificando validade de cpf/cnpj em Kotlin, para que você possa verificar se o cpf ou o cnpj são números possíveis.

Primeiramente vamos criar um projeto vazio(Empty) para fazer as mudanças e fazer a nossa verificação.

Se você ainda não sabe como criar um projeto vazio veja o tutorial Como criar um projeto no Android Studio.

Então vamos agora começar a modificar o nosso projeto para receber os valores para depois calcularmos o resultado.

Para isso vamos assim modificar o nosso arquivo de layout deixando da seguinte forma recebendo o valor via EditText.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">
    <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Validar CPF/CNPJ"
       android:textSize="20sp"
       android:gravity="center"
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintBottom_toTopOf="@+id/layCheck"/>
    <LinearLayout
       android:id="@+id/layCheck"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical"
       android:layout_margin="20dp"
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintBottom_toBottomOf="parent">
        <TextView
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="Digite o cpf ou cnpj:"/>
        <EditText
           android:id="@+id/etNum"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:inputType="number"/>
        <Button
           android:id="@+id/btnCheck"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="Verificar"/>
    </LinearLayout>
    <TextView
       android:id="@+id/tvCheck"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:textSize="20sp"
       app:layout_constraintTop_toBottomOf="@+id/layCheck"
       app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Logo depois de fazer o nosso layout vamos agora fazer a nossa programação para que faça a validação do cpf/cnpj.

Então para isso utilizei uma máscara para quando o EditText tiver 11 até dígitos terá a máscara do cpf se tiver mais que 11 dígitos irá ter a máscara do cnpj.

[ads]

Vamos programar assim da seguinte forma nossa MainActivity.

MainActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        etNum.addTextChangedListener(MaskEditUtil.mask(etNum))
        btnCheck.setOnClickListener {
            when(etNum.text.length){
                14 -> {
                    if(checkCpf(etNum.text.toString())){
                        tvCheck.text = "CPF válido"
                        tvCheck.setTextColor(Color.GREEN)
                    }
                    else{
                        tvCheck.text = "CPF inválido"
                        tvCheck.setTextColor(Color.RED)
                    }
                }
                18 -> {
                    if(checkCnpj(etNum.text.toString())){
                        tvCheck.text = "CNPJ válido"
                        tvCheck.setTextColor(Color.GREEN)
                    }
                    else{
                        tvCheck.text = "CNPJ inválido"
                        tvCheck.setTextColor(Color.RED)
                    }
                }
                else -> {
                    tvCheck.text = "Não é um CPF nem CNPJ válido."
                    tvCheck.setTextColor(getColor(R.color.colorAccent))
                }
            }
        }
    }
    fun checkCpf(et: String): Boolean{
        var str = et.replace("-", "").replace("/","").replace(".","")
        var calc: Int
        var num = 10
        var sum = 0
        for(x in 0..8) {
            calc = str[x].toString().toInt() * num
            sum += calc
            --num
        }
        var rest = sum % 11
        var test = 11 - rest
        if(test > 9) test = 0
        if(test != str[9].toString().toInt()) return false
        num = 11
        sum = 0
        for(x in 0..9) {
            calc = str[x].toString().toInt() * num
            sum += calc
            --num
        }
        rest = sum % 11
        test = 11 - rest
        if(test > 9) test = 0
        if(test != str[10].toString().toInt()) return false
        return true
    }
    fun checkCnpj(et: String): Boolean{
        var str = et.replace("-", "").replace("/","").replace(".","")
        var calc: Int
        var num = 5
        var sum = 0
        for(x in 0..11) {
            calc = str[x].toString().toInt() * num
            sum += calc
            --num
            if(num == 1) num = 9
        }
        var rest = sum % 11
        var test = 11 - rest
        if(test < 2) test = 0
        if(test != str[12].toString().toInt()) return false
        num = 6
        sum = 0
        for(x in 0..12) {
            calc = str[x].toString().toInt() * num
            sum += calc
            --num
            if(num == 1) num = 9
        }
        rest = sum % 11
        test = 11 - rest
        if(test < 2) test = 0
        if(test != str[13].toString().toInt()) return false
        return true
    }
    object MaskEditUtil {
        fun mask(ediTxt: EditText): TextWatcher {
            var isUpdating: Boolean = false
            var mask = ""
            var old = ""
            return object : TextWatcher {
                override fun afterTextChanged(s: Editable) {
                }
                override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
                }
                override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
                    val str = unmask(s.toString())
                    var mascara = ""
                    when (str.length) {
                        in 0..11 -> mask = "###.###.###-##"
                        else -> mask = "##.###.###/####-##"
                    }
                    if (isUpdating) {
                        old = str
                        isUpdating = false
                        return
                    }
                    var i = 0
                    for (m in mask.toCharArray()) {
                        if (m != '#' && str.length > old.length) {
                            mascara += m
                            continue
                        }
                        try {
                            mascara += str[i]
                        } catch (e: Exception) {
                            break
                        }
                        i++
                    }
                    isUpdating = true
                    ediTxt.setText(mascara)
                    ediTxt.setSelection(mascara.length)
                }
            }
        }
        fun unmask(s: String): String {
            return s.replace("-", "").replace("/","").replace(".", "")
        }
    }
}

Vamos agora compilar e executar o nosso projeto para ver como ficou.

Espero poder ter ajudado com mais este tutorial sobre Verificando validade de cpf/cnpj em Kotlin.

Veja também nossos vídeos.

Fonte: https://souforce.cloud/regra-de-validacao-para-cpf-e-cnpj/

[ads]

Categorias
Android Kotlin

Procurar endereço com o CEP em Kotlin

Nesse tutorial vou descrever como Procurar endereço com o CEP em Kotlin para que você possa aprender a utilizar JSON com pesquisas na internet.

Primeiramente vamos criar um projeto vazio(Empty) para fazer as mudanças e assim conseguir procurar o endereço a partir do CEP.

Se você ainda não sabe como criar um projeto vazio veja então o tutorial Como criar um projeto no Android Studio ou Video 1: Novo projeto e emulador.

Logo depois de criar o projeto vamos então editar o nosso arquivo do AndroidManifest para que possa fazer conexão com a internet deixando o código da seguinte forma.

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="br.com.uware.cep">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:roundIcon="@mipmap/ic_launcher_round"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Vamos agora editar o nosso layout para assim ter os objetos que precisamos e vamos ficar com o código da seguinte forma.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:id="@+id/laySearch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_margin="20dp"
        app:layout_constraintTop_toTopOf="parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Digite o CEP:"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <EditText
            android:id="@+id/etCEP"
            android:inputType="number"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/btnSearch"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Pesquisar"/>
    </LinearLayout>
    <ProgressBar
        android:id="@+id/pbCep"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        app:layout_constraintTop_toBottomOf="@+id/laySearch"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>
    <TextView
        android:id="@+id/tvResp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:gravity="center"
        android:layout_margin="20dp"
        app:layout_constraintTop_toBottomOf="@+id/laySearch"
        app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Vamos logo após ter modificado o nosso layout vamos fazer a parte da programação dentro da MainActivity e para isso vamos usar uma tarefa assíncrona para fazer a pesquisa na internet.

Vamos deixar o código assim como o a seguir.

MainActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        etCEP.addTextChangedListener(MaskEditUtil.mask(etCEP,"#####-###"))
        btnSearch.setOnClickListener {
            if(etCEP.text.toString().length != 9){
                Toast.makeText(this,"CEP precisa ter 8 Digitos", Toast.LENGTH_LONG).show()
            }
            else{
                getCep(etCEP.text.toString())
            }
        }
    }
    fun getCep(cep: String){
        val url= "https://viacep.com.br/ws/"+cep+"/json/"
        tvResp.visibility = View.INVISIBLE
        MyAsyncTask().execute(url)
    }
    object MaskEditUtil {
        fun mask(ediTxt: EditText, mask: String): TextWatcher {
            return object : TextWatcher {
                var isUpdating: Boolean = false
                var old = ""
                override fun afterTextChanged(s: Editable) {}
                override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
                override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
                    val str = unmask(s.toString())
                    var mascara = ""
                    if (isUpdating) {
                        old = str
                        isUpdating = false
                        return
                    }
                    var i = 0
                    for (m in mask.toCharArray()) {
                        if (m != '#' && str.length > old.length) {
                            mascara += m
                            continue
                        }
                        try {
                            mascara += str[i]
                        } catch (e: Exception) {
                            break
                        }
                        i++
                    }
                    isUpdating = true
                    ediTxt.setText(mascara)
                    ediTxt.setSelection(mascara.length)
                }
            }
        }
        fun unmask(s: String): String {
            return s.replace("[-]".toRegex(), "")
        }
    }
    inner class MyAsyncTask: AsyncTask<String, String, String>() {
        override fun onPreExecute() {
            pbCep.visibility = View.VISIBLE
        }
        override fun doInBackground(vararg params: String?): String {
            try {
                val url = URL(params[0])
                val urlConnection = url.openConnection() as HttpURLConnection
                urlConnection.connectTimeout = 7000
                var instring = ConvertStreamString(urlConnection.inputStream)
                publishProgress(instring)
            } catch (ex: Exception) {
                Log.d("Erro: ", ex.toString())
            }
            return ""
        }
        override fun onProgressUpdate(vararg params: String?) {
            try {
                var json = JSONObject(params[0])
                val cep = json.getString("cep")
                val logradouro = json.getString("logradouro")
                val bairro = json.getString("bairro")
                val cidade = json.getString("localidade")
                val estado = json.getString("uf")
                pbCep.visibility = View.INVISIBLE
                tvResp.visibility = View.VISIBLE
                tvResp.text =
                    "Dados\ncep: " + cep + "\nRua: " + logradouro + "\nBairro: " + bairro + "\nCidade: " + cidade + "\nEstado: " + estado
            } catch (ex: Exception) {
                Log.d("Erro: ", ex.toString())
            }
        }
        fun ConvertStreamString(inputStream: InputStream): String {
            val reader = BufferedReader(inputStream.reader())
            val content = StringBuilder()
            var line = reader.readLine()
            try {
                while (line != null) {
                    content.append(line)
                    line = reader.readLine()
                }
            } finally {
                reader.close()
            }
            return content.toString()
        }
    }
}

Então chegou a hora de compilar e executar o projeto para ver como funciona para pegar o endereço a partir do CEP.

Foi criado um gist do nosso projeto para facilitar, então se sovê quiser clonar nosso projeto você pode utilizar a seguinte linha para isso.

[sterm]git clone https://github.com/uware-com-br/CEP_Kotlin[/sterm]

Assim você vai precisar digitar o seguinte comando quando for atualizar seu repositório.

[sterm]git pull[/sterm]

E assim seu repositório será atualizado.

Enfim espero poder ter ajudado com mais este tutorial sobre Procurar endereço com o CEP em Kotlin.

Fonte:

Veja também nossos vídeos e siga o nosso canal no YouTube:

[asb]

Categorias
Android Kotlin

Como criar uma simples Thread Kotlin

Nesse tutorial vou descrever Como criar uma simples Thread Kotlin para que você possa executar algumas funções que a requerem no Android Studio.

Primeiramente vamos criar um projeto vazio(Empty) para modificar o layout e sua programação.

Se você não sabe como criar um projeto vazio então veja o tutorial Como criar um projeto no Android Studio ou Video 1: Novo projeto e emulador.

Nesse exemplo vamos criar um EditText que recebe um número e esse número é assim acrescido do valor 10.

Então vamos fazer as mudanças no nosso arquivo de layout activity_main para ter um TextView, EditText, Butto e outro TextView de resposta ficando com o código da seguinte forma.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_margin="20dp"
   tools:context=".MainActivity">
    <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical"
       app:layout_constraintTop_toTopOf="parent">
        <TextView
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="Digite um número para ser somado 10:"/>
        <EditText
           android:id="@+id/etNum1"
           android:inputType="number"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"/>
        <Button
           android:id="@+id/btnThread"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="Enviar"/>
        <TextView
           android:id="@+id/tvResp"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:gravity="center"
           android:layout_marginTop="50dp"/>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Logo depois de ter feito as mudanças no layout então vamos fazer uma função que crie um thread some o número a 10 e envie a resposta para o nosso TextView que imprimirá o valor na tela.

Tentei assim descrever a função da maneira mais simples, segue então o código da nossa MainActivity para que possamos colocar em nosso código.

MainActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        btnThread.setOnClickListener {
            createThread(etNum1.text.toString().toInt())
        }
    }
    fun createThread(num: Int) {
        val thread = Thread(
            Runnable {
                val resp = num +10
                runOnUiThread {
                    tvResp.text = resp.toString()
                }
            }
        )
        thread.start()
    }
}

Agora vamos compilar e executar o nosso projeto para assim testar como funciona a thread.

Enfim espero poder ter ajudado com mais esse tutorial sobre Como criar uma simples Thread Kotlin.

Então veja também nossos vídeos:

[asb]

Categorias
Android XML

Button com efeito no background XML

Nesse tutorial vou descrever como fazer Button com efeito no background XML para que assim você faça um botão com efeito.

Primeiramente vamos criar um projeto vazio(Empty) para fazer as mudanças e criar um botão com efeito no clique.

Se você não sabe como criar um projeto vazio então veja o tutorial Como criar um projeto no Android Studio.

Logo depois de criar um projeto vazio vamos criar um background para o nosso botão com o nome de button_background.

Se você não sabe como criar um background então veja o tutorial Como criar um Background no Android Studio.

Vamos deixa o código do nosso arquivo de background como o seguinte.

button_background

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient android:type="radial"
               android:gradientRadius="700"
               android:startColor="#333"
               android:endColor="#FFF" />
            <stroke android:width="5px" android:color="#797575"/>
            <corners android:radius="20dp"/>
        </shape>
    </item>
</selector>

Logo depois de criar e editar o arquivo de background vamos então editar a nossa activity_main e modificar apenas TextView do Hello World! para virar um Button e inserir o background e o efeito de seleção.

O código do nosso layout deve estar assim como o seguinte.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textColor="#FFF"
        android:padding="30dp"
        android:foreground="?android:attr/selectableItemBackground"
        android:theme="@android:style/ThemeOverlay.Material.Dark"
        android:background="@drawable/button_background"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Vamos então compilar e executar o projeto para ver como fica o Button.

Button com efeito no background XML
Button

Enfim espero poder ter ajudado com mais este tutorial sobre como fazer Button com efeito no background XML.

Veja também os vídeos em:

[asb]