Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo ver la demostración del código fuente en el SDK de Android, apidemo está relacionado con la versión de Android...

Cómo ver la demostración del código fuente en el SDK de Android, apidemo está relacionado con la versión de Android...

1. Cuadro de diálogo personalizado

Android admite estilos de ventana personalizados:

1) Primero cree un valor de estilo en el recurso;

Por ejemplo:

drawable/filled_box.xml

< forma xmlns:android="/apk/res/android">

< padding android:left="10dp" android:top= "10dp" android:right="10dp" android:bottom ="10dp" />

2) Hay dos métodos para configurar los atributos de la actividad actual: 1. Agregar los atributos

android:theme="@android:style/Theme.CustomDialog". 2. Agregue la declaración setTheme(R.style.Theme_CustomDialog);

PS1: si solo muestra Actividad como cuadro de diálogo predeterminado, omita el primer paso y simplemente agregue la propiedad en el texto del manifiesto: android:theme=" @ android:style/Theme.Dialog" o agregue setTheme(android.R.style.Theme_Dialog) en el programa.

PS2: Otras formas de crear un cuadro de diálogo: Crear clase app.Dialog o crear aplicación Clase AlertDialog.

Siguiente paso de la investigación: ¿Podemos cambiar dinámicamente el estilo de la Actividad actual después de abrirla?

En las pruebas, descubrimos que agregar setTheme() en el evento onCreate() debe completarse antes de setContentView(); de lo contrario, el estilo especificado no tendrá efecto

2. , también puede configurar algunos efectos especiales para la actividad especificada, como título personalizado, actividad sin título o agregar ICONO, etc.

Curiosamente, no puedes configurar estos efectos cuando quieras; necesitas solicitarlos al sistema antes de mostrar la actividad para que puedan configurarse más adelante en el programa.

(Esto no es redundante y debe estudiarse)

El proceso de establecer un título personalizado para una actividad:

1) Crear un diseño (custom_title_1.xml)

< RelativeLayout xmlns: android="/apk/title_1.xml"

android:layout_width="fill_parent" android:layout_height="fill_parent"

android: orientación="vertical ">

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android: text="Left" />

android:layout_height="wrap_content"

android:layout_ alignParentRight="true"

android: text="Right" />

2) Establezca un efecto de título personalizado para la actividad y especifique el diseño del título:

Agregar al evento onCreate():

requestWindowFeature(Window.FEATURE_CUSTOM)FEATURE_CUSTOM_TITLE);

setContentView(R.layout.custom_title);

getWindow().setFeatureInt( Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1);

El orden de Estas tres declaraciones no se pueden revertir. Son requestWindowFeature, createView y setFeatureInt en orden. Entre ellos, requestWindowFeature es equivalente a getWindow().requestFeature()

3) Cuando necesite cambiar el título, obtenga left_text o right_text para configurarlo.

Próximo paso para aprender: otros efectos de visualización de Actividad

La ventana también tiene otras características, como FEATURE_CONTEXT_MENU, FEATURE_NO_TITLE, FEATURE_LEFT_ICON, etc., que deben estudiarse y estudiarse más a fondo. .

1. Reenvío

Esto es muy simple de implementar, es decir, después de iniciar una nueva actividad o servicio, agregue una declaración de finalización (), que borrará automáticamente el actual. actividad de la pila para que al regresar no se abra la actividad actual.

Después de completar este experimento, descubrí que hay un pequeño problema al que se debe prestar atención al desarrollar programas de Android: al agregar una nueva actividad, no puedes simplemente agregar una clase, debes recordar agregarla. la descripción de la actividad en el archivo de manifiesto. (Google debería agregar esta función simple en el futuro)

"android:nombre en el punto" significa: primero, el manifiesto tendrá un atributo de paquete especificado de forma predeterminada, como "com" .android.sample ". Si la implementación de la actividad que agregamos también está en este paquete, entonces android:name es el nombre de clase de la implementación. No importa si agrega un punto delante del nombre de la clase. Por ejemplo, para la implementación de forwardtarget, entonces android:name se escribe como forwardtarget o .forwardtarget. La única diferencia es que si la implementación de la actividad está en un subpaquete del paquete predeterminado, entonces el punto anterior es particularmente importante. Por ejemplo, si la implementación de la actividad es com.android.sample.app.forwardtarget, entonces android:name debe escribirse como app.forwardtarget o com.android.sample.app.forwardtarget. Si simplemente escribe app.forwardtarget, generalmente el editor le dirá que no se encuentra la clase, pero desafortunadamente, tiene una clase que es app.forwardtarget, por lo que solo tiene que esperar a que vuelva a aparecer un error en tiempo de ejecución. .

Por lo tanto, se recomienda que adquiera el hábito de agregar un punto delante de cualquier clase en el paquete predeterminado, ya sea que esté en un subpaquete o no, la implementación ahora está en el paquete predeterminado. paquete.

2. Persistencia

La persistencia aquí es en realidad la lectura y escritura de archivos de configuración locales. El método de implementación es obtener el objeto SharedPreferences a través de Activity.getPreferences (int) y luego operar. la configuración Vale la pena tener en cuenta los siguientes puntos al leer y escribir archivos:

1) El valor de SharedPreferences (modo int) en el objeto Activity.getPreferences (modo int) es "0". getPreferences (modo int) es equivalente a Content.getSharedPreferences (nombre de archivo de cadena, modo int), donde el nombre del archivo es el nombre de la clase actual. Por ejemplo, llamar a getPreferences(0) en la clase PersistentTest es equivalente a llamar a getPreferences(" Prueba persistente",0 ). Si no desea utilizar el nombre de la clase como nombre de archivo, puede llamar directamente al método getSharedPreferences y especificar el nombre del archivo de configuración usted mismo.

2) Definición del valor del modo:

MODE_PRIVATE = 0, lo que indica que el archivo de configuración actual es privado y solo la aplicación actual puede acceder a él.

MODE_WORLD_READABLE = 1, lo que indica que otras aplicaciones pueden leer el archivo de configuración actual.

MODE_WORLD_WRITEABLE = 2, lo que indica que otras aplicaciones pueden escribir en el archivo de configuración actual.

¿Qué debo hacer si el archivo de configuración quiere ser leído y escrito? Jaja, por supuesto es MODE_WORLD_READABLE&MODE_WORLD_WRITEABLE. Realmente dudo que la persona que diseñó Android haya usado C/C++.

3) SharedPreferences es una implementación muy interesante. Para leer datos, puede usar directamente el método get, pero para escribir datos, no se usa el método set Jaja, esta es la primera vez que se usa. clase. Sentirás que sólo puedes leer pero no escribir.

Si desea escribir datos, debe usar el método editor() (¿por qué no getEditor()? Parece que el diseñador debe ser una persona de C/C++) para obtener la clase SharedPreferences.Editor y luego usar el método put. de esta clase para escribir el archivo. ¿Por qué hacer esto? No he estudiado patrones de diseño durante mucho tiempo y no sé qué patrón avanzado usa, así que si tengo tiempo en el futuro, analizaré su implementación e investigaré un poco más.

4) En esta implementación, la lectura de archivos se coloca en onResume() y la escritura de archivos se coloca en onPause(). ¿Por qué hacemos esto? Desde el significado literal, parece que solo lo hará. se ejecutará al reanudar y pausar, entonces, ¿el programa leerá el archivo cuando se cree por primera vez? Echemos un vistazo al ciclo de vida de la Actividad para ver qué tan inteligente es:

Mire, antes y después de que se ejecute la Actividad, no importa cómo cambie el estado, onResume() y onPause() definitivamente serán ejecutado, En lugar de hablar del ingenio de la implementación, es mejor decir directamente que el diseño del ciclo de vida es ingenioso, pero no ingenioso. Este ingenio no es solo hablar. Si tiene tiempo y observa el ciclo de vida de una ventana o cuadro de diálogo en MFC, sabrá el significado de este ingenio. Por lo tanto, vale la pena recordar que las declaraciones que desea ejecutar antes y después de ejecutarse en Android deben colocarse en onResume() y onPause().

4) Finalmente, hay un pequeño irritante para Android: ¡los archivos dibujables, maldita sea! Coloque un archivo en res/drawable y el acceso es drawable/name. Si crea una variable dibujable en valores, el acceso también es drawable/name. Por ejemplo, si coloca un archivo red.xml en el directorio dibujable. el acceso es @drawable/red. Si crea una variable dibujable en rojo, el acceso también es @drawable/red, lo cual es completamente diferente. Aunque el último editor le pedirá que le cambie el nombre, es realmente inconveniente encontrarlo, especialmente. la variable dibujable, que se puede colocar en abc.xml.

Este experimento presenta otra forma de cambiar entre actividades. Por lo general, la Actividad1 cambia a la Actividad2 a través de startActivity y la Actividad2 cambia a otras actividades a través de startActivity. Pero a veces necesitamos iniciar una nueva Actividad para obtener la entrada del usuario y luego. volver a la Actividad original Por ejemplo, si la Actividad es una lista de la libreta de direcciones, abrimos otra Actividad a través de un botón Agregar y permitimos que el usuario ingrese un nuevo contacto Ingresar Regrese a la lista de la libreta de direcciones cuando haya terminado.

En este momento, podemos iniciar una nueva Actividad a través del método startActivityForResult(Intent, int), y la nueva Actividad volverá a la Actividad anterior a través del método setResult(int, Intent), activando así la la actividad anterior es onActivity (int, int).

Método onActivityResult(int, int, Intent) de StartActivity, podemos manejar el evento de retorno en la implementación de este método.

startActivityForResult(Intent, int), donde int es el código de solicitud y es el primer parámetro de onActivityResult.

Por lo general, una actividad no solo activará un único evento de obtención. Por ejemplo, el contacto mencionado anteriormente puede tener un evento para agregar contacto y también puede tener un evento para cambiar contacto o agregar un evento de llamada telefónica a un contacto específico, pero solo tenemos un onActivityResult. método, por lo que necesitamos dicho Código de solicitud para distinguir qué evento es el valor de retorno definido por el usuario, y es completamente administrado por el usuario y es muy fácil de usar.

setResult(int, Intent), donde int es el código de resultado, que representa el estado devuelto y también es el segundo parámetro de onActivityResult. Este parámetro requiere atención especial. Android proporciona tres constantes predeterminadas para este valor. Echemos un vistazo a los dos primeros, RESULT_CANCELED y RESULT_OK. Esto es fácil de entender literalmente. Uno es cancelar la operación y el otro es regresar con éxito. Cuando el usuario presiona la tecla ATRÁS, el código de resultado es RESULT_CANCELED. Pero si miramos sus respectivos valores, encontraremos algo extraño, RESULT_CANCELED=0 y RESULT_OK=-1!!!! En otros sistemas, OK suele ser 1, pero en Android es -1, ¿A qué se debe esto? Veamos la tercera constante predeterminada, RESULT_FIRST_USER=1, ¡y listo! Android deja todos los números mayores que 0 al usuario, ¡qué humano! Pero cabe señalar que, como dije antes, a la mayoría de los sistemas les gusta tratar los valores de retorno mayores que 0 como correctos y los valores de retorno menores que 0 como errores, por lo que a muchas personas (incluyéndome a mí) les gusta usar if(resultado > 0) para indicar una devolución exitosa, lo cual no es factible en Android, por lo que se debe prestar especial atención. BufferType.EDITABLE);

El método para modificar el contenido es obtener el objeto Editable a través de TextView.getText(), y luego editar el objeto Editable es similar a StringBuffer y se reflejará directamente en. TextView después de editarlo. No es necesario setText();

2.SaveRestoreState

No entiendo el efecto de la demostración en absoluto. Parece ser TextViewroid:freezesText. atributo de onSaveInstanceState y TextView, pero el efecto específico aún no se ha estudiado. Déjelo para estudiarlo más tarde

3.Translucent

Android proporciona un tema integrado para efectos de transparencia: android:style/Theme.Translucent, solo necesita configurar el tema actualmente activo en Este tema puede lograr el efecto.

Si desea una transparencia total, simplemente puede configurar el tema actualmente activo.

Si deseas lograr un efecto translúcido, puedes agregar un estilo heredado del tema, como este:

#e0000000

Además, la demostración de API También se proporciona otro ejemplo, este ejemplo no necesita heredar del tema incorporado, puede crear un nuevo estilo completamente usted mismo para lograr el efecto de transparencia y, al mismo tiempo, también puede agregar algunos otros efectos, como como efecto de desenfoque, para lograr el efecto de transparencia.