Home » Android » java – Buttons of alert dialog are cut off

java – Buttons of alert dialog are cut off

Posted by: admin May 14, 2020 Leave a comment

Questions:

I have an alert dialog which is started when someone touches a specific button. The alert dialog contains a view that is defined by a layout xml file. This layout contains several controls like check boxes, edit text fields, … These controls are all inside a scrool view so that you can scroll through the content, if the whole content doesn’t fit on the screen.

The problem is now that when I start this alert dialog, the buttons at the bottom are cut off screen. Altough the scrool bar is working and I can scroll through the content of the alert dialog, the buttons of the alert dialog are sometimes not totally visible.

This means:
Sometimes, all is fine and I can see the buttons of the alert dialog, an sometimes for strange reason, the buttons are cut off. I think it’s an issue of the view being to big for the alert dialog and pushing the buttons more down.
For example, the view contains an edit text control. If I enter my name ther, everything is fine. But if I add a new line to this edit text, the buttons start to be cut off a little bit.
What did I wrong? I thought the scroll view would handle the oversize of my view so that the alert dialog fits to the screen.
My app is in portrait mode always.

The code of the view:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="5dp" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/bitteeinstellungenwaehlen" />

        <EditText
            android:id="@+id/edtTeam1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/hteam1"
            android:text="Christoph" >

            <requestFocus />
        </EditText>

        <EditText
            android:id="@+id/edtTeam2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/hteam2"
            android:text="Lea" />

        <EditText
            android:id="@+id/edtTeam3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/hteam3"
            android:text="Ludwig" />

        <EditText
            android:id="@+id/edtTeam4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/hteam4"
            android:text="Anja" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/weitereeinstellungen" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <CheckBox
                android:id="@+id/chkModerationMode"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/moderationsmodus" />

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="@string/info" />

        </LinearLayout>

        <CheckBox
            android:id="@+id/chkPassOver"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="@string/weitergeben" />

        <CheckBox
            android:id="@+id/chkBlackScreen"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/blankscreen" />

    </LinearLayout>

</ScrollView>

And that’s how I start the alert dialog:

    final AlertDialog.Builder alert = new AlertDialog.Builder(QuizEditor.this);

    alert.setTitle(getString(R.string.speichernUndVorschau) + "...");
    alert.setMessage("");


    LayoutInflater inflater = LayoutInflater.from(QuizEditor.this);
    final View layFrage = inflater.inflate(R.layout.layoutquizsettings,null);
    alert.setView(layFrage);

    final CheckBox chkModeration = (CheckBox) layFrage.findViewById(R.id.chkModerationMode);
    final CheckBox chkPassOver = (CheckBox) layFrage.findViewById(R.id.chkPassOver);
    final CheckBox chkBlackScreen = (CheckBox) layFrage.findViewById(R.id.chkBlackScreen);

    final EditText edtTeam1 = (EditText) layFrage.findViewById(R.id.edtTeam1);
    final EditText edtTeam2 = (EditText) layFrage.findViewById(R.id.edtTeam2);
    final EditText edtTeam3 = (EditText) layFrage.findViewById(R.id.edtTeam3);
    final EditText edtTeam4 = (EditText) layFrage.findViewById(R.id.edtTeam4);



    alert.setNeutralButton(getString(R.string.speichernUndVorschau), new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {




    }
    });

    alert.setNegativeButton(getString(R.string.abbrechen), new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        // Canceled.
      }
    });



    final AlertDialog dialog2 = alert.create();

    dialog2.setOnShowListener(new OnShowListener() {

        @Override
        public void onShow(DialogInterface dialog) {
            // TODO Auto-generated method stub
            Button btnStarten = (Button) dialog2.getButton(AlertDialog.BUTTON_NEUTRAL);
            btnStarten.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    ArrayList<String> teams = new ArrayList<String>();

                    String team1 = edtTeam1.getText().toString().trim();
                    String team2 = edtTeam2.getText().toString().trim();
                    String team3 = edtTeam3.getText().toString().trim();
                    String team4 = edtTeam4.getText().toString().trim();

                    if(team1.length() > 0) teams.add(team1);
                    if(team2.length() > 0) teams.add(team2);
                    if(team3.length() > 0) teams.add(team3);
                    if(team4.length() > 0) teams.add(team4);

                    if(teams.size() == 0) {
                        Toast.makeText(QuizEditor.this, getString(R.string.keinteameingegeben), Toast.LENGTH_SHORT).show();

                    }
                    else
                    {
                        // Quiz starten



                        dialog2.dismiss();
                        Intent myIntent;

                        if(chkBlackScreen.isChecked()) {
                            myIntent = new Intent(QuizEditor.this, BlackScreen.class);
                        }
                        else // Direkt das Quiz starten
                        {
                            myIntent = new Intent(QuizEditor.this, Quiz.class);
                        }


                        myIntent.putStringArrayListExtra("teams", teams);
                        myIntent.putExtra("moderation", chkModeration.isChecked());
                        myIntent.putExtra("passover", chkPassOver.isChecked());
                        myIntent.putExtra("filename", filename);


                        QuizEditor.this.startActivity(myIntent);
                    }
                }

            });

        }

    });

    dialog2.show();
    // dialog2.getWindow().setLayout(LayoutParams.WRAP_CONTENT, 300);

I am sorry for the German words. In the image you can see the problem.
Unfortunately I was not allowed to upload the screenshots I made…

How to&Answers:

The question was already solved in the comments, but I will add an answer for completeness and to show that it worked for me, too.

For an AlertDialog with a custom view, don’t use the .setMessage line. Removing the following line in my project caused the buttons to stop getting clipped.

.setMessage("This is my message")

Answer:

Set EditText lines to 1. Also set outer LinearLayout’s to fill_parent.

Answer:

Just make all the EditText property android:singleLine="true" and then try to test.