Я хочу сделать интерфейс для планшета, как показано на изображениях. Этот пользовательский интерфейс будет повторяться в соответствии с количеством элементов. И положение каждого блока (например, малого или большого блока) может изменяться динамически. Пожалуйста, дайте мне предложение, какой вид, макет, который я должен использовать. Любое предложение было бы оценено ... спасибо заранее.Создание пользовательского интерфейса динамически в android
ответ
ли «продукты» всегда будет соответствовать хорошо на линии, как вы нарисовали? Если тогда вы можете использовать LinearLayouts (Вертикальный и Горизонтальный), вложенные друг в друга.
Для создания таких пользовательских интерфейсов для планшетов вы должны использовать Fragments, а внутри фрагмента добавить/удалить соответствующие макеты. Если вы используете Relative Layouts, то необходимо использовать RelativeLayout.LayoutParams.
Если вы ищете лучший пример, который использует фрагменты, попробуйте Google IO app источник. Он использует различные функции динамического интерфейса.
Надеюсь, это поможет!
Привет, Как я сказал, я использую фрагмент и много пробовал использовать relativelayout, но это очень проблематично. проверьте обновленное изображение. – Vicky
Если вы ориентируетесь на API V14 или выше, вы можете использовать GridLayout: http://developer.android.com/reference/android/widget/GridLayout.html
Мое приложение minSdkVersion - 8. Любой другой вариант ...? – Vicky
Hey @evaristokbza Пожалуйста, проверьте обновленное изображение и дайте свои ценные советы. – Vicky
Я никогда не использовал его, но вы можете использовать GridLayout из поддержки libary v7: https://developer.android.com/reference/android/support/v7/widget/GridLayout.html (для этого вам нужно включить что поддержка библиотеки в вашем проекте, думаю, вы знаете, как это сделать). – evaristokbza
Использование LinearLayout где добавляемая каждую категорию и использование RelativeLayout для каждой категории является хорошим вариантом. Вы должны настроить метод onlayout относительной компоновки как функцию количества содержащихся в ней продуктов.
Вы также можете использовать фрагменты, listview.
EDIT после смены изображения: вы можете просто расширить relativelayout и переопределить метод onLayout. Это будет работать лучше, чем вложенные макеты, и я не могу думать ни о чем другом, с которым вы можете уйти с меньшими усилиями.
EDIT для разработки:
Вот пример класса я использую. В основном в методе onlayout вы принимаете каждое решение и говорите всем дочерним представлениям о том, чтобы разместить их в прямоугольнике, вызывая метод макета каждого из них и передавая параметры прямоугольника. Посмотрите, как я использую метод макета детского вида, чтобы диктовать прямоугольник.
public class KnockPile extends HandPile
{
private static final String TAG = "KnockPile";
static final int EXPECTED_CARDS = 3;
int mColoring; // this is the coloring group this pile is associated with.
// every card added to this pile should be set with this color.
public KnockPile(Context context, GameActivity ref , int ingroup)
{
super(context);
mColoring = ingroup;
mActivityReference = ref;
setWillNotDraw(false);
setClickable(true);
setOnDragListener(this);
mCardBorders = new ArrayList<Integer>();
final LayoutTransition transition = new LayoutTransition();
setLayoutTransition(transition);
//transition .enableTransitionType(LayoutTransition.CHANGING);
//transition .disableTransitionType(LayoutTransition.CHANGE_APPEARING);
}
/**
* this overrides the card ordering of handpile. This method lays the cards in a linear fashion.
* Possibly overlapping fashion. This is not dependent to orientation of screen.
*
* @see com.kavhe.kondi.gin.layouts.HandPile#onLayout(boolean, int, int, int, int)
*/
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int availablewidth = getMeasuredWidth() ;//this is the maximum availlable
int distance = availablewidth /Math.max(getChildCount(), 1) ; // the horizontal distance between two cards
Log.v(TAG,"available width onlayout is :" + availablewidth +"and distance is " + distance);
int cardheight = getHeight();
int cardwidth = cardheight*3/4;
if(distance > cardwidth) distance = cardwidth;
mCardBorders.clear();
for(int i = 0 ; i < mCards.size() ; i++)
{
//save this border into a global variable so that it can be used when one of the cards dragged
//by user to show that user can insert to that location
mCardBorders.add(i*distance);
mCards.get(i).layout( i*distance , 0 , cardwidth+ i*distance , cardheight);
}
}
}
и это от documentation
защищен недействительным OnLayout (булево изменен, внутр слева, INT сверху, внутр право, внутр снизу)
Вызывается из макета, когда этот вид должен назначить размер и положение каждого из его детей. Производные классы с детьми должны переопределять этот метод и расписывать макеты для каждого из своих детей.
Параметры
изменены Это новый размер или положение этого точки зрения
левое положение, по отношению к родителю
сверху Верхняя позиции, по отношению к родителю
права правого положения, относительно родителя
дно Нижнее положение относительно родителя
Привет, Пожалуйста, проверьте обновленное изображение. Мне нужен такой интерфейс. – Vicky
Отредактировано после смены изображения. – user2259824
Можете ли вы просто уточнить свой ответ, представив пример?. Я не знаю, как писать onLayout method(). Я очень много нового программирования для Android. И я думаю, что я получу возможный ответ. Заранее спасибо. – Vicky
С помощью StaggeredGridView я выполнил свое требование. Спасибо всем за помощь и поддержку.
Возможно также использование табличного макета с его параметром прочности строки
- 1. Создание пользовательского интерфейса RecyclerView динамически - Android
- 2. Создание такого пользовательского интерфейса Android
- 3. Динамически добавлять содержимое пользовательского интерфейса в android
- 4. Создание динамического пользовательского интерфейса
- 5. Создание проблемы пользовательского интерфейса
- 6. Создание пользовательского интерфейса NSWindow
- 7. Создание пользовательского интерфейса
- 8. Создание интерактивного пользовательского интерфейса
- 9. Создание конструктора пользовательского интерфейса
- 10. Создание пользовательского настраиваемого пользовательского интерфейса в ios
- 11. Дизайн пользовательского интерфейса Android?
- 12. Создание пользовательского интерфейса для динамически загружаемого содержимого в автозаполнении
- 13. Создание пользовательского интерфейса в WPF
- 14. Плохая загрузка/Создание пользовательского интерфейса
- 15. Дизайн пользовательского интерфейса в WPF - создание нестандартного пользовательского интерфейса
- 16. Динамически создавать элементы пользовательского интерфейса Onsen
- 17. Создание пользовательского интерфейса и базы данных динамически, каков наилучший подход?
- 18. Создание пользовательского пользовательского интерфейса с использованием Flixel
- 19. Создание объектов пользовательского интерфейса UWP
- 20. Создание пользовательского интерфейса терминала python
- 21. Создание пользовательского интерфейса с логикой
- 22. Создание универсальных файлов пользовательского интерфейса
- 23. создание пользовательского интерфейса для casperjs
- 24. Создание профессионала в приложение пользовательского интерфейса в Android
- 25. Firefox Addon - Создание пользовательского интерфейса
- 26. Создание элементов пользовательского интерфейса iPhone
- 27. Создание пользовательского интерфейса с OpenCV
- 28. Создание пользовательского интерфейса имеет приоритет
- 29. Ошибка пользовательского интерфейса android
- 30. Динамически перемещать объект пользовательского интерфейса в Filemaker
Использование LinearLayout в любом случае невозможно. Я много пробовал. Проверьте изображение еще раз. Я отредактировал его. – Vicky
Макет может быть выполнен как: ВЕРТИКАЛЬНЫЙ (ГОРИЗОНТАЛЬНЫЙ (1, ВЕРТИКАЛЬНЫЙ (2,4), ВЕРТИКАЛЬНЫЙ (3,5)), ГОРИЗОНТАЛЬНЫЙ (ВЕРТИКАЛЬНЫЙ (6,7), 8,9), ГОРИЗОНТАЛЬНЫЙ (10,11, 12)) – arkocal