Я разрабатываю приложение, в котором пользователь может редактировать данные в ListView
. Я хочу иметь EditText
внутри этого ListView, этот edittext должен вести себя как TextView, но когда пользователь нажимает на него, он должен выглядеть как EditText
, Как я могу достичь этой функции?
На самом деле EditText внутри ListView выглядит уродливым, и я хочу, чтобы EditText выглядел как текстовый файл, но когда пользователь пытается отредактировать данные, он должен выглядеть как EditText.
Я надеюсь, что мой вопрос ясен, если не спросите.
Ниже файлы, которые я использовал в своем приложении.
main.xml в папке макета
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<EditText android:layout_width="fill_parent"
android:padding="5dip"
android:layout_height="wrap_content"
android:textColor="#00f"
android:textSize="20dip"
android:background="@drawable/bg" />
<EditText android:layout_width="fill_parent"
android:padding="5dip"
android:layout_height="wrap_content"
android:textColor="#00f"
android:textSize="20dip"
android:background="@drawable/bg" />
</LinearLayout>
myshape.xml в папке с возможностью переноса
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#fff"/>
<corners android:radius="2dip" />
<stroke android:width="2dip"
android:color="#ff4500" />
</shape>
bg.xml в папке с возможностью переноса
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true"
android:state_focused="true"
android:drawable="@drawable/myshape"/>
</selector>
Файл Java
public class EditTextSelector extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
android:cursorVisible="false"
android:background="@android:color/transparent"
Используйте setCursorVisible (false), чтобы скрыть курсор и щелкнуть edittext setCursorVisible (true). это, также установите цвет фона в белый цвет edittext
ну, я бы рекомендовал использовать textview.. и при нажатии на него он будет меняться на editText (добавить View/removeView) в parent.. и при изменении фокуса он вернется обратно в textview с новыми изменениями. Второе решение для использования всплывающих окон диалог для редактирования с помощью кнопки "Готово" для отправки и возврата, чтобы вернуться к списку. третье решение изменить стиль editText с помощью:
editText.setBackgroundResource(R.layout.writemode);
//later after this item loses focus, use:
editText.setBackgroundResource(R.layout.readmode);
Используйте селектор для EditText для создания разных состояний. Если он находится в режиме ожидания, он дает нормальный цвет в качестве фона, и если он сфокусирован, используйте 9 патчей PNG, которые могут быть похожи на реальный фон EditText.
Надеюсь, это может вам помочь. Если вы не знаете, как использовать селектор, не стесняйтесь спрашивать меня.
Примеры скриншотов
Я использую 1 TextVuew и 2 вида EditText в своем приложении, проверяйте снимки экрана, чтобы узнать, как выглядит EditText в соответствии с вашими требованиями. Если вам нравятся, и на самом деле это необходимо, я отправляю код здесь.
Начальный экран
Принимая ввод для 1-го EditText
Принимая вход для второго EditText
Вы можете запросить пользователя для ввода с помощью AlertDialog.