2011-07-03 15 views
31

Sto cercando di inserire un testo mooolto in un AlertDialog. L'unico problema è la dimensione del font di default che è davvero troppo grande, quindi voglio renderlo più piccolo.Modifica della dimensione del carattere in una AlertDialog

Qui ci sono tutti i workaround che ho provato e i loro problemi.

Soluzione alternativa 1) Utilizzo di TextView e myView.setTextSize (12);

final TextView myView = new TextView(getApplicationContext()); 
myView.setText(myLongText); 
myView.setTextSize(12); 
final AlertDialog d = new AlertDialog.Builder(context) 
    .setPositiveButton(android.R.string.ok, null) 
.setTitle(myTitle) 
.setView(myView) 
.create(); 

Problemi: layout non è lo scorrimento

Soluzione 2) fare TextView scorrevole.

message.setMovementMethod(LinkMovementMethod.getInstance()); 

Problemi: Layout scorre, Bute non c'è "l'inerzia" (non so come chiamare quello .. Ma credo che si capisce.)

Soluzione 3) Utilizzando una ScrollView.

Questo è quello che ho intenzione di provare, ma non riesco a credere che ci sono soluzioni non facili ...

risposta

85

Si può effettivamente ottenere l'accesso alla TextView del messaggio abbastanza facilmente, e quindi modificare la sua dimensione. Ho provato con una taglia più grande, ma potevi usare qualsiasi dimensione volessi. Il testo scorrerà bene come già fa. id della vista è android.R.id.message:

AlertDialog dialog = new AlertDialog.Builder(this).setMessage("Hello world").show(); 
    TextView textView = (TextView) dialog.findViewById(android.R.id.message); 
    textView.setTextSize(40); 

Questa è probabilmente una soluzione più pulita, anche se non sono sicuro se c'è il rischio che il TextView potrebbe essere nullo o no.

+0

grazie per la risposta. –

+1

beh, l'oggetto textView di testo sembra essere nullo – gaara87

+2

È necessario chiamare setMessage() durante la creazione della finestra di dialogo, altrimenti non ci sarebbe alcun testo textview in primo luogo. –

3

Ecco la mia soluzione ... è necessario creare il contenitore di scorrimento, quindi aggiungere il TextView all'interno del ScrollView proprio come si farebbe nel layout XML.

AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
String str = getString(R.string.upgrade_notes); 
final ScrollView s_view = new ScrollView(getApplicationContext()); 
final TextView t_view = new TextView(getApplicationContext()); 
t_view.setText(str); 
t_view.setTextSize(14);  
s_view.addView(t_view); 
alertDialog.setTitle("Upgrade notes!"); 
alertDialog.setView(s_view); 
+0

Anche stanco! Grazie mille. –

24

Sto usando il seguente codice per modificare il testo del titolo e il messaggio per AlertDialog ...

final int alertTitle = ctx.getResources().getIdentifier("alertTitle", "id", "android"); 
setTitleFont((TextView) dlg.findViewById(alertTitle)); 
setBodyFont((TextView) dlg.findViewById(android.R.id.message)); 

... fare in modo che io assegno di null nei miei setTitleFont e setBodyFont metodi.

+0

Questo ha funzionato per ottenere il titolo Visualizza (grazie!), ma una volta ottenuto ho potuto solo impostare due tipi di carattere: il font standard e un font minuscolo (con 11.0 per il valore). –

+0

Questo ha funzionato per me per impostare un carattere dalla cartella delle risorse sul titolo della casella di avviso. Bene! – jmacedo

+1

Grazie mille! Usando questo sono stato in grado di modificare la dimensione del font del titolo come segue: int alertTitle = context.getResources(). GetIdentifier ("alertTitle", "id", "android"); Visualizza titolo = dialog.findViewById (alertTitle); if (title! = Null && title instanceof TextView) { ((TextView) title) .setTextSize (14); } –

4

per i pulsanti:

final AlertDialog ad = new AlertDialog.Builder(mainScreen) 
.setPositiveButton("OK", null) 
.setNegativeButton("Cancel", null).create(); 

ad.setOnShowListener(new DialogInterface.OnShowListener() { 
              @Override 
              public void onShow(DialogInterface dialog) { 
               int textSize = (int) Helper.getDimen(mainScreen, R.dimen.textSize12); 
               ad.getButton(Dialog.BUTTON_POSITIVE).setTextSize(textSize); 
               ad.getButton(Dialog.BUTTON_NEGATIVE).setTextSize(textSize); 
              } 


             }); 

ad.show(); 
+0

Non sei sicuro del motivo per cui non si ottengono voti positivi. Potrebbe non essere una risposta alla domanda diretta dell'OP ma non appena rendi il messaggio più grande/più piccolo, potresti voler rendere il testo più grande/più piccolo Questo sembra un modo carino, naturale (ok, almeno javascript-y) per eseguire l'operazione se deve essere eseguita comunque in fase di esecuzione Ho combinato questo con la buona risposta accettata (http: // StackOverflow .com/a/6563075/165164) e metti quelle due linee all'interno dell'ascoltatore.Inoltre, non ha dato fastidio con la chiamata getDimen, imposta solo una dimensione Non dimenticare di dichiarare l'annuncio finale! –