Возможно ли это изменить TextView и EditText. Подобно отображению текста при необходимости, но разрешите редактирование, когда это необходимо. Есть ли способ (как в NON-XML) для редактирования TextView или без редактирования EditText?Переключение между TextView и EditText
ответ
Возможно ли это обменять TextView и EditText.
Поместите оба в ваш макет в том же месте. Сделайте невидимым. Переключайте видимость по мере необходимости. Или, как дети ViewSwitcher
, или ViewFlipper
, а также использовать их для переключения между ними.
Есть ли способ (как в NON-XML) для редактирования TextView или без редактирования EditText?
Нет, AFAIK.
Какая разница между ViewSwitcher и ViewFlipper? –
@Mohit Deshpande: «ViewSwitcher может иметь только два дочерних представления, из которых только один отображается одновременно». (http://developer.android.com/reference/android/widget/ViewSwitcher.html) 'ViewFlipper' поддерживает более двух и имеет дополнительные функции, такие как анимированные переходы между ними. Я использовал «ViewFlipper». – CommonsWare
Я создал библиотеку (fork предыдущей библиотеки EditText, которая поддерживает проверку ввода), которая использует ViewFlipper в комплекте с анимацией для достижения этой цели. Не стесняйтесь попробовать или внести свой вклад: https://github.com/RoundSparrow/android-edittext-validator –
Да, на самом деле, согласно EditText
коду:
EditText представляет собой тонкий шпон над TextView, который настраивает себя как редактирования.
И это очень тонкий! Вы могли бы в принципе сказать, что TextView
- это EditText
, который настроен так, что он не редактируется. Код для EditText
настолько короток, что я поставил его в нижней части этого вопроса для справки.
Единственная реальная разница в стилях, которые устанавливаются в XML:
<style name="Widget.EditText">
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
<item name="android:clickable">true</item>
<item name="android:background">?android:attr/editTextBackground</item>
<item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
<item name="android:textColor">?android:attr/editTextColor</item>
<item name="android:gravity">center_vertical</item>
</style>
Вы можете сбросить те, к TextView
значений в Java, используя что-то вроде этого:
mEditView.setFocusable(false);
mEditView.setFocusableInTouchMode(false);
mEditView.setClickable(false);
mEditView.setBackground(null); // Or setBackgroundDrawable() on early APIs.
mEditView.setTextAppearance(mEditView.getContext(), android.R.attr.textAppearanceSmall);
mEditView.setTextColor(Color.BLACK); // I'm not sure how to get the default here.
mEditView.setGravity(Gravity.TOP | Gravity.START);
Вы, вероятно, не захотят менять все те, например, возможно, оставить гравитацию и цвет текста/внешний вид, так что вещи не внезапно меняются странно.
EditText
код
public class EditText extends TextView {
public EditText(Context context) {
this(context, null);
}
public EditText(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.editTextStyle);
}
public EditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected boolean getDefaultEditable() {
return true;
}
@Override
protected MovementMethod getDefaultMovementMethod() {
return ArrowKeyMovementMethod.getInstance();
}
@Override
public Editable getText() {
return (Editable) super.getText();
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text, BufferType.EDITABLE);
}
/**
* Convenience for {@link Selection#setSelection(Spannable, int, int)}.
*/
public void setSelection(int start, int stop) {
Selection.setSelection(getText(), start, stop);
}
/**
* Convenience for {@link Selection#setSelection(Spannable, int)}.
*/
public void setSelection(int index) {
Selection.setSelection(getText(), index);
}
/**
* Convenience for {@link Selection#selectAll}.
*/
public void selectAll() {
Selection.selectAll(getText());
}
/**
* Convenience for {@link Selection#extendSelection}.
*/
public void extendSelection(int index) {
Selection.extendSelection(getText(), index);
}
@Override
public void setEllipsize(TextUtils.TruncateAt ellipsis) {
if (ellipsis == TextUtils.TruncateAt.MARQUEE) {
throw new IllegalArgumentException("EditText cannot use the ellipsize mode "
+ "TextUtils.TruncateAt.MARQUEE");
}
super.setEllipsize(ellipsis);
}
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
event.setClassName(EditText.class.getName());
}
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(EditText.class.getName());
}
}
PS: Получаю ли я бонусные баллы за знание (очень немного) больше, чем CommonsWare? :-) – Timmmm
«И это очень тонко!» - на складе Android, да.'EditText' - это, пожалуй, самый взломанный виджет # 1 от производителей устройств (например, реализация собственной логики с длинным кликом для неконтекстного контекстного меню). Хотя ваша техника, вероятно, будет работать на многих устройствах, я бы не стал ею доверять, особенно потому, что альтернативу (см. Принятый ответ) не особенно сложно использовать. – CommonsWare
- 1. отношения между EditText и TextView
- 2. Общий переход между TextView и EditText
- 3. Переполнение TextView и EditText
- 4. Android переключение между TextView, в выпадающем меню, и EditText на кнопку мыши
- 5. Переключение RadioButton между макетами
- 6. Сравнить TextView и EditText Значения
- 7. RelativeLayout align Textview и Edittext
- 8. Выровнять TextView над EditText
- 9. EditText - пробел между текстом и строкой EditText
- 10. EditText и TextView и т. Д.
- 11. Set Textview + Edittext + Button
- 12. переключения TextView к EditText
- 13. Put TextView внутри EditText
- 14. изменение EditText к TextView
- 15. Android EditText vs TextView
- 16. Выравнивать TextView, Button, EditText
- 17. EditText непосредственно в TextView
- 18. EditText С TextView Подскажите
- 19. Кастинг EditText как TextView
- 20. EditText внутри TextVIEW?
- 21. Перетаскивание TextView в EditText
- 22. Android Textview EditText Bugs
- 23. TextView внутри EditText align
- 24. TextView and EditText android
- 25. Изменение текста TextView/editText
- 26. Использовать EditText для TextView
- 27. изменение editText на textView error
- 28. Переключение между фрагментами и списками, вызывающими ошибки
- 29. Listview с TextView и EditText на строку
- 30. Совместите начало текста в EditText и TextVIew
Здесь 4 года спустя, но я не нашел библиотеку или много кода для этого - так что я создал один. Это вилка предыдущей библиотеки EditText, которая поддерживает проверку ввода. Новая вилка использует ViewFlipper в комплекте с анимацией для достижения этой цели. Не стесняйтесь попробовать или внести свой вклад: github.com/RoundSparrow/android-edittext-validator –