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

Posted

技术标签:

【中文标题】是否可以在android中的空MainActivity中添加一个按钮?【英文标题】:Is it possible to add a button to an empty MainActivity in android? 【发布时间】:2018-03-15 05:26:33 【问题描述】:

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

谢谢。

【问题讨论】:

Activity 有一个 ViewGroup,它是根视图。您必须将按钮附加到该 ViewGroup。 【参考方案1】:

您需要一个ViewGroup,因为它是布局和视图容器的基类。

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

上图是指南如何工作的示例。第一个是占据屏幕 25% 的垂直准线(你可以认为它是将屏幕垂直分成 4 块)。第二种是占据屏幕50%的水平线(将屏幕水平分割成2块)。

我想添加一些按钮,这些按钮必须是屏幕宽度的某个百分比

您可以通过指南来实现这一目标。以下是仅使用 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_
    android:layout_
    tools:context="com.chornge.myapplication.MainActivity">

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

    <Button
        android:id="@+id/button1"
        android:layout_
        android:layout_
        app:layout_constraintLeft_toRightOf="@id/vertical_guideline" />

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

    <Button
        android:id="@+id/button2"
        android:layout_
        android:layout_
        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 作为您的基类(LinearLayout 或 RelativeLayout 或 ConstraintLayout) 您可以使用topToToptopToBottombottomToTopbottomToBottomleftToLeftleftToRight 或@987654333 使任何视图(按钮、TextView、EditText 等)与另一个视图或视图组对齐@ 或 rightToRight。 您可以使用任何您想要的百分比作为您的指南:5%、33.3%、80% 分别转换为 0.05f0.333f0.8f

【讨论】:

以上是关于是否可以在android中的空MainActivity中添加一个按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何找出 json 响应是 android 中的空 JSON 对象?

尝试在 Android JSON 中的空对象引用上调用虚拟方法“int java.lang.String.length()”

找不到类,使用 Android Studio 3.0.1、Room、Kotlin 的 androidTest 中的空测试套件

如何检查数组是不是是Javascript中的空数组数组

Eclipse - 带有 Android 7 的空 Logcat

F#中的空合并运算符?