AlertDialog in Landscape ohne Button

K

keen

Ambitioniertes Mitglied
10
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()
}
 
Ich nehme an du hast du zu wenig Platz.
Pack mal deinen Numberpicker in eine ScrollView, damit der zur Not gescrollt werden kann.
 
  • Danke
Reaktionen: keen
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
[doublepost=1533501375,1533499246][/doublepost]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? =)
 
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:
  • Danke
Reaktionen: keen

Ähnliche Themen

J
  • Juleru
Antworten
8
Aufrufe
497
Juleru
J
A
  • AnimaAngelo85
Antworten
1
Aufrufe
337
swa00
swa00
MES
Antworten
10
Aufrufe
822
MES
MES
Zurück
Oben Unten