2012-12-22 70 views
9

我有一個提醒對話框,當有人觸摸某個特定的按鈕時就會啓動該對話框。警報對話框包含一個由佈局xml文件定義的視圖。此佈局包含多個控件,如複選框,編輯文本字段......這些控件都位於scrool視圖內,因此如果整個內容不適合屏幕,您可以滾動瀏覽內容。提醒對話框的按鈕被切斷

現在的問題是,當我啓動此警報對話框時,底部的按鈕被切斷屏幕。儘管scrool條正在工作,並且我可以滾動瀏覽警報對話框的內容,但警報對話框的按鈕有時並不完全可見。

這意味着: 有時,一切都很好,我可以看到警報對話框的按鈕,有時出於奇怪的原因,按鈕被切斷。我認爲這是一個問題,認爲對於警報對話框來說更重要,並將按鈕按下更多。例如,該視圖包含一個編輯文本控件。如果我輸入我的名字,一切都很好。但是,如果我在該編輯文本中添加一行,按鈕就會被切斷一點點。 我錯了什麼?我認爲滾動視圖將處理我的視圖的超大尺寸,以便警報對話適合屏幕。 我的應用程序始終處於肖像模式。

視圖的代碼:

<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> 

這就是我如何啓動提醒對話框:

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); 

我的德語單詞遺憾。在圖像中你可以看到問題。 不幸的是我沒有被允許上傳我製作的屏幕截圖...

+2

好的,謝謝你的幫忙!幸運的是,我發現了這個錯誤: alert.setMessage(「」); 由於我已經刪除了這一行,所有工作正常。 – Chris623

+0

在這裏相同,thx爲這個解決方案。 Komischer fehler und schwer zu finden dankedafür=) –

回答

0

將EditText行設置爲1.還要將外部LinearLayout設置爲fill_parent。

0

只是使所有的EditText財產android:singleLine="true",然後嘗試測試。

0

這個問題已經在評論中解決了,但是我會爲完整性添加一個答案,並且表明它也適用於我。

對於具有自定義視圖的AlertDialog,請勿使用.setMessage一行。在我的項目中刪除以下行導致按鈕停止剪輯。

.setMessage("This is my message")