我创建的第一个按钮与第二个按钮重叠

时间:2017-02-17 04:39:56

标签: java android

基本上,第一个按钮是生成的,但是第二个按钮放在它上面,然后在第二个按钮之后它们开始一个在另一个之下,我不知道为什么我需要第二个按钮放在第一个以下,我不能让第二个按钮重叠它,任何帮助将不胜感激。

这是我的代码:

for (int i = 0; i < classes.length; i++) {
            System.out.println("Created a button # " + i + "!");
            Button button = new Button(this);
            button.setId(i);

            //Define the height and width of the button.
            RelativeLayout.LayoutParams buttonDetails = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.MATCH_PARENT, //Width
                    200 //Height
            );

            if (i > 0) { //If it isn't the first button, then...
                //Place it below the previous button.
                buttonDetails.addRule(RelativeLayout.BELOW, i - 1);
            }

            //Add the button text.
            button.setText(something[i]);

            //Center the button horizontally.
            buttonDetails.addRule(RelativeLayout.CENTER_HORIZONTAL);

            //Generate a button for the class.
            layout.addView(button, buttonDetails);
}

XML:

<?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:id="@+id/activity_menu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="Menu">
</RelativeLayout>

3 个答案:

答案 0 :(得分:0)

根据source code,添加主题为0的规则将导致在布局期间忽略该规则。您的第二个Button就属于这种情况。一般来说,最好使用静态ID(例如R.id.some_id)而不是您自己创建的静态ID。如果您必须使用自己生成的ID,则View.generateViewId()非常有用,但仅限于API 17+。如果您需要支持较旧的API,那么copy the method就足够了。

正如其他人所提到的,垂直导向的LinearLayout将完成您尝试用更少的手工工作做的事情。

答案 1 :(得分:0)

事情是你不能使用0作为id。从1开始。它会正常工作。使代码如下所示

            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.InitialDirectory = @"C:\temp";
            saveFileDialog.RestoreDirectory = true;
            saveFileDialog.Title = "Browse Text Files";
            saveFileDialog.DefaultExt = "doc";
            saveFileDialog.Filter = "Word Doc (*.doc)|*.doc|PDF (*.pdf)| *.pdf";
            saveFileDialog.CheckFileExists = false;
            saveFileDialog.CheckPathExists = true;

            Warning[] warnings;
            string[] streams;
            string mimeType;
            string encoding;
            string extension;

            byte[] bytes = reportTest.LocalReport.Render("Word", null, out mimeType, out encoding, out extension, out streams, out warnings);

            //if (saveFileDialog.ShowDialog() == DialogResult.OK)
            //{
                saveFileDialog.FileName = "123.doc";
                var filename = saveFileDialog.FileName;
                System.IO.FileStream file = new FileStream(filename, FileMode.Create);
                file.Write(bytes, 0, bytes.Length);
                file.Close();
            //}

答案 2 :(得分:-1)

layout.addView(button, buttonDetails);<br/>

这是什么布局? 如果其LinearLayout的方向垂直,那么它将不会重叠,在这种情况下,您不需要提及RelativeLayout.BELOW部分。