Detesto responder à minha própria pergunta, mas neste caso acho que preciso. Depois de conferir, @Falmarri estava no caminho certo com sua resposta. O problema é que o controle CheckBox do Android já usa a propriedade android: paddingLeft para obter o texto onde está.
A linha vermelha mostra o valor de deslocamento paddingLeft de toda a CheckBox
Se eu simplesmente substituir esse preenchimento no meu layout XML, ele estragará o layout. Aqui está o que a configuração paddingLeft = "0" faz:
Acontece que você não pode corrigir isso em XML. Você faz isso no código. Aqui está o meu snippet com um aumento de 10dp no preenchimento codificado.
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
Isso fornece o seguinte, onde a linha verde é o aumento do preenchimento. Isso é mais seguro do que codificar um valor, uma vez que diferentes dispositivos podem usar diferentes drawables para a caixa de seleção.
ATUALIZAÇÃO - Como as pessoas mencionaram recentemente nas respostas abaixo, esse comportamento aparentemente mudou em Jelly Bean (4.2). Seu aplicativo precisará verificar em qual versão está sendo executado e usar o método apropriado.
Para 4.3+, é simplesmente definir padding_left. Veja a resposta da htafoya para obter detalhes.
TextView
withdrawableLeft
e usedrawablePadding
para dar espaço ao texto. No código, apenas alterne os estados selecionados e não selecionados.