NumberPicker scrollt nicht

  • Antworten:3
  • Bentwortet
Michael Röder
  • Forum-Beiträge: 3

22.10.2012, 10:17:24 via Website

Hi,
ich möchte vier NumberPicker in einem LinearLayout nebeneinander darstellen. Dieses LinearLayout befindet sich wiederum neben anderen innerhalb eines ScrollViews.
Die apk wird ohne Fehler erstellt, dummerweise verlieren aber alle NumberPickers (sowohl auf meinem Desire S, als auch im Emulator) ihre Scrollbarkeit, wenn man mit dem Finger drüberwischt. Der Wert rutscht dann einen Millimeter weiter und die "nach oben" / "nach unten" Pfeile verschwinden (siehe erster Picker auf dem Screenshot).




Ich hab zur Sicherheit oben und unten Abstände zum Rand eingeführt, falls das LinearLayout um die vier Picker zu klein ist. Das hat aber auch nichts geändert.
Erkennt jemant, woran das liegen könnte? Die App hat bisher nur eine Activity, daher poste ich fix xml- und java- Code. Das komplette Projekt (inklusive apk) zum Testen liegt auf:

w[orld].w[ide].w[eb].tvr-music.de/temp/Tankstatistik.zip.

Ich musste den Link etwas chiffrieren, weil ich als neuer User leider noch keine Links posten darf. Auch alle "xmins:android"- Tags aus der xml musste ich deshalb entfernen.


xml- File:
1<?xml version="1.0" encoding="utf-8"?>
2
3<ScrollView
4
5 android:layout_width="fill_parent"
6 android:layout_height="fill_parent"
7 android:background="@color/DarkOliveGreen1" >
8
9 <LinearLayout
10
11 android:layout_width="fill_parent"
12 android:layout_height="389dp"
13 android:background="@color/DarkOliveGreen1"
14 android:orientation="vertical" >
15
16 <LinearLayout
17
18 android:layout_width="fill_parent"
19 android:layout_height="wrap_content"
20 android:gravity="center"
21 android:orientation="horizontal"
22 android:layout_gravity="center_horizontal" >
23
24 <TextView
25 android:id="@+id/getankteLiterPickerText"
26 android:layout_width="wrap_content"
27 android:layout_height="wrap_content"
28 android:text="getankte Liter" />
29
30 <TextView
31 android:layout_height="wrap_content"
32 android:layout_width="wrap_content"
33 android:text=" "/>
34
35 <TextView
36 android:id="@+id/gesamtpreisPickerText"
37 android:layout_width="wrap_content"
38 android:layout_height="wrap_content"
39 android:text="Gesamtpreis (€)" />
40 </LinearLayout>
41
42 <LinearLayout
43
44 android:layout_width="fill_parent"
45 android:layout_height="wrap_content"
46 android:gravity="center"
47 android:orientation="horizontal" >
48
49 <NumberPicker
50 android:id="@+id/LNPbigGetankteLiter"
51 android:layout_width="wrap_content"
52 android:layout_height="wrap_content"
53 android:paddingLeft="5dip"
54 android:layout_marginRight="3dip"
55 android:layout_marginBottom="50dip"
56 android:layout_marginTop="50dip">
57 </NumberPicker>
58
59 <NumberPicker
60 android:id="@+id/LNPlowGetankteLiter"
61 android:layout_width="wrap_content"
62 android:layout_height="wrap_content"
63 android:layout_marginLeft="3dip"
64 android:layout_marginRight="50dip">
65 </NumberPicker>
66
67 <NumberPicker
68 android:id="@+id/LNPbigGesamtPreis"
69 android:layout_width="wrap_content"
70 android:layout_height="wrap_content"
71 android:layout_marginRight="3dip"/>
72
73 <NumberPicker
74 android:id="@+id/LNPlowGesamtPreis"
75 android:layout_width="wrap_content"
76 android:layout_height="wrap_content"
77 android:paddingRight="5dip"
78 android:layout_marginLeft="3dip"
79 android:layout_marginBottom="50dip"
80 android:layout_marginTop="50dip">
81 </NumberPicker>
82 </LinearLayout>
83
84 <LinearLayout
85
86 android:layout_width="fill_parent"
87 android:layout_height="wrap_content"
88 android:gravity="center"
89 android:orientation="vertical" >
90
91 <Button
92 android:id="@+id/LBpreisProLiter"
93 style="?android:attr/buttonStyleSmall"
94 android:layout_width="wrap_content"
95 android:layout_height="wrap_content"
96 android:layout_marginBottom="5dip"
97 android:text="berechne Preis pro Liter">
98 </Button>
99
100 <TextView
101 android:id="@+id/LTVpreisProLiter"
102 android:layout_width="wrap_content"
103 android:layout_height="wrap_content"
104 android:text="Preis pro Liter">
105 </TextView>
106
107 </LinearLayout>
108
109 </LinearLayout>
110
111</ScrollView>

java-code
1package de.mic.tankstatistik;
2
3import android.os.Bundle;
4import android.app.Activity;
5import android.view.Menu;
6import android.view.View;
7import android.view.View.OnClickListener;
8import android.widget.Button;
9import android.widget.EditText;
10import android.widget.NumberPicker;
11import android.widget.SeekBar;
12import android.widget.SeekBar.OnSeekBarChangeListener;
13import android.widget.TextView;
14
15public class StartScreen extends Activity implements OnClickListener
16{
17
18 private NumberPicker bigLiterNumberPicker;
19 private NumberPicker lowLiterNumberPicker;
20 private NumberPicker bigGesamtpreisNumberPicker;
21 private NumberPicker lowGesamtpreisNumberPicker;
22
23 private Button preisProLiterButton;
24 private TextView preisProLiterTextView;
25
26 private double gesamtPreis;
27 private double getankteLiter;
28
29 @Override
30 public void onCreate(Bundle savedInstanceState)
31 {
32 super.onCreate(savedInstanceState);
33 setContentView(R.layout.activity_start_screen);
34
35 bigLiterNumberPicker = (NumberPicker)findViewById(R.id.LNPbigGetankteLiter);
36 bigLiterNumberPicker.setMaxValue(65);
37 bigLiterNumberPicker.setMinValue(0);
38 bigLiterNumberPicker.setWrapSelectorWheel(true);
39 lowLiterNumberPicker = (NumberPicker)findViewById(R.id.LNPlowGetankteLiter);
40 lowLiterNumberPicker.setMaxValue(99);
41 lowLiterNumberPicker.setMinValue(0);
42 lowLiterNumberPicker.setWrapSelectorWheel(true);
43
44 bigGesamtpreisNumberPicker = (NumberPicker)findViewById(R.id.LNPbigGesamtPreis);
45 bigGesamtpreisNumberPicker.setMaxValue(130);
46 bigGesamtpreisNumberPicker.setMinValue(0);
47 bigGesamtpreisNumberPicker.setWrapSelectorWheel(true);
48 lowGesamtpreisNumberPicker = (NumberPicker)findViewById(R.id.LNPlowGesamtPreis);
49 lowGesamtpreisNumberPicker.setMaxValue(99);
50 lowGesamtpreisNumberPicker.setMinValue(0);
51 lowGesamtpreisNumberPicker.setWrapSelectorWheel(true);
52
53 preisProLiterButton = (Button)findViewById(R.id.LBpreisProLiter);
54 preisProLiterTextView = (TextView)findViewById(R.id.LTVpreisProLiter);
55
56 preisProLiterButton.setOnClickListener(this);
57
58 }
59
60
61 @Override
62 public boolean onCreateOptionsMenu(Menu menu)
63 {
64 getMenuInflater().inflate(R.menu.activity_start_screen, menu);
65 return true;
66 }
67
68 public void onClick(View v)
69 {
70 // TODO Auto-generated method stub
71 if ( v == preisProLiterButton)
72 {
73 getankteLiter = bigLiterNumberPicker.getValue();
74 getankteLiter += ((double)lowLiterNumberPicker.getValue()) / 100;
75
76 gesamtPreis = bigGesamtpreisNumberPicker.getValue();
77 gesamtPreis += ((double)lowGesamtpreisNumberPicker.getValue()/100);
78
79 if (0 == getankteLiter )
80 {
81 preisProLiterTextView.setText("gib die Anzahl getankter Liter ein");
82 }
83
84 else
85 {
86 double preisProLiter;
87
88 preisProLiter = gesamtPreis/getankteLiter;
89 preisProLiter = (double)Math.round(preisProLiter*1000)/1000; //runden auf 2. Stelle nach dem Komma
90
91 preisProLiterTextView.setText(""+preisProLiter+" €");
92 }
93 }
94 }
95
96}

— geändert am 22.10.2012, 10:40:33

Antworten
Michael Röder
  • Forum-Beiträge: 3

22.10.2012, 13:55:19 via Website

Nach einigem Herumprobieren habe ich festgestellt, dass das Problem verschwindet (sich also der NumberPicker wie gewünscht verhält), wenn ich das ScrollView im xml- File auskommentiere. Der Fingerwisch scheint beim Verlassen des Pickers als Scrollbewegung für das ScrollView verwendet zu werden.

Bedeutet das damit, dass NumberPicker nur ohne ScrollView verwendet werden können? Das wäre doof, weil ich gerne alle Usereingaben auf einer Seite (Activity) entgegennehmen würde, um die Übersichtlichkeit zu bewahren. Klar könnte man die Daten per Intents an weitere Activities weiterreichen aber ich würde wie gesagt gern eine einzige Seite in der App haben.

Hat jemand vielleicht ne Idee, wie weitere (folgende) Felder innerhalb einer Seite untergebracht werden können?

Antworten
Michael Röder
  • Forum-Beiträge: 3

23.10.2012, 13:20:40 via Website

Funktioniert wunderbar!

Vielen dank für die schnelle Hilfe! -_-

Antworten