Spinner mit Zahlen

J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Hallo, gibt es eine UI-Komponente die ähnlich wie ein DatePicker oder Timepicker aussieht nur mit einer beliebigen Zahl drin und dann ein Plus oder Minus zum rauf und runter drücken? Also einen Spinner meine ich. Hier bei Android is Spinner ja ne ComboBox. :confused:
 
V

viden

Neues Mitglied
Man kann die Grundkomponente (NumberPicker) aus der der DatePicker besteht aus den Android Quellen extrahieren und selbst benutzen.. (Sind internal, können also nicht ohne weiteres einfach benutzt werden) Is ne ganz nette Sache, benutze ich auch.
Es gibt ferige Projekte in denen du nur noch die Sourcen ziehen musst. (z.B. NumberPicker für Android Mobile Solutions Blog)

Greets
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Thx a lot...das sieht schon mal gut aus. Hab das auch soweit integriet in meiner Anwendung. Weiß nur nicht wie ich das Teil aufrufen kann, z.B. beim Buttonklick. Habe folgendes versucht:

Code:
        myButton = (Button)findViewById(R.id.SwitchBtn);
        myButton.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v) 
            { 
                NumberPicker test = new NumberPicker(main.this);
            }
        });
Da bekommt er eine Exception. :confused:
 
V

viden

Neues Mitglied
in XML habe ich ihn einfach so integriert:

Code:
<TableRow>
        <ch.android.ebd.NumberPicker 
            android:id="@+id/Multistate"
            android:gravity="center"
            />                    
    </TableRow>
das funktioniert super


das Ganze ist bei mir in einem Dialog drinne...

Dafür machst du in Layouts einfach eine neue XML file, zB NumberpickerDialog.xml

dann machst du dir ein deiner Activity einen Dialog und weist ihm deine numberpicker_dialog.xml als Layout zu.

Code:
Dialog numPickDialog = new Dialog(this);
numPickDialog.setContentView(R.layout.numberpicker_dialog);
numPickDialog.setTitle("My Numberpicker Dialog");

Button dialogBtn = (Button) findViewById(R.id.DialogButton);
dialogBtn.setOnClickListener(new DialogButtonOpenListener(numPickDialog));

protected class DialogButtonOpenListener implements OnClickListener {

        Dialog dialog;

        public DialogButtonOpenListener(Dialog dialog) {
            this.dialog = dialog;
        }

        public void onClick(View v) {
            dialog.show();
        }
    }
Dann legst du wie du es gemacht hast einen Listener auf deinen Butten mit dem du den Numberpicker anzeigen willst und machst dialog.show() in der methode.
Damit wird der Dialog mit dem Numberpicker angezeigt.. am besten du platzierst noch einen "ok" Butten unter dem Numberpicker, der den Dialog dann wider schliesst...

Greets
 
Zuletzt bearbeitet:
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Hmmm muß doch aus dem laufenden Programm auch gehen oder? Also ich habe mir vorgestellt wenn ich den Button drücke popt halt der NumberPicker auf, mach meine Einstellungen und schliesse den wieder.
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Ok hast noch was zugeschrieben.
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Ich krieg das nicht hin. Wie muß denn die Dialog xml aussehen? in den sourcen lagen zwei xmls bei. number_picker.xml und number_picker_edit.xml

number_picker.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
    <!--
        ** ** Copyright 2008, The Android Open Source Project ** ** Licensed
        under the Apache License, Version 2.0 (the "License"); ** you may not
        use this file except in compliance with the License. ** You may obtain
        a copy of the License at ** **
        http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by
        applicable law or agreed to in writing, software ** distributed under
        the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES
        OR CONDITIONS OF ANY KIND, either express or implied. ** See the
        License for the specific language governing permissions and **
        limitations under the License. */
    -->

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <eu.kroczek.NumberPickerButton android:id="@+id/increment"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/timepicker_up_normal"
        />
    <EditText android:id="@+id/timepicker_input"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="center" 
        android:singleLine="true"
        style="?android:attr/textAppearanceLargeInverse" 
        android:textSize="30sp"
        android:background="@drawable/timepicker_input_normal" />

    <eu.kroczek.NumberPickerButton
        android:id="@+id/decrement" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:background="@drawable/timepicker_down_normal" />

</merge>

number_picker_edit.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2008, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->

<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:singleLine="true"
    style="?android:attr/textAppearanceLargeInverse"
    android:textSize="30sp"
    android:background="@drawable/timepicker_input_normal"
    />
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Das
Code:
numPickDialog.setContentView(R.layout.number_picker);
schmiert ab. Warum? :confused:
 
V

viden

Neues Mitglied
Also....

Du machst folgendes:

1. Kopiere NumberPicker.java & NumberPickerButton.java in dein Main package wo alle deine Java Dateien liegen.

2. Kopiere alle timpepicker_* Dateien (14 PNGs & 3xmls) in deinen res/drawable/ ordner

3. Kopiere number_picker.xml & number_picker_edit.xml in deinen res/layout/ ordner

4. lege eine neue xml datei in res/layout/ an und füge dort z.B. da hier ein
Code:
 <?xml version="1.0" encoding="utf-8"?>
<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:stretchColumns="*">
      <TableRow>
        <[b]dein.pfad[/b].NumberPicker 
            android:id="@+id/NumberPicker"
            android:gravity="center"
            />                    
    </TableRow>
    <TableRow>
        <Button 
        android:id="@+id/DialogBtn" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"
        android:text="ok" 
        android:gravity="center_horizontal|center_vertical"
        />
    </TableRow>
</TableLayout>
5. Den Listener usw. machst du wie vorher beschrieben

Greets

David
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Also Danke erstmal für deine Hilfsbereitschaft, aber wie is das gemeint mit "dein.pfad"? Ich weiß nicht was ich da angeben soll. Meine main.java liegt in package com.programmname & die anderen beiden auch. MfG
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
So hab jetzt! Schwere Geburt. :D
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Wie kann ich in dem Spinner z.B ein Startwert setzen? Die +/- sind auch nicht focusable. Ist das Ding überhaupt benutzbar?
 
V

viden

Neues Mitglied
Code:
NumberPicker numberPicker = (NumberPicker) multistateDialog.findViewById(R.id.Multistate);
        numberPicker.setRange(0, 3, new String []{"off", "slow", "med", "fast"});
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Hab noch zusätzlich einen Button eingebaut in dem NumberPickerDialog der das Eingestellte übernimmt oder so. Ich komme leider nicht an diesen Button ran von außen. Ich hätte dem Button gern ein click Listener verpasst. Ich hab mal debuggt und das Button Objekt ist null.Wer kann da helfen?
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Hab noch ne Frage bezüglich des NumberPickers. Der + & - Button hat kein Focus. Ich kann zwar klicken und alles aber die Farbe ändert sich nicht. Die Bilder dazu liegen in dem NumberPicker Beispiel bei. Aber irgendwie funzt es nicht. Muß ich da noch was einstellen oder so?
 
J

joschika77

Fortgeschrittenes Mitglied
Threadstarter
Hallo. Ich muß das Thema nochmal anschneiden. Mich interessiert das Beispiel vom Anfang des posts, also was viden gepostet hat. Soweit geht das jetzt auch alles, ich bekomme es nur nicht hin wenn ich z.B den Fokus auf den + Button habe, das mir das Bild mit ne anderen Farbe angezeigt wird. Also als wenn es Original wäre. Die Bilder dazu liegen ja bei, leider weiß ich nicht wie ich das implementieren soll. Ich hoffe das jemand sich mit dem Beispiel auskennt und mir helfen kann. MfG
 
Oben Unten