Как обернуть содержимое, подобное изображению, кнопке, внутри макетов Android?

#android #wpf #android-layout

#Android #wpf #android-layout

Вопрос:

Я хочу разместить список кнопок в макете и хочу, чтобы они выполнялись автоматически. Взгляните на эту картинку, вот как WrapPanel переносит свое содержимое в WPF. Есть ли способ сделать это в Android?

Это то, что WrapPanel делает в WPF
(источник: 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, поэтому мне нужна такая функциональность.