Goal: Membuat tampilan splash screen dan akan muncul sebelum Activity utama dimuat.
-
Buat buat activity baru, misal dengan nama Splash, akan menghasilkan 2 file, yaitu Splash.java dan activity-splash.xml.
-
Kreasikan tampilah splashscreen di file activity-splash.xml misal dengan menampilkan logo di tengah-tengah layar dan sebuah spinner (ProgressBar) dibawahnya:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:background="@color/cl_green" tools:context=".Spalsh"> <ImageView android:layout_width="120dp" android:layout_height="120dp" android:src="@drawable/people64"/> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:progressTint="@android:color/white" android:layout_marginTop="40dp" android:layout_marginBottom="20dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/holo_blue_dark" android:text="Latihan Android" android:textSize="20sp"/> </LinearLayout>
-
Menghilangkan Action Bar (Title Bar) - Langkah selanjutnya adalah membuat Theme baru yang tidak menampilkan action bar, agar SplashScreen yang kita buat tampil secara penuh seperti SplashScreen aplikasi pada umumnya. Caranya adalah dengan mengedit file style.xml yang terdapat pada:
src/main/res/values/style.xml
tambahkan style berikut ini:
<resources> <!-- Theme yang lainnya --> <!-- ================== --> <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> </resources>
-
Edit AndroidManifest.xml - Kita mengubah urutan entry point aplikasi dari menampilkan MainActivity ke manampilkan SplashScreen terlebih dahulu. Kita juga akan menset theme AppTheme.NoActionBar yang sebelumnya dita buat ke SplashScreen.
<!-- UBAH BAGIAN INI --> <activity android:name=".MainActivity" android:label="Home" /> <activity android:name=".Splash" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
-
Edit Splash.java - edit Splash.java untuk menjeda selama 5 detik sebelum akhirnya menampilkan MainActivity
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); //dalam JAVASCRIPT dikenal sebagai setTimeout(Fx,time) new Handler().postDelayed(new Runnable() { @Override public void run() { Intent home = new Intent(Splash.this, MainActivity.class); startActivity(home); //memulai MainActivity finish(); //mengakhiri SplashScreen (Current Activity) } }, delay); }
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Buat public void dengan parameter View pada file activity.java:
public void fungsiClick(View v){
//jalankan perintah anda disini
}
Panggil fungsi tersebut dengan menambahkan keterangan onClick di komponen button:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Klik Saya!"
android:onClick="fungsiClick"/>
wrap_content = ukuran layout object akan menyesuaikan dengan besar isinya
match_parent = ukuran layout object akan mengisi penuh space yang disediakan induknya
Di bagian import library, tambahkan:
import android.hardware.SensorManager;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.Sensor;
import android.content.Context;
Definisikan objek sensor
SensorManager sensorManager;
Sensor ssTemperature;
TextView txt_temp;
Tambahkan Method baru untuk Listener data sensor:
//tambahkan method baru untuk Listener data sensor
private final SensorEventListener SS_TempListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
//pastikan bahwa sensor tersebut berisi data temperature
if(event.sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE){
//nilai sensor berada di event.values[0]
//misal kita akan menampilkannya di layar
//sebelumnya txt_temp sudah diregistrasikan di method onCreate ya :)
txt_temp.setText(event.values[0] + "'C");
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
Jangan lupa Override method onPause, onStop dan onResume untuk menghandle life cycle dari aplikasi, (wajib untuk Activity yang menggunakan sensor)
@Override
protected void onResume() {
super.onResume();
registerAllSensorListener();
}
@Override
protected void onPause() {
super.onPause();
unregisterAllSensorListener();
}
@Override
protected void onStop(){
super.onStop();
unregisterAllSensorListener();
}
private void registerAllSS(){
//Periksa apakah sensor tersebut ada di smartphone, jika ada registerkan Listener
if(ssTemperature != null){
//kondisi jika sensor ada di smartphone
//registrasikan listener :)
//sensorManager.registerListener(nama_method_listener, nama_sensor, delay/waktu jeda)
sensorManager.registerListener(SS_TempListener, ssTemperature, SensorManager.SENSOR_DELAY_NORMAL);
}else{
//kondisi jika sensor tidak ada :D
//dibawah ini bebas aja mau ngapain, misal menampilkan pesan seperti berikut
txt_temp.setText("Sensor nya tidak ada :(");
txt_temp.setTextColor(Color.RED);
}
}
private void unregisterAllSensorListener(){
sensorManager.unregisterListener(SS_TempListener);
}
Terakhir, kita inisialisasi semuanya di method onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.[nama_activity]);
//Inisialisasi UI (Binding)
txt_temp = (TextView) findViewById(R.id.txt_temp);
//Inisialisasi SENSOR
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
ssTemperature = sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
}
Sensor suhu, menghasilkan nilai dalam Celcius
//Inisialisasi
ssTemperature = sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
//Pembacaan
if(event.sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE){
//event.values[0] = suhu dalam derajat celcius
}
Sensor humidity, menghasilkan nilai persentasi kelembapan ruangan (%)
//Inisialisasi
ssHumidity = sensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY);
//Pembacaan
if(event.sensor.getType() == Sensor.TYPE_RELATIVE_HUMIDITY){
//event.values[0] = humidity dalam %
}
Sensor proximity, mendeteksi adanya atau tidaknya object didepannya, hanya menghasilkan 2 nilai yaitu 5.00 (tidak ada object) dan 0 (ada object). Digunakan untuk mematikan layar dan disable touchscreen saat menelpon.
//Inisialisasi
ssProximity = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
//Pembacaan
if(event.sensor.getType() == Sensor.TYPE_PROXIMITY){
//event.values[0] = 5(tidak ada object), 0(ada object)
}
Sensor cahaya, menghasilkan nilai intensitas cahaya dalam flux
//Inisialisasi
ssLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
//Pembacaan
if(event.sensor.getType() == Sensor.TYPE_LIGHT){
//event.values[0] = intensitas cahaya dalam flux
}
Sensor tekanan, menghasilkan nilai tekanan dalam satuan bar
//Inisialisasi
ssPressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
//Pembacaan
if(event.sensor.getType() == Sensor.TYPE_PRESSURE){
//event.values[0] = tekanan dalam bar
}