如何使用Java代码设置TextView的位置?

时间:2017-01-27 00:37:35

标签: java android

我还在学习Android,所以我知道这个问题听起来很傻。 在这里,我需要在我的Activity上设置大量TextView的位置。我使用来自intent的变量接收数字,但是稍后当我需要创建与数字一样多的TextView时,它们出现在我的布局上的位置(0,0)。 我需要创建一个格栅,例如:__ __ __ __ 但是,所有这些都出现在同一个地方(0,0),我的应用程序只显示:__

这是我尝试过的代码:

public class Play extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_play);


        Intent intent=getIntent();
        String n = intent.getStringExtra("NUM");
        int times = Integer.parseInt(n);

        TextView [] espaces = new TextView[times];

        for(int i = 0; i < espaces.length; i++){

            espaces[i] = new TextView(this);
            espaces[i].setText(" __ ");
            //Here I would like to set the position of my text view
            setContentView(espaces[i]);

        }

    }
}

3 个答案:

答案 0 :(得分:1)

您似乎不了解setContentView()的作用。它会将传入的视图替换为现有的内容视图。因此,您不会添加视图,而是始终显示您设置的最后一个视图。如果您想要全部展示,请将其添加到LinearLayout并将该视图设为setContentView()

答案 1 :(得分:1)

如果我读到的是正确的,我认为您使用相对布局需要更改为LinearLayout。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linear_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
</LinearLayout> 

此外,您正在以错误的方式添加视图,您需要一个引用线性布局的变量。

//you create a field outside the onCreate Method
LinearLayout layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_play);

        //then initialize the variable like this.
        layout = (LinearLayout) findViewById(R.id.linear_layout);

        Intent intent=getIntent();
        String n = intent.getStringExtra("NUM");
        int times = Integer.parseInt(n);

        TextView [] espaces = new TextView[times];

        for(int i = 0; i < espaces.length; i++){

            espaces[i] = new TextView(this);
            espaces[i].setText(" __ ");

            //you add like this
            layout.addView(espaces[i]);

        }

    }

答案 2 :(得分:0)

我不知道布局xml act_play的内容。但我希望LinearLayout标识为container

所以将代码更改为下一个:

public class Play extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act_play);

    ViewGroup content = (ViewGroup)findViewById(R.id.container);  //<-this id from xml

    Intent intent=getIntent();
    String n = intent.getStringExtra("NUM");
    int times = Integer.parseInt(n);

    TextView [] espaces = new TextView[times];

    for(int i = 0; i < espaces.length; i++){

        espaces[i] = new TextView(this);
        espaces[i].setText(" __ ");
        content.addView(espaces[i]);//<-add to view group and not replace content view of activity

    }

}
}
顺便说一下,你可以把整数放到意图中,所以当你收回它时不需要转换。