如何在Android中以编程方式将TextView设置为LinearLayout?

时间:2016-01-11 09:35:41

标签: android

我正在动态创建TextView。在这里,我正在创建一个mainLayout,其中我有两个子布局,我给了他们重量。

这是我的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:baselineAligned="false"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/Layout_second_overs"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="6"
            android:orientation="vertical">

            <!--Second textview overs-->
        </LinearLayout>
        <LinearLayout
            android:id="@+id/Layout_second_balls"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="horizontal">

            <!--Second textview balls--> //here i inflate 12 textview dynamically but not 12 seen on the device while i run the app.
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

创建12 TextViews并放入布局的代码。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

for(int a = 0; a <= 12; a++)
{
    TextView first = new TextView(getApplicationContext());
    first.setLayoutParams(params);
    first.setTextColor(Color.parseColor("#000000"));
    first.setTextSize(12);
    first.setGravity(Gravity.LEFT);
    first.setPadding(5, 0, 5, 0);
    first.setText("12");
    layout_second_balls.addView(first); //This is my linear layout which id is Layout_second_balls
}

问题是我的所有数据都打印到日志中但在设备上看不到。

请帮我解决这个问题。

5 个答案:

答案 0 :(得分:0)

您需要为视图分配索引,同时为for循环中创建的每个textview执行addview(view,index)设置索引,例如layout_second_balls.addView(first,index);

代码应如下所示:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
for(int a = 0; a <= 12; a++)
{
    TextView first = new TextView(getApplicationContext());
    first.setLayoutParams(params);
    first.setTextColor(Color.parseColor("#000000"));
    first.setTextSize(12);
    first.setGravity(Gravity.LEFT);
    first.setPadding(5, 0, 5, 0);
    first.setText("12");
    layout_second_balls.addView(first,a);
}

希望它能奏效。

答案 1 :(得分:0)

您可以使用此行代码。

LinearLayout  layout_second_balls=(LinearLayout) findViewById(R.id.Layout_second_balls);

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    for(int a = 0;a<=12;a++)
    {
        TextView first = new TextView(getApplicationContext());
        first.setLayoutParams(params);
        first.setTextColor(Color.parseColor("#000000"));
        first.setTextSize(12);
        first.setGravity(Gravity.LEFT);
        first.setPadding(5, 0, 5, 0);
        first.setText("12");
        layout_second_balls.addView(first);
    }

enter image description here

我在我的模拟器中运行此代码,我得到了这个。

答案 2 :(得分:0)

您的layout_second_overs需要占用所有屏幕空间 - 因此您的layout_second_balls已移出屏幕。 如果您希望看到彼此相邻的两个LinearLayouts,则需要将layout_width设置为“0dp”:

//pseudo, simply change width to 0dp

<LinearLayout
    android:layout_height="40dp"
    .... >
    <LinearLayout
        android:layout_width="0dp"
        android:layout_weight="6"/>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_weight="1"/>

</LinearLayout>

答案 3 :(得分:0)

要替换这种循环,您应该使用RecyclerView。它易于使用和响应(因为您的列表将是可滚动的)。 实现RecyclerView时必须记住的事情是向它添加适配器和LayoutManager。

对于你的例子:

LayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, true);
YourAdapter adapter = new YourAdapter([...]);
RecyclerView recyclerView = findViewById(R.id.your_recyclerview_here);

recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(adapter);

如果您需要任何建议来创建适配器,请询问。

答案 4 :(得分:0)

有两个问题

  • 一个是与布局设计相关的
  • 第二,基于布局设计和属性,您还需要 句柄是在您将动态视图添加到线性布局时

这里我在你的xml文件中已经改变了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:baselineAligned="false"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/Layout_second_overs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <!--Second textview overs-->
        </LinearLayout>
        <LinearLayout
            android:id="@+id/Layout_second_balls"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1" android:background="#FF13C7FF"
            android:orientation="horizontal">

        </LinearLayout>
    </LinearLayout>
</LinearLayout>

Layout_second_overs linearlayout height,Width&amp;重量是问题。
&安培;在Layout_second_balls线性布局中,您使用weight作为1,因此如果方向是水平的,您还需要layout_height作为0dp

现在我已经在代码中更改了

LinearLayout.LayoutParams params = new
                LinearLayout.LayoutParams
                (0, LinearLayout.LayoutParams.WRAP_CONTENT);
        for(int a = 0;a<=12;a++)
        {
            TextView first = new TextView(getActivity());
            first.setLayoutParams(params);
            first.setTextColor(Color.parseColor("#000000"));
            first.setTextSize(12);
            params.weight = 1; /// Need to give weight if you want equal size of textview inside Linear
            first.setGravity(Gravity.LEFT);
            first.setPadding(5, 0, 5, 0);
            first.setText("12");
            Layout_second_balls.addView(first); //This is my linear layout which id is Layout_second_balls
        }

以上内容基于您提出的问题

<强> 建议

避免像你问的那样添加动态视图。我更喜欢使用ListView,GridView,RecyclerView来实现这种功能。