Мне нужно создать сложную кнопку переключения (rtl checkbox).Переключить линейную компоновку
Я знаю, что LinearLayout может быть интерактивными, и я увидел следующее example
Могу ли я сделать это только через XML?
Мне нужно создать сложную кнопку переключения (rtl checkbox).Переключить линейную компоновку
Я знаю, что LinearLayout может быть интерактивными, и я увидел следующее example
Могу ли я сделать это только через XML?
LinearLayout можно кликать, но не подлежит проверке.
Чтобы получить RTL вида тумблера я сделал следующее:
Я создал девять-путь изображения нажаты, проверяется и состояние по умолчанию.
Создано селектор:
<item android:drawable="@drawable/button1_on" android:state_pressed="true"/>
<item android:drawable="@drawable/button1_selected" android:state_checked="true"/>
<item android:drawable="@drawable/button1_off"/>
3.Created класс, который расширяет Button и Implements Checkable:
public class MyCheckbox extends Button implements Checkable {
private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
private boolean mIsChecked = false;
public MyCheckbox(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyCheckbox(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyCheckbox(Context context) {
super(context);
}
@Override
public boolean isChecked() {
return mIsChecked;
}
@Override
public void setChecked(boolean isChecked) {
mIsChecked = isChecked;
}
@Override
public void toggle() {
setChecked(!mIsChecked);
}
@Override
public boolean performClick() {
toggle();
return super.performClick();
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
}
Таким же образом я t может быть реализована на интерактивном LinearLayout
Флажки и другие представления должны быть напрямую заменены при использовании локальных rtl. Если вы хотите, чтобы вы соответствовали языкам RTL, используйте новые параметры «start» & «end», включенные в JellyBean (marginStart & marginEnd вместо marginLeft/Right & marginRight/Left). Хотя, если вам нужно это поведение для предыдущих версий, вам могут потребоваться другие трюки. Обратите внимание, что TextView уже переместится полностью на другую сторону поля: убедитесь, что в этом случае вы не используете много WRAP_CONTENT, это может привести к несоосности.
Мне нужно поддерживать более низкие версии, а фон содержит изображение (девять патчей) с правой стороны, а текст должен быть слева. – NickF
В моем подходе будет использоваться TextView и программно программируется в отношении языка. textView.setCompoundDrawables (rtlLanguage? null: drawable, null, rtlLanguage? drawable: null, null); –