hola, aquí las instrucciones dadas pueden ayudarte
Una vista personalizada bien diseñada es muy parecida a cualquier otra clase bien diseñada. Encapsula un conjunto específico de funcionalidades con una interfaz fácil de usar, usa la CPU y la memoria de manera eficiente, y así sucesivamente. Sin embargo, además de ser una clase bien diseñada, una vista personalizada debería:
- Conforme a los estándares de Android
- Proporcione atributos con estilo personalizados que funcionen con diseños XML de Android
- Enviar eventos de accesibilidad
- Sea compatible con múltiples plataformas de Android.
El marco de Android proporciona un conjunto de clases base y etiquetas XML para ayudarlo a crear una vista que cumpla con todos estos requisitos. Esta lección discute cómo usar el marco de Android para crear la funcionalidad principal de una clase de vista.
- Acabo de aprender Java básico. ¿Cómo puedo aprender el desarrollo de aplicaciones de Android?
- Cómo rootear mi teléfono
- ¿Dónde puedo encontrar una guía de todos los requisitos para iniciar una aplicación de Android, desde el precio hasta todos los cargos?
- ¿Por qué los desarrolladores de aplicaciones móviles producen aplicaciones iOS antes que aplicaciones Android, cuando Android tiene más usuarios finales?
- ¿Puedo hacer una buena carrera en el desarrollo de Android o en iOS? Si ambos no lo han hecho, ¿qué debo hacer en otros lenguajes de programación?
Subclase una vista
Todas las clases de vista definidas en el marco de Android extienden la vista. Su vista personalizada también puede extender la Vista directamente, o puede ahorrar tiempo extendiendo una de las subclases de vista existentes, como Button.
Para permitir que Android Studio interactúe con su vista, como mínimo debe proporcionar un constructor que tome un contexto y un objeto AttributeSet como parámetros. Este constructor permite que el editor de diseño cree y edite una instancia de su vista.
clase PieChart extiende Ver {public PieChart (Context context, AttributeSet attrs) {super (context, attrs); }}
Definir atributos personalizados
Para agregar una Vista integrada a su interfaz de usuario, debe especificarla en un elemento XML y controlar su apariencia y comportamiento con los atributos del elemento. Las vistas personalizadas bien escritas también se pueden agregar y diseñar a través de XML. Para habilitar este comportamiento en su vista personalizada, debe:
- Defina atributos personalizados para su vista en un elemento de recurso
- Especifique valores para los atributos en su diseño XML
- Recuperar valores de atributos en tiempo de ejecución
- Aplique los valores de atributo recuperados a su vista
Esta sección discute cómo definir atributos personalizados y especificar sus valores. La siguiente sección trata de recuperar y aplicar los valores en tiempo de ejecución.
Para definir atributos personalizados, agregue recursos a su proyecto. Es habitual colocar estos recursos en un archivo
res/values/attrs.xml
. Aquí hay un ejemplo de un archivo attrs.xml
:
Este código declara dos atributos personalizados, showText
y labelPosition
, que pertenecen a una entidad con estilo llamada PieChart
. El nombre de la entidad con estilo es, por convención, el mismo nombre que el nombre de la clase que define la vista personalizada. Aunque no es estrictamente necesario seguir esta convención, muchos editores de códigos populares dependen de esta convención de nomenclatura para proporcionar la finalización de la declaración.
Una vez que defina los atributos personalizados, puede usarlos en archivos XML de diseño al igual que los atributos integrados. La única diferencia es que sus atributos personalizados pertenecen a un espacio de nombres diferente. En lugar de pertenecer al http://schemas.android.com/apk/res/android
namespace, pertenecen a http://schemas.android.com/apk/res/[your package name]
. Por ejemplo, aquí se explica cómo usar los atributos definidos para PieChart
:
Para evitar tener que repetir el URI de espacio de nombres largo, la muestra usa una directiva xmlns
. Esta directiva asigna el alias custom
al espacio de nombres http://schemas.android.com/apk/res/com.example.customviews
. Puede elegir cualquier alias que desee para su espacio de nombres.
Observe el nombre de la etiqueta XML que agrega la vista personalizada al diseño. Es el nombre completo de la clase de vista personalizada. Si su clase de vista es una clase interna, debe calificarla con el nombre de la clase externa de la vista. promover. Por ejemplo, la clase PieChart
tiene una clase interna llamada PieView
. Para usar los atributos personalizados de esta clase, debe usar la etiqueta com.example.customviews.charting.PieChart$PieView
.
Aplicar atributos personalizados
Cuando se crea una vista desde un diseño XML, todos los atributos de la etiqueta XML se leen del paquete de recursos y se pasan al constructor de la vista como un conjunto de atributos. Aunque es posible leer valores del AttributeSet directamente, hacerlo tiene algunas desventajas:
- Las referencias de recursos dentro de los valores de atributo no se resuelven
- No se aplican estilos.
En su lugar, pase el AttributeSet a obtenerStyledAttributes (). Este método devuelve una matriz de valores TypedArray que ya se han desreferenciado y diseñado.
El compilador de recursos de Android hace un gran trabajo para facilitar la llamada a getStyledAttributes (). Para cada recurso en el directorio res, el R.java generado define tanto una matriz de identificadores de atributo como un conjunto de constantes que definen el índice para cada atributo en la matriz. Utiliza las constantes predefinidas para leer los atributos de TypedArray. Así es como la clase
PieChart
lee sus atributos:
PieChart público (Contexto contextual, AttributeSet attrs) {super (context, attrs); TypedArray a = context.getTheme (). GetStyledAttributes (attrs, R.styleable.PieChart, 0, 0); pruebe {mShowText = a.getBoolean (R.styleable.PieChart_showText, falso); mTextPos = a.getInteger (R.styleable.PieChart_labelPosition, 0); } finalmente {a.recycle (); }}
Tenga en cuenta que los objetos TypedArray son un recurso compartido y deben reciclarse después de su uso.
Agregar propiedades y eventos
Los atributos son una forma poderosa de controlar el comportamiento y la apariencia de las vistas, pero solo se pueden leer cuando se inicializa la vista. Para proporcionar un comportamiento dinámico, exponga un par getter y setter de propiedad para cada atributo personalizado. El siguiente fragmento muestra cómo PieChart
expone una propiedad llamada showText
:
public boolean isShowText () {return mShowText;} public void setShowText (boolean showText) {mShowText = showText; invalidar(); requestLayout ();}
Observe que setShowText
llamadas setShowText
invalidan () y requestLayout (). Estas llamadas son cruciales para garantizar que la vista se comporte de manera confiable. Debe invalidar la vista después de cualquier cambio en sus propiedades que pueda cambiar su apariencia, para que el sistema sepa que necesita ser redibujado. Del mismo modo, debe solicitar un nuevo diseño si cambia una propiedad que pueda afectar el tamaño o la forma de la vista. Olvidar estas llamadas a métodos puede causar errores difíciles de encontrar.
Las vistas personalizadas también deberían ser compatibles con los oyentes de eventos para comunicar eventos importantes. Por ejemplo, PieChart
expone un evento personalizado llamado OnCurrentItemChanged
para notificar a los oyentes que el usuario ha rotado el gráfico circular para enfocarse en un nuevo sector circular.
Es fácil olvidar exponer propiedades y eventos, especialmente cuando es el único usuario de la vista personalizada. Tomarse un tiempo para definir cuidadosamente la interfaz de su vista reduce los costos de mantenimiento futuros. Una buena regla a seguir es exponer siempre cualquier propiedad que afecte la apariencia visible o el comportamiento de su vista personalizada.
Diseño para accesibilidad
Su vista personalizada debe admitir la más amplia gama de usuarios. Esto incluye a los usuarios con discapacidades que les impiden ver o usar una pantalla táctil. Para apoyar a los usuarios con discapacidades, debe:
- Etiquete sus campos de entrada usando el atributo
android:contentDescription
- Envía eventos de accesibilidad llamando a sendAccessibilityEvent () cuando sea apropiado.
- Admite controladores alternativos, como D-pad y trackball