2010-09-15 4 views
1

Voici l'affaire.Ajout d'un ImageView personnalisé à la mise en page principale

je regardais ce code sur l'extension d'un ImageView:

http://marakana.com/forums/android/examples/98.html

et je me demandais comment puis-je ajouter la nouvelle vue dans un fichier xml de mise en page existante, ainsi que d'autres points de vue.

déjà je l'ai fait dans ma principale disposition linéaire:

<FrameLayout android:id="@+id/FrameLayout01" android:layout_width="300dp" android:layout_height="300dp"> 
     <com.marakana.Rose android:layout_height="wrap_content" android:layout_width="wrap_content"/> 

mais le problème est que cette façon la méthode onDraw ne soit pas appelé.

Quelqu'un peut-il suggérer une solution pour cela? peut-être quelques exemples où vous combinez CustomViews avec la mise en page xml.

tnx.

Répondre

0

Je pense que je l'ai résolu. J'ai utilisé mon code dans le fichier main.xml et cela fonctionne. la chose que je devais faire était de remplacer un nouveau constructeur de classe acceptant AttributesSet avec le contexte en tant que paramètre, puis utiliser findViewById (CustomViewName) pour le référencer dans l'activité et utiliser les fonctions définies dans le CustomView.

+0

donc si vous ajoutez dynamiquement vue par le code et ne peut pas utiliser findViewById alors comment vous pouvez le faire? – ozmank

+0

Vous créez une nouvelle vue par exemple CustomView cv = new CustomView (contexte); Recherchez ensuite la référence à la disposition racine de cette vue, par exemple un LinearLayout dans lequel vous souhaitez placer la vue en tant qu'enfant. Ensuite, faites linear.addView (cv); – DArkO

2

Avez-vous ajouté la définition à res/values ​​/ attrs.xml?

<declare-styleable name="Rose"> 
</declare-styleable> 

Je ne sais pas si cela est nécessaire si vous ne pas ajouter un attribut xml ...

De plus, il serait utile si vous le code posté com.marakana.Rose. À titre d'exemple, voici la déclaration de classe d'un composant de mon propre:

public class CalendarCell extends ImageButton implements OnTouchListener 

le onDraw:

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

et ceci est un extrait de ma mise en page xml:

<TableRow> 
     <com.view.customcomponents.CalendarCell 
      style="@style/NumericImageButton" 
      android:id="@+id/calendar_row1_col1" 

      android:background="@drawable/calendar_bg_selector" /> 

Je l'ai fait il y a quelque temps en suivant un tutoriel, mais je ne me souviens plus où. Aussi, je pourrais manquer quelque chose. Google un peu et vous trouverez des ressources utiles.

edit: Je pense que ce sont les tutoriels que je suivais, bien que je devais mettre dans un certain travail à faire enfin fonctionner:

Official docs

AndDev.org

0

Pour permettre aux outils de développement Android pour interagir avec vous, au minimum, vous devez fournir un constructeur qui prend un contexte et un objet AttributeSet en tant que paramètres.Ce constructeur permet au layout editor to create and edit an instance of your view.

class PieChart extends View { 
    public PieChart(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
} 

Et les détails Answer here

Questions connexes