Можно ли добавить кнопку в пустую MainActivity в android?

У меня есть пустой макет Activity_main. Я хочу добавить несколько кнопок, которые должны составлять определенный% от ширины экрана, и поэтому я хочу добавить их программно. Каждый пример на этом сайте использует LinearLayout. Можно ли добавить кнопку непосредственно в Activity_main?

Благодарю.

1 ответ

Решение

Вам нужна ViewGroup, потому что это базовый класс для контейнеров макетов и представлений.

Если вы не хотите использовать линейный макет, вы можете использовать макет ограничения. Макеты ограничений поставляются с рекомендациями - они могут помочь вам измерить определенный процент экрана и выровнять кнопки (или виды) рядом с ними.

руководящие принципы с ограничением

Изображение выше - пример того, как работают рекомендации. Первая - это вертикальная направляющая, занимающая 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_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 был вашим базовым классом (либо LinearLayout, либо RelativeLayout, либо ConstraintLayout)
  • Вы можете выровнять любой View (Button, TextView, EditText и т. Д.) С другим View или ViewGroup, используя topToTop или же topToBottom или же bottomToTop или же bottomToBottom или же leftToLeft или же leftToRight или же rightToLeft или же rightToRight,
  • Вы можете использовать любой процент в качестве ориентиров: 5%, 33,3%, 80%, что означает 0.05f, 0.333f, 0.8fсоответственно.
Другие вопросы по тегам