5

AlertDialogとカスタムコンテンツ/ビューに問題があります。 AlertDialogはソフトキーボードを開いたときにサイズ変更されません。次のスクリーンショットは、私が達成したいものを私の問題であり、どのような最高のショー:&は行動を望んでいた(左)カスタムビューのAlertDialogが「サイズ変更」されません

現在の行動を(右)

Current behaviorwanted behavior

私はといくつかの他のスレッドが知っていますSO上で同様の問題。残念ながら、提供されたソリューションのどれも私のために働いていませんでした。私のサンプルコードを次に示します。

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

上記の私のMain.javaクラスで、ボタンを押すで呼び出されるクラス/機能

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

私は以下のことを試しました:

この

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

結果と同様のLinearLayoutに

追加スクロールバー:

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

結果:何も変更

特注を適用すると何がダイアログのためのフラグを設定

を変更しましたAlertDialogへのスタイル:

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

これが働いていました。残念ながら、それはあなたが、私は日のために、この問題で苦労してきたので、私は任意の助けに感謝次のスクリーンショット

Custom style - new problem

で見ることができますいくつかの問題を作り出しました。ありがとう!

ソリューション

私は今、私のCustomAlertDialog.classでダイアログを作成するには、以下の方法を使用しています。それが以前にはうまくいかなかった理由の詳細については、nandeeshの答えの下の私のコメントを参照してください。

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

使用レイアウトの重みを投稿行う場所を確認していません。マッチしない親 – Doomsknight

+0

match_parentは幅に対して完全に問題ありません。さらに、1つのLinearLayoutにウェイトを与えることはできません。 – reVerse

+0

基本的にボタンは表示されません。これは、ダイアログボックスのカスタム表示を使用しているためです。そしてあなたがそれを与えた後、ボタンが示した特定のテーマ。ダイアログにカスタムビューを作成した場合は、カスタムボタンも使用します。 – k0sh

答えて

6

私はあなたがsetSoftInputmode をしましたが、これは動作しない場合は、代わり

builder.show(); 

使用

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

の、そしてCustomAlertDialogクラスに

+0

これはうまくいきます。私は 'CustomAlertDialog.class'の完全なコードで私の質問を編集しました。問題は、AlertDialogを明示的に作成したことがなかったようです。ですから、Main.classにフラグを設定すると、表示されたDialogが私の 'Main.class'のダイアログではなく、ビルダーだったので効果がありませんでした。 これで、CustomAlertDialogクラスにフラグを設定し、AlertDialogを明示的に作成して動作させました。おかげさまで、あなたは私を解決策に導いてくれました。 – reVerse

0

明らかに、この問題は、ダイアログが構築される方法とは何の関係もありませんあなたはカスタムビューなどを使用する場合、問題がwindowSoftInputModeです。

アクティビティのAndroidManifest.xml内のwindowSoftInputModeを変更するだけでなく、それをウィンドウ用に変更すると、そのトリックが実行されます。

ダイアログ内のビューがScrollViewであることを確認してください。

+0

'android:windowSoftInputMode =" adjustResize "'を自分のアクティビティに適用してもトリックはありません。これも前に試しましたが、リファレンスマニュアルによれば、これはメインウィンドウにのみ影響します。さらに:私のXMLコードで見ることができるように、スクロールビューがあります。>全体<画面に収まる行数よりも多くの行がある場合は問題なく動作します。 – reVerse

関連する問題