Ich habe TimePicker verwendet, damit der Benutzer die Zeit wählen kann, siehe ici y auch hier . Aber ich habe keine Möglichkeit gefunden, den Benutzer dazu zu bringen, auch die zweite Option zu wählen. Jetzt kann der Benutzer die Stunde und die Minute auswählen, aber nicht die Sekunde. Wenn ich eine Zeit für 02:05:10 einstellen möchte, was muss ich dann tun? Wie kann man eine Sekunde mit TimePicker auswählen?
Antworten
Zu viele Anzeigen?Ich habe ein Open-Source-Projekt auf GitHub veröffentlicht, das TimePicker mit Sekunden hat:
https://github.com/IvanKovac/TimePickerWithSeconds
Schauen Sie selbst.
Eine schnelle und schmutzige Methode ist, zwei TimePicker zu verwenden, einen für Stunden und Minuten, und die Minuten des anderen als Sekunden zu verwenden. Verstecken Sie die ungenutzten Stunden unter den ersten Minuten. Dies funktioniert nur im 24-Stunden-Modus. Muss timepicker für Sekunden zuerst deklarieren, so befindet sich unter.
<RelativeLayout
<TimePicker
android:id="@+id/timePicker_Sec"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="76dp" />
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/timePicker_Sec"
android:layout_marginLeft="0dp" />
</RelativeLayout>
Der beste Weg, um dies zu umgehen wäre, drei separate "Nummer Picker" anstelle von timepicker erstellen... Ich platzierte sie innerhalb eines linearen Layouts und seine Arbeit gut.
Dann speichern Sie die Werte einfach in drei separaten Variablen. int Hours, int Minutes, int Seconds und führen Ihre Berechnungen durch.
So konnte ich das Problem umgehen, ohne externe Quellen herunterzuladen, die Viren enthalten könnten.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<NumberPicker
android:id="@+id/numpicker_hours"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</NumberPicker>
<NumberPicker
android:id="@+id/numpicker_minutes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp">
</NumberPicker>
<NumberPicker
android:id="@+id/numpicker_seconds"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</NumberPicker>
</LinearLayout>
Hier ist ein benutzerdefinierter TimePickerDialog mit Sekunden.
MainActivity.java
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.NumberPicker;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
final TextView timeTV = findViewById(R.id.time_text_view);
timeTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view = View.inflate(MainActivity.this, R.layout.time_dialog, null);
final NumberPicker numberPickerHour = view.findViewById(R.id.numpicker_hours);
numberPickerHour.setMaxValue(23);
numberPickerHour.setValue(sharedPreferences.getInt("Hours", 0));
final NumberPicker numberPickerMinutes = view.findViewById(R.id.numpicker_minutes);
numberPickerMinutes.setMaxValue(59);
numberPickerMinutes.setValue(sharedPreferences.getInt("Minutes", 0));
final NumberPicker numberPickerSeconds = view.findViewById(R.id.numpicker_seconds);
numberPickerSeconds.setMaxValue(59);
numberPickerSeconds.setValue(sharedPreferences.getInt("Seconds", 0));
Button cancel = view.findViewById(R.id.cancel);
Button ok = view.findViewById(R.id.ok);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setView(view);
final AlertDialog alertDialog = builder.create();
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timeTV.setText(numberPickerHour.getValue() + ":" + numberPickerMinutes.getValue() + ":" + numberPickerSeconds.getValue());
// timeTV.setText(String.format("%1$d:%2$02d:%3$02d", numberPickerHour.getValue(), numberPickerMinutes.getValue(), numberPickerSeconds.getValue()));
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("Hours", numberPickerHour.getValue());
editor.putInt("Minutes", numberPickerMinutes.getValue());
editor.putInt("Seconds", numberPickerSeconds.getValue());
editor.apply();
alertDialog.dismiss();
}
});
alertDialog.show();
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/time_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
zeit_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
android:gravity="center"
android:orientation="horizontal">
<NumberPicker
android:id="@+id/numpicker_hours"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<NumberPicker
android:id="@+id/numpicker_minutes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp" />
<NumberPicker
android:id="@+id/numpicker_seconds"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ffF0F0F0" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@android:color/transparent"
android:text="Cancel"
android:textAllCaps="false" />
<View
android:id="@+id/view2"
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#ffF0F0F0" />
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@android:color/transparent"
android:text="OK"
android:textAllCaps="true" />
</LinearLayout>
</LinearLayout>
- See previous answers
- Weitere Antworten anzeigen