Ich hasse es, meine eigene Frage zu beantworten, aber in diesem Fall denke ich, dass ich muss. Nach dem Auschecken war @Falmarri mit seiner Antwort auf dem richtigen Weg. Das Problem ist, dass das CheckBox-Steuerelement von Android bereits die Eigenschaft android: paddingLeft verwendet, um den Text dort abzurufen, wo er sich befindet.
Die rote Linie zeigt den paddingLeft-Offsetwert der gesamten CheckBox
Wenn ich diese Auffüllung in meinem XML-Layout nur überschreibe, wird das Layout durcheinander gebracht. Folgendes bewirkt die Einstellung paddingLeft = "0":
Es stellt sich heraus, dass Sie dies in XML nicht beheben können. Sie haben es im Code getan. Hier ist mein Snippet mit einer fest codierten Padding-Erhöhung von 10dp.
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
Dies gibt Ihnen Folgendes, wobei die grüne Linie die Zunahme der Polsterung ist. Dies ist sicherer als das Hardcodieren eines Werts, da unterschiedliche Geräte unterschiedliche Zeichen für das Kontrollkästchen verwenden können.
UPDATE - Wie die Leute kürzlich in den Antworten unten erwähnt haben, hat sich dieses Verhalten anscheinend in Jelly Bean (4.2) geändert. Ihre App muss überprüfen, auf welcher Version sie ausgeführt wird, und die entsprechende Methode verwenden.
Für 4.3+ wird einfach padding_left gesetzt. Siehe htafoyas Antwort für Details.
TextView
withdrawableLeft
und usedrawablePadding
, um dem Text Platz zu geben. Schalten Sie im Code nur ausgewählte und nicht ausgewählte Zustände um.