2011-02-07 12 views
11

Sembra che il testo nell'immagine sotto sia troppo ampio. Suppongo di aver abusato dell'SDK in qualche modo e fino a quando non sono convinto diversamente, non sto cercando un modo per specificare un certo numero di margini/pixel di riempimento sui lati dello EditText.Android EditText in AlertDialog sembra troppo largo

enter image description here

Questo sembra più appropriato.

enter image description here

Ecco il mio codice (che crea il primo, finestra di dialogo 'Crea tag',):

final Dao<Tag, Integer> tagDao = getHelper().getTagDao(); 

final EditText input = new EditText(this); 
input.setSingleLine(true); 
input.setHint(R.string.create_tag_dialog_hint); 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setView(input); 
builder.setTitle(getString(R.string.create_tag_dialog_title)); 
builder.setPositiveButton(
    getString(R.string.create_tag_dialog_positive), 
    new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      String value = input.getText().toString().trim(); 
      Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show(); 
      Tag tag = new Tag(value); 
      try { 
        tagDao.create(tag); 
      } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
     } 
    }); 
builder.setNegativeButton(
    getString(R.string.create_tag_dialog_negative), null); 
builder.show(); 

Scusate per la lunghezza del post e grazie per eventuali commenti utili.

risposta

0

Provare a impostare un po 'di padding su EditText usando il metodo setPadding. Questo dovrebbe aggiungere uno spazio tra il bordo di EditText e il bordo della finestra di dialogo. N

+1

Il riempimento si applica alle cose all'interno della vista così 'EditText.setPadding()' crea spazio attorno al testo all'interno di 'EditText'. Ho provato '((Visualizza) input.getParent()). SetPadding (10, 10, 10, 10)' dopo 'builder.setView (input)', ma questo ha provocato un'eccezione di puntatore nullo. Indipendentemente da ciò, non voglio trovare un modo per personalizzarlo alle mie preferenze personali di 5px o simili, voglio consentire all'SDK di formattarlo correttamente. Presumo che sto usando l'SDK in modo errato e quindi la formattazione non sembra giusta. – altendky

13

si può fare in questo modo:

LinearLayout layout = new LinearLayout(this); 
layout.setOrientation(LinearLayout.VERTICAL); 
layout.setGravity(Gravity.CENTER_HORIZONTAL); 
final EditText input = new EditText(this); 
input.setSingleLine(true); 
layout.setPadding(10, 0, 10, 0); 
input.setHint("Hint"); 
layout.addView(input); 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setView(layout); 

Inoltre, setSingleLine è deprecato. Dovresti usare InputStyle.

+1

Grazie per l'heads up sulla deprecazione di SingleLine. Non lo menzionano ovunque nella documentazione. Tuttavia, non sembra che dovrei scegliere un numero di pixel per correggere questo. Presumo che il risultato attuale sia errato a causa del mio uso improprio di "AlertDialog.Builder" (o forse è completamente la tecnica sbagliata). – altendky

1

Impostare il margine di layout e il layout marginalmente su 5sp. Il margine imposta lo spazio intorno al gruppo di viste. Date un'occhiata a ViewGroup.MarginLayoutParams

+0

Non sono esattamente sicuro di come applicarlo ... ma nonostante il fatto che sp non sia px, sarei comunque io a impostare arbitrariamente una spaziatura piuttosto che lasciare che Android usi una spaziatura predefinita. Non voglio adattare il layout alle mie preferenze personali, voglio che Android lo faccia per la sua preferenza. – altendky

30

Ho appena ordinato questo io stesso. Utilizzando un'istanza di AlertDialog, è possibile specificare setView e passare i parametri di spaziatura. Questo funzionerà.

final EditText input = new EditText(this); 

AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
alertDialog.setTitle("Title"); 
alertDialog.setMessage("Message"); 
alertDialog.setView(input, 10, 0, 10, 0); // 10 spacing, left and right 
alertDialog.setButton("OK", new OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // Clicked 
    } 
}); 
alertDialog.show(); 

Modifica: Sono consapevole che questa domanda è obsoleta, ma non è stata fornita alcuna soluzione.

+13

Heads Up: 'alertDialog.setView (Visualizza, int, int, int, int);' non esiste nelle nuove versioni di Android. –

+0

@DavidPassmore avete qualche sostituto potenziale per questo metodo ?? – Rob

+1

@DavidPassmore no, esiste. Almeno se si sta usando l'appcompat v7 AlertDialog – mobilepotato7

Problemi correlati