2013-09-05 6 views
2

Я хочу сделать интерфейс для планшета, как показано на изображениях. Этот пользовательский интерфейс будет повторяться в соответствии с количеством элементов. И положение каждого блока (например, малого или большого блока) может изменяться динамически. Пожалуйста, дайте мне предложение, какой вид, макет, который я должен использовать. Любое предложение было бы оценено ... спасибо заранее.Создание пользовательского интерфейса динамически в android

enter image description here

ответ

0

ли «продукты» всегда будет соответствовать хорошо на линии, как вы нарисовали? Если тогда вы можете использовать LinearLayouts (Вертикальный и Горизонтальный), вложенные друг в друга.

+0

Использование LinearLayout в любом случае невозможно. Я много пробовал. Проверьте изображение еще раз. Я отредактировал его. – Vicky

+0

Макет может быть выполнен как: ВЕРТИКАЛЬНЫЙ (ГОРИЗОНТАЛЬНЫЙ (1, ВЕРТИКАЛЬНЫЙ (2,4), ВЕРТИКАЛЬНЫЙ (3,5)), ГОРИЗОНТАЛЬНЫЙ (ВЕРТИКАЛЬНЫЙ (6,7), 8,9), ГОРИЗОНТАЛЬНЫЙ (10,11, 12)) – arkocal

0

Для создания таких пользовательских интерфейсов для планшетов вы должны использовать Fragments, а внутри фрагмента добавить/удалить соответствующие макеты. Если вы используете Relative Layouts, то необходимо использовать RelativeLayout.LayoutParams.

Если вы ищете лучший пример, который использует фрагменты, попробуйте Google IO app источник. Он использует различные функции динамического интерфейса.

Надеюсь, это поможет!

+0

Привет, Как я сказал, я использую фрагмент и много пробовал использовать relativelayout, но это очень проблематично. проверьте обновленное изображение. – Vicky

2

Если вы ориентируетесь на API V14 или выше, вы можете использовать GridLayout: http://developer.android.com/reference/android/widget/GridLayout.html

+0

Мое приложение minSdkVersion - 8. Любой другой вариант ...? – Vicky

+0

Hey @evaristokbza Пожалуйста, проверьте обновленное изображение и дайте свои ценные советы. – Vicky

+0

Я никогда не использовал его, но вы можете использовать GridLayout из поддержки libary v7: https://developer.android.com/reference/android/support/v7/widget/GridLayout.html (для этого вам нужно включить что поддержка библиотеки в вашем проекте, думаю, вы знаете, как это сделать). – evaristokbza

1

Использование 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 сверху, внутр право, внутр снизу)

Вызывается из макета, когда этот вид должен назначить размер и положение каждого из его детей. Производные классы с детьми должны переопределять этот метод и расписывать макеты для каждого из своих детей.

Параметры

изменены Это новый размер или положение этого точки зрения

левое положение, по отношению к родителю

сверху Верхняя позиции, по отношению к родителю

права правого положения, относительно родителя

дно Нижнее положение относительно родителя

+0

Привет, Пожалуйста, проверьте обновленное изображение. Мне нужен такой интерфейс. – Vicky

+0

Отредактировано после смены изображения. – user2259824

+0

Можете ли вы просто уточнить свой ответ, представив пример?. Я не знаю, как писать onLayout method(). Я очень много нового программирования для Android. И я думаю, что я получу возможный ответ. Заранее спасибо. – Vicky

0

С помощью StaggeredGridView я выполнил свое требование. Спасибо всем за помощь и поддержку.

5

Возможно также использование табличного макета с его параметром прочности строки

Смежные вопросы