Hướng dẫn sử dụng Android QuickContactBadge

Xem thêm các chuyên mục:

1- Android QuickContactBadge

Android QuickContactBadge (Huy hiệu liên hệ nhanh) là một lớp con của ImageView, nó hiển thị như một huy hiệu (badge) nhỏ, người dùng click vào nó để tạo nhanh một liên hệ, chẳng hạn thêm một số điện thoại vào liên hệ, thêm một email vào liên hệ,...
Chú ý: QuickContactBadge không có sẵn trên Palette của cửa sổ thiết kế, vì vậy bạn cần sử dụng đoạn mã XML dưới đây để thêm QuickContactBadge vào giao diện.
QuickContactBadge
<QuickContactBadge
    android:id="@+id/quickContactBadge11"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/icon_contact_add" ...>

</QuickContactBadge>
Đúng như tên gọi của nó "Quick Contact Badge" (Huy hiệu liên hệ nhanh), bạn rất dễ dàng tạo ra một "Badge" nhỏ cho phép người dùng nhấp vào nó để thêm một liên hệ, chỉ với một vài dòng code ngắn gọn.
Ví dụ: Sét đặt các tham số cho một QuickContactBadge để thêm một số điện thoại cụ thể vào trong liên hệ. Bạn thậm chí không cần viết xử lý sự kiện OnClick cho QuickContactBadge.
this.quickContactBadgePhone = (QuickContactBadge) findViewById(R.id.quickContactBadge_phone);
this.quickContactBadgePhone.assignContactFromPhone("+1-555-521-5554", true);
Bạn có thể nhìn thấy số điện thoại mới được thêm vào trong danh bạ:

2- Các phương thức quan trọng

Các phương thức quan trọng của QuickContactBadge:
  • assignContactFromPhone(String phoneNumber, boolean lazyLookup, Bundle extras)
  • assignContactFromPhone(String phoneNumber, boolean lazyLookup)
  • assignContactFromEmail(String emailAddress, boolean lazyLookup, Bundle extras)  
  • assignContactFromEmail(String emailAddress, boolean lazyLookup)
  • assignContactUri(Uri contactUri)

3- Ví dụ QuickContactBadge

Trong ví dụ này chúng ta có 2 QuickContactBadge. QuickContactBadge thứ nhất cho phép người dùng thêm nhanh một số điện thoại vào trong liên hệ, QuickContactBadge thứ 2 cho phép người dùng thêm nhanh một Email vào trong liên hệ.
Nút "Pick Contact" cho phép người dùng lựa chọn một liên hệ sẵn có trong danh bạ.
OK, Trên Android Studio tạo mới một project:
  • File > New > New Project > Empty Activity
    • Name: QuickContactBadgeExample
    • Package name: com.example.quickcontactbadgeexample
    • Language: Java
Giao diện của ví dụ:
activity_main.xml
<?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:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        android:background="#E2F1D8"
        android:text="Phone Number"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView_phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:inputType="textEmailAddress"
        android:text="+1-555-521-5554"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView1" />

    <QuickContactBadge
        android:id="@+id/quickContactBadge_phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:scaleType="centerCrop"
        android:src="@drawable/icon_contact_add"
        app:layout_constraintStart_toEndOf="@+id/textView_phone"
        app:layout_constraintTop_toBottomOf="@+id/textView1"></QuickContactBadge>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:background="#E2F1D8"
        android:text="Email Contact"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView_phone" />

    <TextView
        android:id="@+id/textView_email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:inputType="textEmailAddress"
        android:text="test@gmail.com"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <QuickContactBadge
        android:id="@+id/quickContactBadge_email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:scaleType="centerCrop"
        android:src="@drawable/icon_contact_add"
        app:layout_constraintStart_toEndOf="@+id/textView_email"
        app:layout_constraintTop_toBottomOf="@+id/textView2"></QuickContactBadge>

    <Button
        android:id="@+id/button_pickContact"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Pick Contact"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView_email"></Button>

    <FrameLayout
        android:id="@+id/frameLayout_holder"
        android:layout_width="0dp"
        android:layout_height="80dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_pickContact"></FrameLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.quickcontactbadgeexample;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.QuickContactBadge;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    public static final int CONTACT_PICKER_RESULT = 100;

    private TextView textViewEmail;
    private TextView textViewPhone;

    private Button buttonPickContact;
    private FrameLayout frameLayoutHolder;

    private QuickContactBadge quickContactBadgeEmail;
    private QuickContactBadge quickContactBadgePhone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.textViewEmail = (TextView) this.findViewById(R.id.textView_email);
        this.textViewPhone = (TextView) this.findViewById(R.id.textView_phone);

        this.buttonPickContact = (Button) this.findViewById(R.id.button_pickContact);
        this.frameLayoutHolder = (FrameLayout) this.findViewById(R.id.frameLayout_holder);

        this.quickContactBadgeEmail = (QuickContactBadge) findViewById(R.id.quickContactBadge_email);
        this.quickContactBadgePhone = (QuickContactBadge) findViewById(R.id.quickContactBadge_phone);

        int textViewHeight = this.textViewEmail.getLayoutParams().height;
        quickContactBadgeEmail.setMaxHeight(textViewHeight);

        String email = this.textViewEmail.getText().toString(); // test@gmail.com
        String phoneNumber = this.textViewPhone.getText().toString(); // +1-555-521-5554

        // Set Parameters for quickContactBadgeEmail:
        this.quickContactBadgeEmail.assignContactFromEmail(email, true);
        this.quickContactBadgeEmail.setMode(ContactsContract.QuickContact.MODE_SMALL);

        // Set Parameters for quickContactBadgePhone:
        this.quickContactBadgePhone.assignContactFromPhone(phoneNumber, true);

        this.buttonPickContact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pickContactHandler( );
            }
        });

    }

    public void pickContactHandler( ) {
        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case CONTACT_PICKER_RESULT:
                    Uri contactUri = data.getData();

                    QuickContactBadge badgeLarge = new QuickContactBadge(this);
                    badgeLarge.assignContactUri(contactUri);
                    badgeLarge.setMode(ContactsContract.QuickContact.MODE_LARGE);
                    badgeLarge.setImageResource(R.drawable.icon_contact1);

                    this.frameLayoutHolder.addView(badgeLarge);
                    break;
            }
        }
    }
}

Xem thêm các chuyên mục: