Custom View

U

Unicate

Erfahrenes Mitglied
57
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 context, AttributeSet attrs) {
        super(context, attrs);
        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?
 
Hat noch keiner von euch ne CustomView gebaut?
Kann ich mir fast nicht vorstellen.
 
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 ... />.
 
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
 
Unicate schrieb:
Ich hatte irgendwo gelesen, das man das mit <view class="de. ...... /> machen muss.

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:
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:

Ähnliche Themen

P
Antworten
0
Aufrufe
555
Pascppal
P
J
Antworten
2
Aufrufe
984
justinh13
J
Tiefkuehlpizza
Antworten
2
Aufrufe
954
Tiefkuehlpizza
Tiefkuehlpizza
Zurück
Oben Unten