0

J'ai créé d'une simple vue personnalisée qui contient un RelativeLayout et un EditText:Comment obtenir les attributs par défaut Android dans une vue personnalisée

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <EditText 
     android:id="@+id/edt_content" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</RelativeLayout> 

Aussi j'ai ajouté quelques attributs personnalisés dans res/values/attrs.xml et je récupérer ces attributs mon constructeur de vue personnalisé et tout fonctionne bien.

Maintenant, je veux récupérer EditText attributs par défaut dans ma vue personnalisée par exemple Je veux obtenir l'attribut android:text dans ma vue personnalisée.

Ma classe de vue personnalisée (simplifié):

public class CustomEditText extends RelativeLayout { 
    private int panCount; 

    public CustomEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, 
      R.styleable.CustomEditText, 0, 0); 
     try { 
      this.panCount = typedArray.getInt(R.styleable.CustomEditText_panCount, 16); 
     } finally { 
      typedArray.recycle(); 
     } 
    } 
} 

Comment puis-je faire sans redéclarant attribut texte res/values/attrs.xml?

+0

il est déroutant que vous n'utilisez pas votre vue en code XML ...! Êtes-vous sûr d'avoir posté le dernier code? Cochez cette réponse: https://stackoverflow.com/a/8090772/7134908 cela pourrait résoudre votre problème pour définir la valeur en XML et entrer dans Java vode –

+0

Pourriez-vous ajouter votre fichier 'styleable' pour' CustomEditText'? – tynn

+1

Duplication possible de [Comment obtenir des attributs avec l'espace de noms "android" dans TextView personnalisé] (https://stackoverflow.com/questions/26486791/how-to-get-attributes-with-namespace-android-in-custom-textview –

Répondre

0

Je pense que vous ne pouvez pas faire cela. Ajouter un identifiant à votre edittext en xml et si vous voulez récupérer la valeur de editText, utilisez simplement:

edittext.getText().toString() 
+0

Je veux utiliser android: text = "un peu de texte" en XML et le récupérer dans ma classe de vue personnalisée comme les attributs personnalisés – hosseinAmini

+0

S'il vous plaît poster votre classe de vue personnalisée –

+0

J'ai ajouté ma classe de vue personnalisée – hosseinAmini

-1

Je pense qu'il est impossible parce que votre CustomView étend relativeLayout et il ne marche pas avoir cet attribut. Vous pouvez accéder à android: texte ou d'autres attributs si vous étendez EditText ou TextView directement.

0

Vous pouvez construire cette mise en page en utilisant comme

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<EditText 
    android:id="@+id/edittext" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:text="My Custom View" /> 
</RelativeLayout> 

Votre classe CustomView sera comme cette

public class CustomEditText extends RelativeLayout { 
    LayoutInflater mInflater; 

    public CustomView(Context context) { 
     super(context); 
     mInflater = LayoutInflater.from(context); 
     init(); 

    } 

    public CustomView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     mInflater = LayoutInflater.from(context); 
     init(); 
    } 

    public CustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mInflater = LayoutInflater.from(context); 
     init(); 
    } 

    // Here you can access your edittext text 
    public void init() { 
     View v = mInflater.inflate(R.layout.custom_view, this, true); 
     EditText et = (TextView) v.findViewById(R.id.edittext); 
     et.setText(" Custom RelativeLayout"); 
    } 
} 
1

Vous pouvez ajouter à votre android:text déclaré syleable. Mais assurez-vous de ne pas le redéclarer.

<declare-styleable name="CustomEditText"> 
    <attr name="android:text" /> 
</declare-styleable> 

Et puis obtenir cette valeur du style comme vous le feriez avec un autre de vos attributs avec l'indice de R.styleable.CustomEditText_android_text.

CharSequence text = typedArray.getText(R.styleable.CustomEditText_android_text);