是否可以在 android 中向空的 MainActivity 添加按钮?

Is it possible to add a button to an empty MainActivity in android?

我有一个空的 Activity_main 布局。我想添加一些必须占屏幕宽度一定百分比的按钮,因此我想以编程方式添加它们。本网站上的每个示例都使用 LinearLayout。是否可以将按钮直接添加到 Activity_main?

谢谢。

您需要 ViewGroup,因为它是布局和视图容器的基础 class。

如果不想使用线性布局,可以使用约束布局。约束布局附带 Guidelines - 它们可以帮助您测量屏幕的特定百分比并对齐它们旁边的按钮(或视图)。

上图是指南工作原理的示例。第一个是占屏幕 25% 的垂直参考线(您可以将其视为将屏幕垂直分成 4 块)。第二个是占屏幕 50% 的水平辅助线(将屏幕水平分成 2 块)。

i want to add a number of buttons that have to be a certain % of the screen width

您可以通过指南实现这一目标。以下是仅使用 xml:

的方法
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.chornge.myapplication.MainActivity">

    <android.support.constraint.Guideline
        android:id="@+id/vertical_guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.25" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toRightOf="@id/vertical_guideline" />

    <android.support.constraint.Guideline
        android:id="@+id/horizontal_guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.50" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/horizontal_guideline" />

</android.support.constraint.ConstraintLayout>

以下是仅使用 Java:

来创建相同效果的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.activity_main);

    ConstraintLayout constraintLayout = new ConstraintLayout(this);
    constraintLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));
    setContentView(constraintLayout);

    /* vertical guideline */

    Guideline verticalGuide = new Guideline(this);
    ConstraintLayout.LayoutParams verticalGuideParams =
            new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);

    verticalGuideParams.guidePercent = 0.25f;
    verticalGuideParams.orientation = LinearLayout.VERTICAL;
    verticalGuide.setLayoutParams(verticalGuideParams);
    verticalGuide.setId(View.generateViewId());
    constraintLayout.addView(verticalGuide);

    /* create button1 and align its left edge to the right edge of vertical guideline*/

    Button button1 = new Button(this);
    button1.setId(View.generateViewId());
    ConstraintLayout.LayoutParams button1Params =
            new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);

    button1Params.leftToRight = verticalGuide.getId();
    button1.setLayoutParams(button1Params);
    constraintLayout.addView(button1);

    /* horizontal guideline */

    Guideline horizontalGuide = new Guideline(this);
    ConstraintLayout.LayoutParams horizontalGuideParams =
            new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);

    horizontalGuideParams.guidePercent = 0.5f;
    horizontalGuideParams.orientation = LinearLayout.HORIZONTAL;
    horizontalGuide.setLayoutParams(horizontalGuideParams);
    horizontalGuide.setId(View.generateViewId());
    constraintLayout.addView(horizontalGuide);

    /* create button2 and align its top edge to the bottom edge of horizontal guideline*/

    Button button2 = new Button(this);
    button2.setId(View.generateViewId());
    ConstraintLayout.LayoutParams button2Params =
            new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);

    button2Params.topToBottom = horizontalGuide.getId();
    button2.setLayoutParams(button2Params);
    constraintLayout.addView(button2);
}

:

  • 您仍然需要一个 ViewGroup 作为您的基础 class(LinearLayout 或 RelativeLayout 或 ConstraintLayout)
  • 您可以使用 topToToptopToBottombottomToTopbottomToBottom 或使任何视图(按钮、TextView、EditText 等)与另一个视图或视图组对齐leftToLeftleftToRightrightToLeftrightToRight.
  • 您可以使用您想要的任何百分比作为准则:5%、33.3%、80%,分别转换为 0.05f0.333f0.8f