Odio rispondere alla mia domanda, ma in questo caso penso di doverlo fare. Dopo averlo verificato, @Falmarri era sulla buona strada con la sua risposta. Il problema è che il controllo CheckBox di Android utilizza già la proprietà android: paddingLeft per ottenere il testo dove si trova.
La linea rossa mostra il valore di offset paddingLeft dell'intero CheckBox
Se ho appena sovrascritto quell'imbottitura nel mio layout XML, il layout è rovinato. Ecco cosa fa l'impostazione paddingLeft = "0":
Si scopre che non è possibile risolvere questo problema in XML. Lo hai fatto nel codice. Ecco il mio frammento con un aumento dell'imbottitura hardcoded di 10dp.
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
Questo ti dà quanto segue, dove la linea verde è l'aumento dell'imbottitura. Questo è più sicuro dell'hardcoding di un valore, poiché diversi dispositivi potrebbero usare disegnabili diversi per la casella di controllo.
AGGIORNAMENTO - Come le persone hanno recentemente menzionato nelle risposte di seguito, questo comportamento è apparentemente cambiato in Jelly Bean (4.2). La tua app dovrà verificare su quale versione è in esecuzione e utilizzare il metodo appropriato.
Per 4.3+ sta semplicemente impostando padding_left. Vedi la risposta di htafoya per i dettagli.
TextView
condrawableLeft
e usaredrawablePadding
per dare spazio al testo. Nel codice basta attivare o disattivare gli stati selezionati.