IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Créer une vue personnalisé


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut Créer une vue personnalisé
    Bonjour ,

    j'aimerais créer une vue personnalisé mais étant débutant sous android je ne comprends pas trop comment l'instancier à partir de mon activité main.
    Voici mon code dans mon activité main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    package com.example.trajet;
     
    import android.os.Bundle;		
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.content.Intent;
    import android.widget.Button;
     
    public class MainActivity extends Activity implements OnClickListener{
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		Button boutonExercice = (Button)findViewById(R.id.exerciceButton);
    		Button boutonQuitter = (Button)findViewById(R.id.quitterButton);
    		boutonExercice.setOnClickListener(this);
    		boutonQuitter.setOnClickListener(this);
    	}
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		getMenuInflater().inflate(R.menu.activity_main, menu);
    		return true;
    	}
     
    	@Override
    	public void onStart(){
    		super.onStart();
    		System.out.println("je me lance start !");
    	}
     
    	@Override
    	public void onClick(View v) {
    		// TODO Auto-generated method stub
    		switch(v.getId()){
    		case R.id.exerciceButton:
    			startActivity(new Intent(this, MaVue.class));
    			break;
    		case R.id.quitterButton:
    			System.exit(0);
    			break;
    		}
    	}
     
    }
    Voici mon code dans ma classe vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    package com.example.trajet;
     
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Point;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.view.View;
     
    public class MaVue extends View {
    	public MaVue ( Context context ) {
    		super ( context );
    	}
    	protected void onDraw(Canvas canvas) {
    		super.onDraw(canvas);
    		Point pt1 = null;
    		Point pt2 = null;
    		Paint paint = new Paint ();
    		paint.setColor (Color.DKGRAY);
    		paint.setStrokeWidth (2);
    		canvas.drawLine(pt1 .x, pt1 .y, pt2 .x, pt2 .y, paint);
    	}
    	public MaVue(Context context, AttributeSet attrs, int defStyle) {
    		super(context, attrs, defStyle);
    		// TODO Auto-generated constructor stub
    	}
    	public MaVue(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		// TODO Auto-generated constructor stub
    	}
    	public boolean onTouchEvent(MotionEvent event) {
    		return super.onTouchEvent ( event );
    	}
     
    }
    voici le code dans mon ma_vue.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version ="1.0" encoding ="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     
    android:layout_width ="fill_parent"
    android:layout_height ="fill_parent"
    android:gravity ="center_horizontal|center_vertical"
    android:orientation ="vertical" >
     
    <com.example.trajet
    android:id ="@+id/mavue"
    android:layout_height ="fill_parent"
    android:layout_width ="fill_parent" />
     
    </LinearLayout>
    Et pour finir voici mon code dans mon manifest.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.trajet"
        android:versionCode="1"
        android:versionName="1.0" >
     
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="15" />
     
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/title_activity_main" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity 
                android:name=".MaVue"
                android:label="@string/exercice_titre"
                >
     
            </activity>
     
        </application>
     
    </manifest>
    Mon erreur quand j'execute est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    11-10 09:25:04.206: I/System.out(631): je me lance start !
    11-10 09:25:06.165: D/dalvikvm(631): newInstance failed: no <init>()
    11-10 09:25:06.165: D/AndroidRuntime(631): Shutting down VM
    11-10 09:25:06.176: W/dalvikvm(631): threadid=1: thread exiting with uncaught exception (group=0x40014760)
    11-10 09:25:06.185: E/AndroidRuntime(631): FATAL EXCEPTION: main
    11-10 09:25:06.185: E/AndroidRuntime(631): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.trajet/com.example.trajet.MaVue}: java.lang.InstantiationException: com.example.trajet.MaVue
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1739)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.app.ActivityThread.access$500(ActivityThread.java:122)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.os.Looper.loop(Looper.java:132)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.app.ActivityThread.main(ActivityThread.java:4123)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at java.lang.reflect.Method.invokeNative(Native Method)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at java.lang.reflect.Method.invoke(Method.java:491)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at dalvik.system.NativeStart.main(Native Method)
    11-10 09:25:06.185: E/AndroidRuntime(631): Caused by: java.lang.InstantiationException: com.example.trajet.MaVue
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at java.lang.Class.newInstanceImpl(Native Method)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at java.lang.Class.newInstance(Class.java:1301)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1730)
    11-10 09:25:06.185: E/AndroidRuntime(631): 	... 11 more
    Pouvez vous m'aider svp

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    La tu confonds "Activité" et "View"

    Une "View" (ou "Vue") est un widget d'interface.... comme un bouton etc... Une fois définie (et compilée) dans le projet, elle doit apparaitre dans la boite à outil de conception d'interface, et peut être placé dans un layout comme tout autre objet d'interface. La j'ai l'impression que tu l'as fait à la main... puisque le résultat devrait être un truc genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <com.example.trajet.MaVue
    android:id ="@+id/mavue"
    android:layout_height ="fill_parent"
    android:layout_width ="fill_parent" />

    Une "Activité" est une "fenêtre" d'interface englobant une liste de views, de menus, etc... Implémentation de onCreate/etc...
    startActivity s'attend à recevoir une Activité en paramètre, hors tu lui passe un "widget"... du coup ça ne marche pas...

    Il faut créer une activité (donc qui hérite de Activity) et qui passe en content-view (setContentView) le layout que tu as défini. C'est cette activité qui doit être déclarée dans le manifest.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Ah ben c'est plus clair en effet j'avais du mal à comprendre ce qu'était une vue , par rapport à une activité. En fait le contentView est ce qui fait la liaison entre le .xml (contenant la vue etc ... ) et l'activité ? c'est ça ?

    Quand tu fais le bout de code que tu as mis dans le xml , tu as quand meme une classe java à creer pour définir la vue que tu veux implémenter ? qui doit là en occurence s'appeler mavue.java ?

  4. #4
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Oui MaVue.java.
    Toutes les classes ont l'extension .java même si c'était un service (aucun rendu).

    Considère les activity(ies) comme des applications à part, tu comprendras mieux avec les intent.

    Je considère les view comme des classes ayant un rendu "spécial", un rendu plus graphique, comme des composants, on les code de A à Z, pas juste l'implémentation. Tu as aussi la partie présentation (rendering).

    Bien sûr, tu peux utiliser ces view dans des activity.
    Si la réponse vous a aidé, pensez à cliquer sur +1

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    ok merci pour vos explications. j'ai mit de l'ordre et mieux structuré mon code qui fonctionne grace à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une vue sous Access 2003
    Par jlvalentin dans le forum Access
    Réponses: 5
    Dernier message: 22/08/2006, 12h29
  2. [9iR2][PL/SQL] Comment créer une vue dans un package ?
    Par mainecoon dans le forum Oracle
    Réponses: 6
    Dernier message: 22/02/2006, 08h10
  3. [requète sql] Créer une vue ordonnée
    Par gangsoleil dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/01/2006, 18h34
  4. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo