Как тиражировать android: editable = "false" в коде? - PullRequest
42 голосов
/ 19 марта 2009

В макете вы можете сделать виджет EditText недоступным для редактирования с помощью android:editable attribute.

Как я могу сделать это в коде? Мне нужно сделать виджет EditText доступным для редактирования в зависимости от условий.

Ответы [ 14 ]

1 голос
/ 11 декабря 2011

Я также хотел бы указать на альтернативное решение, которое прекрасно работает, если вы создаете новые экземпляры EditView. Вы можете переопределить метод getDefaultEditable (), как предложено документами, для возврата false. Э.Г.

EditText view = new EditText(DiscountCalculator.this) {
    public boolean getDefaultEditable() {
        return false;
    }
};
0 голосов
/ 12 апреля 2017

попробуйте это:

 mEditText.setFilters(new InputFilter[]{new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            if (XXX) {
                return "";
            } else {
                return null;
            }
        }
    }});
0 голосов
/ 31 мая 2013

Единственное решение, которое я нашел для этого сценария, - это создать 2 макета. Один редактируемый, а другой нет. Возможно, вам придется создать более 2 макетов на основе различных условий. Сохраните условия в SharedPreferences или другими способами и загрузите соответствующий макет на основе условий после перезапуска Действия. Вот пример:

в onCreate () действия:

    configuration = new Configuration(this.getSharedPreferences(Configuration.SHARED_PREFERENCES_FILE_NAME, Context.MODE_PRIVATE));
    manualSettingsMode = configuration.isManualSettingsMode();
    if(manualSettingsMode){
        setContentView(R.layout.editableconfigurationsettings);
    }else {
        setContentView(R.layout.configurationsettings);
    }

Действие может быть перезапущено на основе проверки состояния и вызова функций следующим образом:

private void setManualEditing(){
    configuration.set_isManualSettingsMode(true);
    this.recreate();
}

private void setAutoEditing(){
    configuration.set_isManualSettingsMode(false);
    this.recreate();
}

Надеюсь, это поможет. Там действительно должно быть лучшее решение, но это то, что я делал. В идеале можно было бы делать это на отдельных полях и не нужно перезагружать упражнение / макеты. -bobby

0 голосов
/ 14 декабря 2010

Я думаю, правильный путь для достижения желаемого эффекта:

mEditView.setText("my text", BufferType.NORMAL);

Если вы хотите переключиться между редактируемым и нередактируемым, вы можете сделать следующее:

// Switch to non-editable
mEditView.setText(mEditView.getText(), BufferType.NORMAL);

// Switch back to editable
mEditView.setText(mEditView.getText(), BufferType.EDITABLE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...