2013-07-10 2 views
0

Я программно создаю RelativeLayout и имеет 3 кнопки - один в центре экрана, один над ним и другой под ним.Как проложить пуговицы

Как поместить/разместить их, чтобы увеличить пустое пространство между кнопками? Они помещаются почти сразу рядом друг с другом с моим текущим кодом, что может привести к непреднамеренным неправильным нажатием.

private RelativeLayout myLayout; 

private void addButtons() { 
    // Construct the 2 player game button. 
    Button start2pGameButton = new Button(this); 
    start2pGameButton.setOnClickListener(new Button.OnClickListener(){ 

    public void onClick(View v){ 
     // Process the button tap and start a 2 player game. 
     startFrozenBubble(2); 
    } 
    }); 
    start2pGameButton.setText("Player vs. CPU"); 
    start2pGameButton.setTextSize(TypedValue.COMPLEX_UNIT_PT, 8); 
    start2pGameButton.setWidth((int) (start2pGameButton.getTextSize() * 10)); 
    start2pGameButton.setHorizontalFadingEdgeEnabled(true); 
    start2pGameButton.setFadingEdgeLength(5); 
    start2pGameButton.setShadowLayer(5, 5, 5, R.color.black); 
    start2pGameButton.setId(BTN2_ID); 
    LayoutParams myParams1 = new LayoutParams(LayoutParams.WRAP_CONTENT, 
              LayoutParams.WRAP_CONTENT); 
    myParams1.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    myParams1.addRule(RelativeLayout.CENTER_VERTICAL); 
    // Add view to layout. 
    myLayout.addView(start2pGameButton, myParams1); 
    // Construct the 1 player game button. 
    Button start1pGameButton = new Button(this); 
    start1pGameButton.setOnClickListener(new Button.OnClickListener(){ 

    public void onClick(View v){ 
     // Process the button tap and start/resume a 1 player game. 
     startFrozenBubble(1); 
    } 
    }); 
    start1pGameButton.setText("Puzzle"); 
    start1pGameButton.setTextSize(TypedValue.COMPLEX_UNIT_PT, 8); 
    start1pGameButton.setWidth((int) (start1pGameButton.getTextSize() * 10)); 
    start1pGameButton.setHorizontalFadingEdgeEnabled(true); 
    start1pGameButton.setFadingEdgeLength(5); 
    start1pGameButton.setShadowLayer(5, 5, 5, R.color.black); 
    start1pGameButton.setId(BTN1_ID); 
    LayoutParams myParams2 = new LayoutParams(LayoutParams.WRAP_CONTENT, 
              LayoutParams.WRAP_CONTENT); 
    myParams2.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    myParams2.addRule(RelativeLayout.ABOVE, start2pGameButton.getId()); 
    // Add view to layout. 
    myLayout.addView(start1pGameButton, myParams2); 
    // Construct the options button. 
    Button optionsButton = new Button(this); 
    optionsButton.setOnClickListener(new Button.OnClickListener(){ 

    public void onClick(View v){ 
     // Process the button tap and start the preferences activity. 
     startPreferencesScreen(); 
    } 
    }); 
    optionsButton.setText("Options"); 
    optionsButton.setTextSize(TypedValue.COMPLEX_UNIT_PT, 8); 
    optionsButton.setWidth((int) (optionsButton.getTextSize() * 10)); 
    optionsButton.setHorizontalFadingEdgeEnabled(true); 
    optionsButton.setFadingEdgeLength(5); 
    optionsButton.setShadowLayer(5, 5, 5, R.color.black); 
    optionsButton.setId(BTN3_ID); 
    LayoutParams myParams3 = new LayoutParams(LayoutParams.WRAP_CONTENT, 
              LayoutParams.WRAP_CONTENT); 
    myParams3.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    myParams3.addRule(RelativeLayout.BELOW, start2pGameButton.getId()); 
    // Add view to layout. 
    myLayout.addView(optionsButton, myParams3); 
} 
+1

установить запас для каждой кнопки – tyczj

+0

весов компоновочные являются одним из способов систематического пространства их в макете, основанной на неизвестных размерах разных экранов. И объединив их с полями, как это было предложено. Как правило, один из тех людей, которые любят делать свой пользовательский интерфейс как можно больше в XML. –

+0

Ya, xml делает это супер простым. Это всего лишь вопрос андроида: layout_marginBottom = "X". Я не уверен, почему не существует метода .setMargin для кнопок при записи в java, по крайней мере, я его не видел. Существует метод .setPadding, который вы могли бы попробовать, но это, вероятно, не помещало бы пространство между кнопками, просто и больше места внутри кнопки. – user2483079

ответ

0

Наиболее рекомендуемый способ сделать это с помощью XML-файлов, чтобы раздуть ваш взгляд правильно расположить и использовать поля, так как вы делаете это программно, что вы должны сделать, используя следующий код:

//For the button on top 
    MarginLayoutParams mlp = (MarginLayoutParams)yourButton.getLayoutParams(); 
    mlp.bottomMargin = xxValue; 
    btn.setLayoutParams(mlp); 

    //And the same for the one on the bottom but using mlp.topMargin 

Надеюсь, это поможет, приветствует!

0

Вы можете использовать setMargins функцию, чтобы установить допустимые пределы вида:

myParams1.setMargins(left, top, right, bottom); 
1

Надеясь это будет работать для вас

Button btn1 = new Button(this); 
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); // width, height 
params.setMargins(top, left, bottom, right); // dp values in integers 
relativeLayout.addView(btn1, params); 
+0

Если это не сработает, попробуйте RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); –

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