Tiếp theo bài viết hướng dẫn kết nối Android với MySQL, hôm nay chúng tôi sẽ hướng dẫn cách thiết kế màn hình splash trong Android.

Màn hình splash trong Android thường được sử dụng để hiển thị tiến trình trước khi ứng dụng được nạp hoàn toàn và sẵn sàng để sử dụng.

Một số trường hợp sử dụng màn hình splash

  1. Hiển thị thông tin về ứng dụng hoặc thông tin về công ty.
  2. Tải dữ liệu và lưu trữ vào SQLite
  3. Tải hình ảnh
  4. Tải và phân tích json / xml

Trong android không có bất kỳ cơ chế sẵn có để hiển thị màn hình splash so với iOS. Trong hướng dẫn này chúng ta sẽ tìm hiểu làm thế nào để tạo màn hình splash trong ứng dụng Android của bạn.

Và để tạo màn hình splash chúng ta sẽ tạo 2 activity riêng biệt, một cho splash và khi màn hình splash đóng lại chúng ta sẽ khởi động màn hình activity kế tiếp

Splash trong android – Các bước thực hiện

Sử dụng project hiện có hoặc tạo mới project với Android Studio và thực hiện các bước sau Tạo lớp ServiceHandler.java

public class ServiceHandler {
    static InputStream is = null;
    static String response = null;
    public final static int GET = 1;
    public final static int POST = 2;
    public String makeServiceCall(String url, int method) {
        return this.makeServiceCall(url, method, null);
    }
    public String makeServiceCall(String url, int method, List<NameValuePair> params) {
        try {
            // http client
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpEntity httpEntity = null;
            HttpResponse httpResponse = null;
            // Checking http request method type
            if (method == POST) {
                HttpPost httpPost = new HttpPost(url);
                // adding post params
                if (params != null) {
                    httpPost.setEntity(new UrlEncodedFormEntity(params));
                }
                httpResponse = httpClient.execute(httpPost);
            } else if (method == GET) {
                // appending params to url
                if (params != null) {
                    String paramString = URLEncodedUtils.format(params, "utf-8");
                    url += "?" + paramString;
                }
                HttpGet httpGet = new HttpGet(url);
                httpResponse = httpClient.execute(httpGet);
            }
            httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            response = sb.toString();
        } catch (Exception ex) {
            Log.e("Buffer Error", "Error: " + ex.toString());
        }
        return response;
    }
}

Tạo activity tên SplashScreenActivity (Chuột phải package -> chọn New -> chọn Activity -> chọn Empty Activity -> nhập tên activity tại Activity Name -> chọn Finish)

splash trong android

Thiết kế giao diện

splash trong android 4

Viết xử lý

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class SplashScreenActivity extends AppCompatActivity {
    TextView tvName, tvState;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);
        tvName = (TextView) findViewById(R.id.tvName);
        tvState = (TextView) findViewById(R.id.tvState);
        //Lấy dữ liệu từ activity khác
        Intent i = getIntent();
        String name = i.getStringExtra("name");
        String state = i.getStringExtra("state");
        //Hiển thị
        tvName.setText(name);
        tvState.setText(state);
    }
}

Tạo activity tên SplashScreen (Chuột phải package -> chọn New -> chọn Activity -> chọn Empty Activity -> nhập tên activity tại Activity Name -> chọn Finish)

splash trong android 2

Thiết kế giao diện

splash trong android 3

Viết xử lý

import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Handler;
public class SplashScreenExample extends AppCompatActivity {
    // Splash screen timer
    static int SPLASH_TIME_OUT = 5000;
    String name, state;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen2);
        /**
         * Hiển thị màn hình splash trong khi thiết lập kết nối mạng để tải
         * dữ liệu cần thiết
         */
        new LoadingData().execute();
    }
    /**
     * Async Task to make http call
     */
    private class LoadingData extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // before making http calls
        }
        @Override
        protected Void doInBackground(Void... arg0) {
            ServiceHandler jsonParser = new ServiceHandler();
            String json = jsonParser.makeServiceCall("http://10.0.2.2:port/json/os.json", ServiceHandler.POST);
            if (json != null) {
                try {
                    JSONObject jObj = new JSONObject(json).getJSONObject("os");
                    name = jObj.getString("name");
                    state = jObj.getString("state");
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            new Handler().postDelayed(new Runnable() {
         /*
             * Showing splash screen with a timer. This will be useful when you
          * want to show case your app logo / company
          */
                @Override
                public void run() {
                    // Sau khi hoàn thành sẽ đóng activity này và chạy main activity
                    Intent i = new Intent(SplashScreen.this, SplashScreenActivity.class);
                    i.putExtra("name", name);
                    i.putExtra("state", state);
                    startActivity(i);
                    // close this activity
                    finish();
                }
            }, SPLASH_TIME_OUT);
        }
    }
}

Tập tin json được truy cập thông qua mạng, trong bài viết này json được truy cập ở localhost. (Các bạn có thể xem hướng dẫn cài đặt webserver XAMPP nếu máy của các bạn chưa cài đặt XAMPP). Nội dung của tập tin os.json

{"os":{"name" : "Android","state" : "USA"}}

Splash trong android – Một số lưu ý

Cấp quyền truy cập internet cho ứng dụng trong AndroidManifest.xml

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

Khai báo thư viện org.apache.http.legacy trong tập tin build.gradle (Module: app)

useLibrary 'org.apache.http.legacy'
splash trong android

Chỉ định port của Apache đang sử dụng trên máy của bạn

String json = jsonParser.makeServiceCall("http://10.0.2.2:port/json/os.json", ServiceHandler.POST);
splash trong android 5

Theo như hình trên thì đoạn code sẽ được chỉnh sửa như sau

String json = jsonParser.makeServiceCall("http://10.0.2.2:7777/json/os.json", ServiceHandler.POST);

BÌNH LUẬN

Please enter your comment!
Please enter your name here