5

AlertDialog ve özel içerik/görünüm ile bir sorunla karşı karşıyayım. Softkeyboard açıldığında AlertDialog'un kendini yeniden boyutlandırmayacağını söyleyin. Aşağıdaki ekran görüntüleri ı elde etmek istediğinizi benim sorundur ve en iyi ne gösterir: & davranışı istedi (solda)Özel görünüme sahip AlertDialog "yeniden boyutlandır" yapmadı

Güncel davranışı (sağ)

Current behaviorwanted behavior

Ben bir başka konuları var biliyorum SO üzerinde benzer bir sorun. Ne yazık ki verilen çözümlerin hiçbiri benim için işe yaramadı. Benim örnek kod aşağıda verilmiştir:

XML

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

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

     <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 
     </EditText> 
    </LinearLayout> 

</ScrollView> 

Java - CustomAlertDialog.class

public class CustomAlertDialog extends AlertDialog{ 

    private Context context; 

    public CustomAlertDialog(Context context) { 
     super(context); 
     this.context = context; 
    } 

    public void buildDialog(){ 
     LayoutInflater inflater = getLayoutInflater(); 
     View layout = inflater.inflate(R.layout.dialog_content, null); 
     builder = new AlertDialog.Builder(context); 
     builder.setTitle("EditText"); 
     builder.setView(layout); 
     builder.setPositiveButton("Ok", new OnClickListener() { 

      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       dismiss(); 
      } 
     }); 
     builder.create(); 
    } 

    public void showDialog(){ 
     builder.show(); 
    } 
} 

yukarıda benim Main.java sınıfında düğmesine basın üzerinde denir sınıf/fonksiyon

btnAlertDialog.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      CustomAlertDialog dialog = new CustomAlertDialog(Main.this); 
      dialog.buildDialog(); 
      dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
      dialog.showDialog(); 
     } 
    }); 

Aşağıdakileri denedim:

Bu

android:scrollbars="vertical" 
android:scrollbarAlwaysDrawVerticalTrack="true" 

Sonucu gibi LinearLayout için

ekleme kaydırma çubukları:

dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 

Sonuç: hiçbir şey değişmedi

bir uyarlama çalışması uygulanıyor hiçbir şey iletişim için bir bayrak ayarlama

değişti AlertDialog stili:

<style name="AlertDialog" parent="@android:style/Theme.Holo.Light"> 
     <item name="android:windowFullscreen">false</item> 
</style> 

Java

builder = new AlertDialog.Builder(context, R.style.AlertDialog); 

Bu çalıştı. Ne yazık ki sen Günlerdir bu konuda mücadele ettik beri herhangi bir yardım takdir aşağıdaki ekran görüntüsünde

Custom style - new problem

görebileceğiniz bazı sorunlar üretti. Teşekkürler!

ben artık CustomAlertDialog.class İletişim Kutusu'na oluşturmak için aşağıdaki yöntemi kullanıyorum

Çözüm. Daha önce neden çalışmadığı hakkında daha fazla bilgi için nandeesh cevabının altındaki yorumuma bakın. Görünüm vb özel bir kullanırsanız

public void startDialog(){ 
     LayoutInflater inflater = getLayoutInflater(); 
     View layout = inflater.inflate(R.layout.dialog_content, null); 
     builder = new AlertDialog.Builder(context); 
     builder.setTitle("EditText"); 
     builder.setView(layout); 
     builder.setPositiveButton("Ok", new OnClickListener() { 

      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       dismiss(); 
      } 
     }); 
     AlertDialog aDialog = builder.create(); 
     aDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
     aDialog.show(); 
    } 
+0

kullanım düzeni ağırlıkları yayınlarsanız nerede emin değilim . Ebeveyn – Doomsknight

+0

match_parent ile eşleşmez, genişlik için mükemmeldir. Ayrıca, tek bir LinearLayout ağırlığı vermek mümkün değildir. – reVerse

+0

da temel olarak düğmeler, iletişim kutusuna özel görünümü kullandığınız için gösterilmiyor. ve belirli bir tema verdikten sonra düğme gösterdi. İletişim kutusuna özel bir görünüm oluşturmuş olsaydım özel düğmeler kullanırdım. – k0sh

cevap

6

Sana setSoftInputmode yaptım ama bu işe yaramazsa yerine

builder.show(); 

kullanım

AlertDialog mDialog = builder.create(); 
mDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
mDialog.show(); 

arasında, daha sonra CustomAlertDialog sınıfı

+0

Awesome'a ​​sığacak kadar fazla satır varsa, sorunsuz çalışıyor, şimdi çalışıyor. Sorumu, 'CustomAlertDialog.class' tam kodumla düzenledim. Sorun, herhangi bir AlertDialog'u kesinlikle oluşturmadığım gibi görünüyor. Bu yüzden, Main.class'ımdaki bayrağı ayarladığımda, görüntülenen Dialog'um 'Main.class' - ama kurucumun iletişimcisi olmadığından hiçbir etkisi olmadı. Şimdi bayrağı CustomAlertDialog sınıfında ayarlıyorum ve açıkça bir AlertDialog oluşturuyor ve çalışıyor. Tekrar teşekkürler, beni çözüme yönlendirdin. – reVerse

0

Açıkçası bu Sorun Diyalog nasıl inşa edildiğini ile ilgisi yoktur, sorun windowSoftInputMode olduğunu.

Pencere için değiştirmeye ek olarak, Etkinlik için AndroidManifest.xml içinde windowSoftInputMode'un değiştirilmesi hile yapmalıdır.

İletişim kutusundaki görünümünüzün bir ScrollView olduğundan emin olun.

+0

'android: windowSoftInputMode = "adjustResize" yi uygulamak, benim faaliyetim için hile yapmaz, bunu daha önce denedim ve referans kılavuzuna göre bu sadece ana pencereyi etkileyecektir. Ayrıca: xml kodumda gördüğünüz gibi, bir scrollview var ve eğer> tüm reVerse

İlgili konular