1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. keen, 05.08.2018 #1
    keen

    keen Threadstarter Android-Hilfe.de Mitglied

    Hi,

    ich schreibe gerade an einer kleinen App, in der ich Formulare verwende.
    Zum Auswahl eines Zahlenwerts habe ich einen NumberPicker in einen AlerDialog gepackt.
    In der Orientation 'Portrait' funktioniert es auch einwandfrei aber wenn ich das Handy in Landscape drehe sind die Button aus dem Alertdialog nicht mehr zu sehen.

    Kennst jemand das Problem und kann mir helfen?

    Hier der Code dazu:

    layout/number_picker_dialog.xml
    Code:
    <?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <NumberPicker
            android:id="@+id/scba_numberpicker"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="24dp"
            android:layout_marginEnd="24dp"
            android:layout_marginLeft="24dp"
            android:layout_marginRight="24dp"
            android:layout_marginStart="24dp"
            android:layout_marginTop="24dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </android.support.constraint.ConstraintLayout>
    
    Activity:
    Code:
    class TeilnahmeActivity : AppCompatActivity() {
    ...
    override fun onCreate(savedInstanceState: Bundle?) {
    ...
    p_scba_duration.setOnClickListener {
        val dialogView = layoutInflater.inflate(R.layout.number_picker_dialog, null)
    
    
        val numberpicker = dialogView.findViewById<NumberPicker>(R.id.scba_numberpicker)
        numberpicker.apply {
            displayedValues = arrayOf("kein Atemschutzeinsatz", "5min", "10min", "15min", "30min", "45min", "1 Stunde", "1.5 Stunden", "2 Stunden", "mehr als zwei Stunden")
            minValue = 0
            maxValue = displayedValues.lastIndex
            wrapSelectorWheel = false
        }
    
        val alertDialog = AlertDialog.Builder(this@TeilnahmeActivity).apply {
            setTitle("Atemschutzeinsatz")
            setMessage("Zeit im Atemschutzgeräteeinsatz:")
            setView(dialogView)
            setPositiveButton("Eintragen"){ _, _ ->
                p_scba_duration.setText(numberpicker.displayedValues[numberpicker.value])
            }
            setNegativeButton("Abbrechen"){_, _ -> ; }
        }
        alertDialog.create().show()
    }
    
     
  2. deek, 05.08.2018 #2
    deek

    deek Android-Experte

    Ich nehme an du hast du zu wenig Platz.
    Pack mal deinen Numberpicker in eine ScrollView, damit der zur Not gescrollt werden kann.
     
    keen bedankt sich.
  3. keen, 05.08.2018 #3
    keen

    keen Threadstarter Android-Hilfe.de Mitglied

    Das klappt leider auch mit ScrollView nicht. Außerdem ist mir folgender Fehler aufgefallen, wenn die das Smartphone bei geöffnetem Dialog drehe:
    Code:
    E/WindowManager: .... has leaked window  ... that was originally added here
    -- Dieser Beitrag wurde automatisch mit dem folgenden Beitrag zusammengeführt --
    ich habe das Problem lösen können in dem ich die Höhe für den NumberPicker einstelle.
    Code:
    <NumberPicker
        android:layout_height="100dp"
    
    Ich werde mir wohl ein ein *-landscape.xml anlegen und die maxHeight relativ zur ScreenResolution einstellen.
    Weiß jemand auf die Schnelle wie das am einfachsten im xml geht? =)
     
  4. swa00, 05.08.2018 #4
    swa00

    swa00 Moderator Team-Mitglied

    Du kannst auch einen einfachen Dialog nehmen , diesem ein Layout zuordnen und Breite & Höhe Prozentual zuordnen

    Bsp :

    Code:
    public class MeinDialog extends Dialog 
    Code:
     @Override public void onStart()
            {
                DisplayMetrics metrics = new DisplayMetrics();
                mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
                int height = (int) (metrics.heightPixels*0.7); // 70%
                int width = (int) (metrics.widthPixels*0.7);
                getWindow().setLayout(width,height);
                getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            }
    Code:
     @Override
            protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                requestWindowFeature(Window.FEATURE_NO_TITLE);
                setContentView(R.layout.dein_layout);
    Aufruf

    Code:
     MeinDialog cdd = new MeinDialog(mActivity);
              cdd.setCancelable(false);
              cdd.setCanceledOnTouchOutside(false);
              cdd.show();
    Deine Elemente im Layout würde ich noch in einen ScrollView Container setzen.

    Und zum Schluss kannst Du noch auf den OrientationListener reagieren
     
    Zuletzt bearbeitet: 06.08.2018
    keen bedankt sich.
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Zuletzt geklickten Button automatisch auf Invisible setzen Android App Entwicklung 01.11.2018
Button, der ein Menü öffnet? Android App Entwicklung 08.08.2018
Alertdialog mit Button erweitern Android App Entwicklung 02.02.2018
Du betrachtest das Thema "AlertDialog in Landscape ohne Button" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.