Sono di fronte a un problema con AlertDialog e contenuto/vista personalizzati. Semplicemente detto che AlertDialog non si ridimensiona automaticamente quando viene aperta la softkeyboard. I seguenti screenshot mostrano meglio ciò che il mio problema è e ciò che voglio raggiungere:AlertDialog con visualizzazione personalizzata non "ridimensiona"
comportamento corrente (a sinistra) & voluto comportamento (a destra)
io vi conosco alcuni altri thread con problema simile su SO. Sfortunatamente nessuna delle soluzioni fornite ha funzionato per me. In seguito il mio codice di esempio:
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();
}
}
La classe/funzione di cui sopra viene chiamato su un premere il pulsante nella mia classe 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();
}
});
Ho provato le seguenti cose:
Aggiunta di barre di scorrimento al LinearLayout come questo
android:scrollbars="vertical"
android:scrollbarAlwaysDrawVerticalTrack="true"
Risultato: nulla è cambiato
Impostazione di una bandiera per la finestra di dialogo:
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Risultato: niente cambiato
L'applicazione di un CUSTOM- stile per 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);
Questo ha funzionato. Purtroppo ha prodotto alcuni problemi che si può vedere il nel seguente screenshot
Apprezzo tutto l'aiuto da quando sono stato alle prese con questo problema per giorni. Grazie!
Soluzione
Ora sto utilizzando il seguente metodo per creare la finestra nella mia CustomAlertDialog.class
. Vedere il mio commento sotto la risposta di nandeesh per ulteriori dettagli sul motivo per cui non ha funzionato prima.
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();
}
pesi di layout uso . non corrisponde al genitore – Doomsknight
match_parent è perfettamente adatto per la larghezza. Inoltre, non è possibile attribuire un peso a un singolo LinearLayout. – reVerse
bene in pratica i pulsanti non verranno visualizzati perché si sta utilizzando la visualizzazione personalizzata per la finestra di dialogo. e dopo aver dato il tema specifico il pulsante ha mostrato. userei anche i pulsanti personalizzati se avessi creato una visualizzazione personalizzata per la finestra di dialogo. – k0sh