2013-11-26 6 views
0

Я делаю небольшое приложение, поскольку изучаю Android в эти дни, и у меня возникла небольшая проблема, я сделал RelativeLayout (в файле java, а не в xml-файле), а затем представил кнопки в нем один относительно другого.Центр RelativeLayout или его содержимое

Окончательный вариант его, как это:

http://i.stack.imgur.com/TlHUt.png

Что я делаю, я создаю верхнюю пуговицу строки центра, а затем все остальные кнопки по отношению к нему. То, что я хотел бы сделать, - это центрировать RelativeLayout в представлении, чтобы я был сосредоточен на доске, и я могу поместить какой-то текст или что-то еще в верхней части экрана. Я подумал о создании LinearLayout перед RelativeLayout, а затем установил что-то наподобие «margin bottom» или представил RelativeLAyout в другой макет, чтобы сосредоточиться на нем, но кажется, что он не работает. Что вы предлагаете мне сделать для достижения этой цели, не меняя Я делаю совет? Вот код для изготовления платы:

private RelativeLayout makeBoard(){ 
    int papi = 4; 
    int grande =3; 
    int peque = 1; 
    RelativeLayout.LayoutParams params = new  RelativeLayout.LayoutParams(wrap_content,wrap_content); 
    RelativeLayout parent = new RelativeLayout(this); 


    parent.setLayoutParams(params); 



    papi = makeRow(parent,papi,peque); 
    papi = makeRow(parent,papi,peque); 

    papi = makeRow(parent,papi,grande); 
    papi = makeRow(parent,papi,grande); 
    papi = makeRow(parent,papi,grande); 

    papi = makeRow(parent,papi,peque); 
    papi = makeRow(parent,papi,peque); 
    return parent; 
} 

private int makeRow (RelativeLayout parent, int papasote,int colDer) 
{ 


    int index = papasote+10; 
    if (papasote==4) 
    { 
     createButtonSinMas (parent, index); 
    } 
    else 
    { 
     createButtonJustoAbajo(parent, index, papasote); 
    } 

    for (int i=0;i<colDer;i++) 
    { 
     createButtonAlaDeresha(parent, index+i+1, index+i); 
     createButtonAlaIskierda(parent, index-i-1, index-i); 
    } 
    return index; 
} 


private int createButtonSinMas (RelativeLayout parent, int id) 
{ 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(SIZE, SIZE); 
    params.addRule(RelativeLayout.CENTER_HORIZONTAL,RelativeLayout.TRUE); 
    CCCButton button = new CCCButton(this); 
    button.setLayoutParams(params); 
    return basura(parent,id,params, button); 
} 

private int createButtonJustoAbajo (RelativeLayout parent, int id, int papasote) 
{ 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(SIZE, SIZE); 
    params.addRule(RelativeLayout.BELOW, papasote); 
    params.addRule(RelativeLayout.ALIGN_RIGHT, papasote); 
    CCCButton button = new CCCButton(this); 
    return basura(parent,id,params, button); 

} 

private int createButtonAlaDeresha (RelativeLayout parent, int id, int papasote) 
{ 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(SIZE, SIZE); 
    params.addRule(RelativeLayout.RIGHT_OF, papasote); 
    params.addRule(RelativeLayout.ALIGN_BASELINE,papasote); 
    CCCButton button = new CCCButton(this); 
    return basura(parent,id,params, button); 
} 

private int createButtonAlaIskierda (RelativeLayout parent, int id, int papasote) 
{ 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(SIZE, SIZE); 
    params.addRule(RelativeLayout.LEFT_OF, papasote); 
    params.addRule(RelativeLayout.ALIGN_BASELINE,papasote);  
    CCCButton button = new CCCButton(this); 
    return basura(parent,id,params, button); 
} 

private int basura(RelativeLayout parent,int id,RelativeLayout.LayoutParams params, CCCButton button) 
{ 
    button.setId(id); 
    button.setLayoutParams(params); 
    button.setOnClickListener(this);  
    actualizarBoton(button); 

    parent.addView(button); 
    return button.getId(); 
} 

Тогда я просто делаю в своей основной плате = makeBoard(); который является переменной RelativeLayout.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    game = new Game(); 
    board = makeBoard(); 
    setContentView(board); 
} 

Заранее спасибо ребята

+0

Как вы можете добавить эту «панель» к экрану/главному макету? 'setContentView' или что-то еще? Опубликовать эту часть .. –

+0

Да, я просто делаю setContentView (board) в onCreate, добавлен код onCreate – Khiven

ответ

0

Попробуйте сделать следующие изменения в коде.

Изменение Layoutparams из wrap_content в match_parent

и установить серьезность вашего относительного расположения к центру.

private RelativeLayout makeBoard() { 
     int papi = 4; 
     int grande = 3; 
     int peque = 1; 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
     RelativeLayout parent = new RelativeLayout(this); 

     parent.setLayoutParams(params); 
     parent.setGravity(Gravity.CENTER); 


     papi = makeRow(parent, papi, peque); 
     papi = makeRow(parent, papi, peque); 

     papi = makeRow(parent, papi, grande); 
     papi = makeRow(parent, papi, grande); 
     papi = makeRow(parent, papi, grande); 

     papi = makeRow(parent, papi, peque); 
     papi = makeRow(parent, papi, peque); 
     return parent; 
    } 
+0

Это сработало, я пробовал с CENTER_HORIZONTAL, но все было беспорядочно. С только CENTER все работает, похоже, что это http://i.imgur.com/i5PlOUq.jpg Спасибо! – Khiven

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