#android #wpf #android-layout
#Android #wpf #android-layout
Вопрос:
Я хочу разместить список кнопок в макете и хочу, чтобы они выполнялись автоматически. Взгляните на эту картинку, вот как WrapPanel переносит свое содержимое в WPF. Есть ли способ сделать это в Android?
(источник: microsoft.com )
Ответ №1:
Вы используете linearlayout в Android, который позволяет размещать дочерние элементы в вертикальном или горизонтальном порядке. Вы помещаете кнопки внутри linearlayout.
Вы должны пройти это обучение на макетах Android. AbsoluteLayout в ссылке удален.
Мои знания о панели переноса основаны исключительно на ссылке, которую вы прикрепили, поскольку я не работал с WPF. Это из того, что я понял. В Android нет макета панели переноса, в котором дочерние представления переходят на следующую строку, когда места меньше. Ваши варианты
-
использовать scrollviews для прокрутки, если просмотры больше экрана.
-
Используйте свойство layout_weight для дочерних представлений в linearlayout. Это заставит представления
изменять свои размеры до изменяющихся размеров. -
Создайте пользовательский макет, расширив класс ViewGroup, в котором вы измеряете дочерние представления и определяете их положение на основе доступной ширины экрана.
Первые 2 варианта — это не совсем то, что вы хотите. Это альтернативные подходы к тому, что предоставляет Android. Но если вам нужна точная вещь, вам нужно сделать это самостоятельно.
Комментарии:
1. -1 LinearLayout не переносит содержимое. Он просто поместит их рядом друг с другом. Если в нем не хватает места, он ничего не сделает.
2. Прежде всего, вы обновляете свой ответ и ставите минус всем, кто не дает точного ответа. Если вы хотите, чтобы ваши макеты были видны, даже если они больше экрана, вы помещаете linearlayout в scrollview. Существуют ограничения для макетов Android, и все, что вы делаете в wpf, может быть невозможно. Я настоятельно рекомендую вам сначала протестировать все макеты и понять, как они все работают вместе.
3. blessenm прав. вы должны прочитать общие объекты макета Android ( developer.android.com/guide/topics/ui/layout-objects.html ).. и понять, как они работают вместе .. 🙂
4. У меня уже есть, я не мог этого сделать, вот почему я разместил здесь.
5. LinearLayout в Android эквивалентен StackPanel в Windows XAML. И, согласно приведенному ниже ответу @Master of None, эта ReletivePanel будет работать вместо LinearLayout, а RelativePanel, без сомнения, намного быстрее по производительности, чем другие макеты, но все же, как можно поместить данные в код во время выполнения, а данные составляют почти более 100 элементов (фото), так что тогда это может быть очень сложно обработать.
Ответ №2:
Это выглядит как LinearLayout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button android:text="Button" android:id="@ id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Button" android:id="@ id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Button" android:id="@ id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
Для получения дополнительной информации об использовании XML-макетов в Android см. Это Хорошее введение в Android Developer site:http://developer.android.com/resources/tutorials/views/index.html
Комментарии:
1. -1 LinearLayout не переносит содержимое. Он просто поместит их рядом друг с другом. Если в нем не хватает места, он ничего не сделает.
2. Спасибо за обновление вашего изображения. Приведенный выше код создаст то, что вы сказали сначала. Но на мобильном устройстве у вас нет обычного на настольных компьютерах случая изменения размеров окон. Таким образом, нет необходимости в гибком макете. Лучшим пользовательским интерфейсом было бы использование линейного макета, в котором всем кнопкам уделяется одинаковое внимание.
3. Я только что обновил изображение, а не мой вопрос. Вопрос такой же, как и был.
Ответ №3:
я думаю, вам нужно использовать RelativeLayout, чтобы добиться этого легко.
вот код:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#c0c0c0"
>
<Button
android:text="Button"
android:id="@ id/button3"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<LinearLayout
android:id="@ id/linearlayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@ id/button3"
android:layout_alignParentLeft="true"
android:orientation="horizontal"
android:layout_marginRight="21dp"
>
<Button
android:text="Button"
android:layout_width="wrap_content"
android:layout_weight="2"
android:id="@ id/button1"
android:layout_height="wrap_content"
android:layout_gravity="left">
</Button>
<Button
android:text="Button"
android:layout_width="wrap_content"
android:id="@ id/button1"
android:layout_height="wrap_content"
android:layout_weight="2">
</Button>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@ id/linearlayout01"
android:layout_alignParentLeft="true"
android:weightSum="3"
>
<Button
android:text="Button"
android:layout_width="wrap_content"
android:id="@ id/button1"
android:layout_height="wrap_content"
android:layout_weight="1">
</Button>
</LinearLayout>
Надеюсь, это поможет! 😉
Комментарии:
1. Нет, вы его взламываете. Я хотел, чтобы оно выполнялось автоматически, мы также можем сделать это с помощью LinearLayout.
2. Без сомнения, RelativePanel намного быстрее по производительности, чем другие макеты, но как можно поместить данные в код во время выполнения, а данные составляют почти более 100 элементов (фото), поэтому с ними может быть очень сложно справиться. WrapePanel доступна в Windows XAML, поэтому мне нужна такая функциональность.