Je comprends qu'il est plus facile de définir le remplissage sans modifier la taille du dessin sur ImageButton, mais je suis en train d'étendre Button pour ma vue personnalisée car j'ai besoin de remplacer la méthode OnTextChanged (puisque Button étend TextView).
J'ai également essayé de définir le rembourrage par programme, sans succès.
Une partie de mon xml ci-dessous :
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/backgroundColor">
<TableRow
android:layout_weight="1"
android:gravity="center">
<org.linphone.views.Digit
android:id="@+id/Digit1"
style="@style/DialerDigit"
android:background="@drawable/ws_numpad_1"
android:soundEffectsEnabled="true"
android:layout_weight="1"
android:text="1"/>
<org.linphone.views.Digit
android:id="@+id/Digit2"
style="@style/DialerDigit"
android:background="@drawable/ic_num2_group"
android:soundEffectsEnabled="true"
android:text="2"
android:layout_weight="1" />
<org.linphone.views.Digit
android:id="@+id/Digit3"
style="@style/DialerDigit"
android:background="@drawable/ic_num3_group"
android:soundEffectsEnabled="true"
android:text="3"
android:layout_weight="1" />
</TableRow>
Actuellement, les boutons s'étendent pour correspondre au parent, mais les éléments à dessiner s'étendent également. Mon objectif est d'obtenir un pavé numérique similaire à celui de la version native d'Android (c'est-à-dire qu'il n'y a pas d'espace entre les chiffres et que les chiffres du pavé numérique ne se déforment pas en fonction de la taille de l'écran).
Edit 1 (image du clavier ajoutée) :
Edition 2 (implémentation de l'écoute du clavier) :
@Override
protected void onTextChanged(CharSequence text, int start, int before, int after) {
super.onTextChanged(text, start, before, after);
if (text == null || text.length() < 1) {
return;
}
DialKeyListener lListener = new DialKeyListener();
setOnClickListener(lListener);
setOnTouchListener(lListener);
// Assign button long clicks here
if ("0".equals(text.toString())) { // This was 0+, but they were separated, hence
// changed to 0 only
setOnLongClickListener(lListener);
}
if ("1".equals(text.toString())) {
setOnLongClickListener(lListener);
}
}
private class DialKeyListener implements OnClickListener, OnTouchListener, OnLongClickListener {
final char mKeyCode;
boolean mIsDtmfStarted;
DialKeyListener() {
mKeyCode = Digit.this.getText().subSequence(0, 1).charAt(0);
}
private boolean linphoneServiceReady() {
if (!LinphoneContext.isReady()) {
Log.e("[Numpad] Service is not ready while pressing digit");
return false;
}
return true;
}
...
}