Пользовательский вид из нескольких видов
У меня есть набор представлений, которые я хочу всегда использовать вместе. Примером этого может быть что-то вроде:
<LinearLayout>
<TextView />
<EditView />
</LinearLayout>
Текстовое представление - это приглашение, и представление редактирования является ответом. Я хотел бы дать этой комбинации имя и использовать это имя, чтобы поместить его в xml. Я бы хотел, чтобы это было настраиваемое представление, поэтому я могу хорошо поместить его в класс и создать для него различные служебные функции. Есть ли способ сделать это? Я знаю, что могу подклассировать LinearLayout и динамически создавать дети в Java-коде, но это лишает меня возможности легко вносить изменения через xml. Есть ли лучший маршрут?
И да, у меня также есть места, которые я хочу сделать, которые более активны, чем просто подсказки.
Ответы
Ответ 1
Этот пример предназначен для горизонтального виджета для выбора числа, но это та же концепция.
Сначала создайте XML-макет для своего настраиваемого компонента
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_minus"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="-" />
<EditText
android:id="@+id/edit_text"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:inputType="number"
android:gravity="center"
android:focusable="false"
android:text="0" />
<Button
android:id="@+id/btn_plus"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="+" />
</LinearLayout>
Затем создайте класс java
public class HorizontalNumberPicker extends LinearLayout {
public HorizontalNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.horizontal_number_picker, this);
}
}
Добавьте любую логику в этот класс java, тогда вы можете просто добавить настраиваемый компонент в свой XML-макет, например:
<com.example.HorizontalNumberPicker
android:id ="@+id/horizontal_number_picker"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content" />
Посмотрите эту ссылку для получения дополнительной информации: http://developer.android.com/guide/topics/ui/custom-components.html#compound
Ответ 2
Используйте Составные элементы управления для этой цели. В нем много примеров и учебных пособий. Удачи)
Ответ 3
Поместите этот XML в XML файл макета и раздуйте представление с помощью надувного устройства, когда захотите.
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.some_id, parent, false);
Как только у вас появится представление, вы можете написать класс утилиты, который принимает это представление и выполняет операции над ним. Извлеките текст и отредактируйте представление с помощью findViewById()
или сохраните ссылки на эти другие виды, используя шаблон ViewHolder
Ответ 4
Вы должны использовать Java Layoutinflater
. Это достаточный способ решить вашу проблему. Это код:
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.some_id, parent, false);
Это создает layoutinflater
, а затем показывает его как rowView
. Также я задал вопрос здесь. Вы оставили комментарий, а я ответил другим. Я просмотрел ваш профиль, и вы, кажется, знаете много Android и Java. Возможно ли вам разобраться в моей проблеме?