如何以编程方式添加按钮?

时间:2016-05-25 14:03:21

标签: android button relativelayout

我尝试在我的RelativLayout中添加一个Button。 它有效,但按钮相互重叠。 我想我已经覆盖了LayoutParams,或者我使用了错误的方法,但我不知道。

这只是一个考验。在最终版本中,我想在一个带有relativLayout的scrollView中添加一个未定义数量的按钮。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.freddy.test.MainActivity"
android:id="@+id/relative_main">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Add new Button"
    android:id="@+id/button"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true" />
</RelativeLayout>

XML文件:

{{1}}

6 个答案:

答案 0 :(得分:0)

按钮相互重叠,因为您使用的是RelativeLayout,而没有告诉相对于Layout的按钮应该放在哪个位置。 可能有用的东西是使用LinearLayout而不是RelativeLayout并向其添加按钮。

答案 1 :(得分:0)

  

但这只是一个测试,在最终版本中我想添加一个   带有relativLayout的滚动视图的未定义数量的按钮   它

如果你的问题是那个

  

按钮相互重叠

解决起来相对简单。请改用<LinearLayout> 在根标记中,只需添加名为android:orientation="vertical"android:orientation="horizontal"的属性即可。

对于RelativeLayout,还有一些属性可以解决这个问题,但它有点复杂。 如果这些是你经常遇到的问题,我建议你选择this课程。

示例:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </LinearLayout>

    </LinearLayout>

</ScrollView>

答案 2 :(得分:0)

尝试使用此而不是FrameLayout.LayoutParams 这使您可以更好地控制相对布局子项(因为您的父布局是RelativeLayout)

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

您可以通过以下方式与其他视图对齐:     params.addRule(RelativeLayout.BELOW,R.id.putyourviewhere);

这是你坚持使用RelativeLayout。但是LinearLayout的解决方案也没问题。但是RelativeLayout有更多的控制权

答案 3 :(得分:0)

当您使用RelativeLayout时,如果您希望按钮按水平toRightOF,则必须使用below要排列垂直,以便以编程方式添加任何内容,只需将其作为规则添加到layoutParams

lp.addRule(RelativeLayout.RIGHT_OF, R.id.button);

OR

lp.addRule(RelativeLayout.BELOW, R.id.button);

答案 4 :(得分:0)

FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);


lp.topMargin = R.id.button;
// use some meaningful margin, R.id.button can return any integer value. 


// you have issue with alignment of button

ll.addView(myButton);
// with this call your button should be in view hierarchy now you have to align your button. best is use RelativeLayout.LayoutParams and make your button relative(top/bottom/left/right) to some other component in viewgroup(RelativeLayout). 

答案 5 :(得分:0)

好的,现在尝试添加另一个参数来控制布局,如居中CENTER_HORIZONTAL

params.addRule(RelativeLayout.CENTER_HORIZONTAL, -1); // -1 means that CENTER_HORIZONTAL doesn't take a view as a parameter