2010-01-08 10 views

Respuesta

0

android: keyLabel es uno de los muchos atributos XML utilizados por la clase Keyboard.Key para cada tecla del teclado. android: keyLabel es con lo que quiere etiquetar la clave (como una "w" como en el ejemplo anterior). Los atributos están predefinidos para la clase. La "w" no es más que android: keyLabel es. Si pudieras crear android: alternativeKeyLabel, ¿qué esperarías de la clase con él? Creo que quizás deberías tratar de explicar más a fondo lo que estás tratando de lograr.

4

Puede crear atributos personalizados para sus propias clases que amplíen View o una subclase. El proceso se documenta en la sección "Disponible Tipos de recursos" de la Guía de Android Dev bajo el título "Recursos disposición de encargo":

https://developer.android.com/guide/topics/resources/available-resources.html#customresources

Hay un ejemplo en las Demos API llamada LabelView:

https://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html

https://developer.android.com/resources/samples/ApiDemos/res/values/attrs.html

52

Este enlace da una explicación superficial: http://developer.android.com/guide/topics/ui/custom-components.html

Teniendo en cuenta que tiene un CustomKeyboard que hereda de KeyboardView/Vista:

  1. Crear sus propiedades personalizadas en res/valores de archivo/attrs.xml (crear el archivo si no existe):
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="custom_keyboard"> 
     <attr name="alternative_key_label" format="string" /> 
    </declare-styleable> 

</resources> 
  1. Crear un constructor en su componente overri personalizada ding constructor por defecto que recibe el conjunto de atributos porque se llamará a este cuando se cargue el diseño.

    public CustomKeyboard(Context context, AttributeSet set) { 
        super(context, set); 
        TypedArray a = context.obtainStyledAttributes(set,R.styleable.custom_keyboard); 
        CharSequence s = a.getString(R.styleable.custom_keyboard_alternative_key_label); 
        if (s != null) { 
         this.setAlternativeKeyLabel(s.toString()); 
        } 
        a.recycle(); 
    } 
    
  2. En su archivo de diseño, agregue su componente personalizado y el enlace a sus recursos.

<Layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res/your.package.ProjectName" 
    .../> 
    ... 
    <your.package.projectname.CustomKeyboard 
     android:id="@+id/my_keyboard" 
     ... 
     app:alternative_key_label="F"> 
    </your.package.projectname.CustomKeyboard> 
</Layout> 
+6

Al intentar utilizar vistas personalizadas con atributos personalizados de bibliotecas (p.ejPersonalización de la sesión botón de Facebook), los diseños que utilizan los atributos personalizados deben utilizar el espacio de nombres URI "http://schemas.android.com/apk/res-auto" en lugar del URI que incluye el nombre del paquete de la aplicación. Este URI se reemplaza por uno específico de la aplicación en tiempo de compilación. Es decir, "xmlns: app ..." debe sustituirse por: xmlns: encargo = "http://schemas.android.com/apk/res-auto" Y, cuando se utiliza, "aplicación: CUSTOM_PROPERTY. .." con: "costumbre: CUSTOM_PROPERTY ..." Obs .: única revisión ADT 17+ añadido soporte para esto. – JPMagalhaes

+1

Para futuros lectores: tenga cuidado de leer el último ejemplo de código completo. El 'xmlns: app =" http:. // schemas.android.com/APK/res/your.package.ProjectName' línea en el elemento de nivel superior se requiere para poder acceder al espacio de nombres de aplicación – Bjorninn

+1

según la información @JPMagalhaes : xmlns: custom = "schemas.android.com/apk/res-auto funcionó para mí. ¡gracias! – drdrej

8

Para cualquier otro propósito, se declara una propiedad personalizada en el archivo XML se puede recuperar con el parámetro attrs constructor.

En mi caso reutilizar un diálogo personalizado preferencia, y la haga cosas por el estilo:

<?xml version="1.0" encoding="utf-8"?> 
<!-- something here --> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
    <your.package.projectname.CustomView 
     foo="bar" 
    /> 
</PreferenceScreen> 

Luego, en mi clase contructor:

public CustomView(Context context, AttributeSet attrs) { 
    String bar = attrs.getAttributeValue(null, "foo"); 
    Log.d("CustomView", "foo=" + bar); 
} 
Cuestiones relacionadas