LinearLayout,其中2个textviews动态添加了对齐问题

时间:2011-06-23 14:00:24

标签: android android-layout

我有水平方向的LinearLayouts列表,每个包含动态添加的两个textview。 这个LinearLayout最终被包装到主LinearLayout中。

我希望每个线性布局的第二个textview以编程方式正确对齐。我该怎么做动态。

以下是示例代码:

LinearLayout placeHolderLinearLayout =  (LinearLayout)findViewById(R.id.listhosts);

//Several such layouts with 2 text views will be added to placeholder
LinearLayout l = new LinearLayout(this);
l.setClickable(true);

TextView h = new TextView(this);
h.setText("left");
h.setSingleLine(true);


TextView t = new TextView(this);
t.setText("right");
t.setSingleLine(true);

l.addview(h);
l.addview(t);

placeHolderLinearLayout.addView(l);

有android:layout_alignParentRight属性。但是在这种情况下如何动态设置它。任何线索?

3 个答案:

答案 0 :(得分:3)

android:layout_alignParentRight只有在其父级为RelativeLayout的情况下才能应用于视图。将容器更改为该容器,2个子视图可以使用任何layout_alignParent*属性。

如果您不能以编程方式执行此操作(我无法快速查看该怎么做),那么您始终可以在xml中定义内部布局(您可以轻松地将布局设置为正确)并通过以下方式手动充气: / p>

LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View l = vi.inflate(R.layout.inner_relative_layout, null);

TextView leftTextView = (TextView) l.findViewById(R.id.left_text);
leftTextView.setText("left");
// ... fill in right text too

placeHolderLinearLayout.addView(l);

编辑:添加了布局定义

使用这样的布局,并在上面的代码中对其进行充气:

<RelativeLayout android:id="@+id/inner_relative_layout" android:layout_width="fill_parent" android:layout_height="wrap_content">
    <TextView android:id="@+id/left_text" android_alignParentLeft="true" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <TextView android:id="@+id/right_text" android_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RelativeLayout>

您将为要添加到列表中的每个项目创建多个这些布局。

答案 1 :(得分:1)

这是一个简单的回答::

public class MainActivity extends Activity {

    TextView text[];
    TextView texto[];
    CheckBox check[];

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View view = findViewById(R.id.layout);
        text = new TextView[5];
        texto = new TextView[5];
        check = new CheckBox[5];

        for (int i = 0; i < 5; i++) {
            text[i] = new TextView(this);
            text[i].setText("First one is::" + i);
            texto[i] = new TextView(this);
            texto[i].setText("sennd one ibs::" + i);
            check[i] = new CheckBox(this);

            ((ViewGroup) view).addView(check[i]);
            ((ViewGroup) view).addView(text[i]);
            ((ViewGroup) view).addView(texto[i]);
        }

    }
}

答案 2 :(得分:0)

请尝试以下

LinearLayout placeHolderLinearLayout =  (LinearLayout)findViewById(R.id.listhosts);

//Several such layouts with 2 text views will be added to placeholder
LinearLayout l = new LinearLayout(this);
l.setClickable(true);

TextView h = new TextView(this);
txt1.setGravity(Gravity.LEFT);
h.setText("left");
h.setSingleLine(true);


TextView t = new TextView(this);
txt1.setGravity(Gravity.RIGHT);
t.setText("right");
t.setSingleLine(true);

l.addview(h);
l.addview(t);

placeHolderLinearLayout.addView(l);