A continuación te comparto un proyecto que contiene la implementación de un Spinner Android que consume un Web Service y muestra en cada uno de sus elementos un icono con su respectiva descripción.



Apk
appSpinner.apk (523,79 kb)
Proyecto Completo (Android Studio)
AppSpinner.rar (19,15 mb)
A continuación te comparto una plantilla de diseño apegada a las buenas prácticas de Google, la cual te permitirá crear aplicaciones móviles para dispositivos Android con un alto nivel de diseño, usabilidad y experiencia de usuario.






Apk de Ejemplo
universal_demo.apk (6,29 mb)
Proyecto completo
Navigation Drawer Universal.rar (16,49 mb)
El siguiente código te permitirá verificar la conectividad a red de una aplicación Android.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context="critza.apps.conectividad.MainActivity">
<Button
android:id="@+id/btnValidaConectividad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Verifica Conectividad"
android:layout_gravity="center"
android:onClick="btnValidaConectividad_onClick"/>
</LinearLayout>
MainActivity.java
//region Paquete.
package critza.apps.conectividad;
//endregion
//region Bibliotecas de clases.
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
//endregion
public class MainActivity extends AppCompatActivity {
//region Método encargado de crear la actividad.
/**
* Método encargado de crear la actividad.
* @param savedInstanceState Instancia de estado.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//endregion
//region Controlador de evento Click del Button [btnValidaConectividad].
/**
* Controlador de evento Click del Button [btnValidaConectividad].
* @param objectSender Button btnValidaConectividad.
*/
public void btnValidaConectividad_onClick(View objectSender)
{
try
{
if(VerificaConectividad())
Toast.makeText(this, "Conexión exitosa.",Toast.LENGTH_LONG).show();
else
Toast.makeText(this,"Valida tu conexión WIFI o Red de Datos y vuelve a intentarlo.", Toast.LENGTH_LONG).show();
}
catch (Exception ex)
{
Toast.makeText(this,ex.getMessage(),Toast.LENGTH_LONG).show();
}
}
//endregion
//region Método para validar la conectividad a la red.
/**
* Método para validar la conectividad a la red.
* @return Estado de la conexión.
*/
private boolean VerificaConectividad()
{
boolean _resultado = false;
try {
NetworkInfo _informacionRed = (((ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE))).getActiveNetworkInfo();
boolean _es3g = _informacionRed.getType() == ConnectivityManager.TYPE_MOBILE;
boolean _esWiFi = _informacionRed.getType() == ConnectivityManager.TYPE_WIFI;
boolean _conexionEstablecida = _informacionRed.isConnectedOrConnecting();
_resultado = ((_es3g || _esWiFi) && _conexionEstablecida) ? true : false;
} catch (Exception ex) {
throw ex;
} finally {
return _resultado;
}
}
//endregion
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="critza.apps.conectividad" android:installLocation="auto">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<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>