Можно ли добавить кнопку в пустую 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
соответственно.