是否可以在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) 您可以使用topToTop
或topToBottom
或bottomToTop
或bottomToBottom
或leftToLeft
或leftToRight
或@987654333 使任何视图(按钮、TextView、EditText 等)与另一个视图或视图组对齐@ 或 rightToRight
。
您可以使用任何您想要的百分比作为您的指南:5%、33.3%、80% 分别转换为 0.05f
、0.333f
、0.8f
。
【讨论】:
以上是关于是否可以在android中的空MainActivity中添加一个按钮?的主要内容,如果未能解决你的问题,请参考以下文章
如何找出 json 响应是 android 中的空 JSON 对象?
尝试在 Android JSON 中的空对象引用上调用虚拟方法“int java.lang.String.length()”
找不到类,使用 Android Studio 3.0.1、Room、Kotlin 的 androidTest 中的空测试套件