【问题标题】:Center RelativeLayout or its contents居中 RelativeLayout 或其内容
【发布时间】:2013-11-26 09:21:31
【问题描述】:

我最近在学习 Android 时正在制作一个小应用程序,但遇到了一个小问题,我制作了一个 RelativeLayout(在 java 文件中,而不是 xml 文件中),然后在其中引入了一个相对于其他。

最终的布局是这样的:

我所做的是创建中间的顶行按钮,然后创建与他相关的所有其他按钮。我想做的是将RelativeLayout 在视图中居中,这样我的板就居中了,我可以在屏幕顶部放置一些文本或其他任何内容。我曾考虑在 RelativeLayout 之前创建一个 LinearLayout,然后设置诸如底部边距之类的东西或将 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(); board 是一个 RelativeLayout 变量。

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

提前谢谢大家

【问题讨论】:

  • 如何将此board 添加到屏幕/主布局中? setContentView 还是什么?发布那部分..
  • 是的,我只是在 onCreate 中做了 setContentView(board),添加了 onCreate 代码

标签: android android-layout android-relativelayout


【解决方案1】:

尝试在您的代码中进行以下更改。

将 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;
    }

【讨论】:

  • 它奏效了,我尝试过使用 CENTER_HORIZONTAL 但事情变得一团糟。只需 CENTER 就可以了,看起来像这样 i.imgur.com/i5PlOUq.jpg 谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 2012-11-24
  • 2021-12-28
  • 2013-05-06
  • 2013-08-07
  • 1970-01-01
  • 2015-10-20
相关资源
最近更新 更多