1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Custom View

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Unicate, 28.09.2010.

  1. Unicate, 28.09.2010 #1
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Hi alle zusammen!

    Ich möchte eine CustomView bauen.

    Zu beginn dacht ich, dass ich mal ganz klein anfange und einen Button ableite.
    Ich suche mich heute schon den ganzen Tag Tod deswegen.
    Das was ich gefunden haben, hat mich nicht weiter gebracht.

    Also hier mal das was ich habe:

    Der Button:
    PHP:
    public class ConnectionButton extends Button implements OnClickListener{

        public 
    ConnectionButton(Context contextAttributeSet attrs) {
            
    super(contextattrs);
            
    setOnClickListener(this);
            
    setBackgroundColor(Color.WHITE);
        }

        
    /**
         * static vars
         */
        
    private static final int STATE_DISCONNECTED 0;
        private static final 
    int STATE_PENDING 1;
        private static final 
    int STATE_CONNECTED 2;
        
    /**
         * normal members
         */
        
    private final int _state 0;
        @
    Override
        
    public void onClick(View v) {
            
    Log.e("Button""click");
        }

    }
    Die dazugehörige xml:
    HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <de.unicate.android.button.ConnectionButton
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
    </de.unicate.android.button.ConnectionButton>
    
    
    Meine main.xml:
    HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <View
        class ="de.unicate.android.button.ConnectionButton"
        android:text="my button" 
        android:id="@+id/Button01" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" />
    </LinearLayout>
    
    Fehlt noch was?

    Wenn ich das App starte passiert gar nichts. Was mach ich falsch?
     
  2. Unicate, 29.09.2010 #2
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Hat noch keiner von euch ne CustomView gebaut?
    Kann ich mir fast nicht vorstellen.
     
  3. DieGoldeneMitte, 29.09.2010 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Im Prinzip sieht dein Code ganz gut aus. Zwei Sachen fallen mir auf:

    1.) final _state = ... ? Ein state sollte sich aber ändern (können), oder? ;-) Das kann aber eigentlich nix mit deinem Problem zu tun haben.

    2.) Du benutzt <View class="de.unikat.Button" .../> Das sieht komisch aus. Eigentlich muss der Klassenname des Views der Elementname sein, also <de.unikat.Button ... />.
     
  4. Unicate, 29.09.2010 #4
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Du hast natürlich recht, der state darf nicht final sein, mein Fehler.

    Ich bin gerade dem Tutorial nachgegangen und es funktionierte.
    Ich hatte irgendwo gelesen, das man das mit <view class="de. ...... /> machen muss.

    Egal, danke erstmal
     
  5. DieGoldeneMitte, 29.09.2010 #5
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Habe nach nachgucken Deine Version nun auch gefunden.
    Aaaber: XML ist Case sensitiv, und Du schriebst "View" anstatt "view".
    Ich denke mal, dass Du damit die Basisklasse View aufgerufen hattest und die ignorierte class und zeigte halt nix an.
     
    Zuletzt bearbeitet: 29.09.2010
  6. BenOtto, 29.09.2010 #6
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Genau. Bei eigenen Views hast du die Wahl zwischen <de.example.MyView ... /> und <view class="de.example.MyView" ... />

    das hat beides die selbe Wirkung (und ist wohl Geschmackssache).

    Bei inneren Klassen bleibt nur die 2te Variante. <view class="de.example.MyView$InnerClass" ... />

    Und falls du innerhalb eines Layouts referenzieren möchtest geht das mit <include layout="@layout/layout_resource"/>.
    (Vielleicht hattest du das vor, weil du ja 2 XMLs angelegt hast.)
     
    Zuletzt bearbeitet: 29.09.2010

Diese Seite empfehlen