在 Android Studio 中动态设置按钮的约束
Setting Constraints of a button dynamically in Android Studio
我的应用程序中有一个 NumberPicker,根据选择的数字,一些 editText 出现(这些 editText 被放入 xml 文件中作为不可见的,然后在 java 文件中我根据选择的数字将它们设置为可见)。问题是我想在这些 editTexts 的底部添加一个按钮,所以在开始时按钮应该在第一个 editText 下面,但是如果用户选择数字 2,按钮应该只出现在第二个 editText 下面等等on... 所有的 editText 都放在线性布局中。为了更好的解释,我放了两张与我想要得到的相关的图片。
我的xml文件如下:
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:padding="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/numberPicker">
<EditText
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:paddingRight="43dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
android:hint="Inserisci la location"
android:inputType="text"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="visible"
/>
<TextView
android:id="@+id/getCurrentLocation"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:background="#00FFFFFF"
android:backgroundTint="#01FFFFFF"
android:paddingLeft="90dp"
android:backgroundTintMode="multiply"
android:text="Get my current location"
android:textStyle="bold" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_rounded"
android:text="Search Places"
android:textColor="#ffffff"
android:textSize="22sp" />
<EditText
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:paddingRight="43dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
android:hint="Inserisci la location"
android:inputType="text"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="invisible"
/>
etc...
<EditText
android:id="@+id/text20"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:paddingRight="43dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
android:hint="Inserisci la location"
android:inputType="text"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="invisible"
/>
Java 文件如下:
mtext1 = (EditText) findViewById(R.id.text1);
mtext2 = (EditText) findViewById(R.id.text2);
etc...
mtext20 = (EditText) findViewById(R.id.text20);
mGetPlaces = (Button) findViewById(R.id.button);
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
switch (newVal) {
case 1:
mtext2.setVisibility(View.INVISIBLE);
mtext3.setVisibility(View.INVISIBLE);
etc...
mtext20.setVisibility(View.INVISIBLE);
break;
case 2:
mtext2.setVisibility(View.VISIBLE);
mtext3.setVisibility(View.INVISIBLE);
etc...
mtext20.setVisibility(View.INVISIBLE);
break;
etc...
case 20:
mtext2.setVisibility(View.VISIBLE);
mtext3.setVisibility(View.VISIBLE);
etc...
mtext20.setVisibility(View.VISIBLE);
break;
}
}
我试过将下面的代码放在case 2中,但是按钮完全消失了,也没有出现错误。
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mGetPlaces.getLayoutParams();
params.setMarginStart(mtext2.getId());
mGetPlaces.setLayoutParams(params);
在xml中可以设置
app:layout_constraintTop_toBottomOf="@+id/name"
但是,我没有找到将其应用于 java 代码的任何解决方案。
看看ConstraintSet。网上有一些教程介绍如何使用 ConstraintSets 以编程方式创建和修改约束。
您也可以使用 GONE widgets。第二个 EditText 的可见性可能为“消失”,这样底部按钮会向上浮动到第一个 EditText 下方,并在第二个 EditText 可见。
我的应用程序中有一个 NumberPicker,根据选择的数字,一些 editText 出现(这些 editText 被放入 xml 文件中作为不可见的,然后在 java 文件中我根据选择的数字将它们设置为可见)。问题是我想在这些 editTexts 的底部添加一个按钮,所以在开始时按钮应该在第一个 editText 下面,但是如果用户选择数字 2,按钮应该只出现在第二个 editText 下面等等on... 所有的 editText 都放在线性布局中。为了更好的解释,我放了两张与我想要得到的相关的图片。
我的xml文件如下:
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:padding="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/numberPicker">
<EditText
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:paddingRight="43dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
android:hint="Inserisci la location"
android:inputType="text"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="visible"
/>
<TextView
android:id="@+id/getCurrentLocation"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:background="#00FFFFFF"
android:backgroundTint="#01FFFFFF"
android:paddingLeft="90dp"
android:backgroundTintMode="multiply"
android:text="Get my current location"
android:textStyle="bold" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_rounded"
android:text="Search Places"
android:textColor="#ffffff"
android:textSize="22sp" />
<EditText
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:paddingRight="43dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
android:hint="Inserisci la location"
android:inputType="text"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="invisible"
/>
etc...
<EditText
android:id="@+id/text20"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:paddingRight="43dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
android:hint="Inserisci la location"
android:inputType="text"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="invisible"
/>
Java 文件如下:
mtext1 = (EditText) findViewById(R.id.text1);
mtext2 = (EditText) findViewById(R.id.text2);
etc...
mtext20 = (EditText) findViewById(R.id.text20);
mGetPlaces = (Button) findViewById(R.id.button);
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
switch (newVal) {
case 1:
mtext2.setVisibility(View.INVISIBLE);
mtext3.setVisibility(View.INVISIBLE);
etc...
mtext20.setVisibility(View.INVISIBLE);
break;
case 2:
mtext2.setVisibility(View.VISIBLE);
mtext3.setVisibility(View.INVISIBLE);
etc...
mtext20.setVisibility(View.INVISIBLE);
break;
etc...
case 20:
mtext2.setVisibility(View.VISIBLE);
mtext3.setVisibility(View.VISIBLE);
etc...
mtext20.setVisibility(View.VISIBLE);
break;
}
}
我试过将下面的代码放在case 2中,但是按钮完全消失了,也没有出现错误。
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mGetPlaces.getLayoutParams();
params.setMarginStart(mtext2.getId());
mGetPlaces.setLayoutParams(params);
在xml中可以设置
app:layout_constraintTop_toBottomOf="@+id/name"
但是,我没有找到将其应用于 java 代码的任何解决方案。
看看ConstraintSet。网上有一些教程介绍如何使用 ConstraintSets 以编程方式创建和修改约束。
您也可以使用 GONE widgets。第二个 EditText 的可见性可能为“消失”,这样底部按钮会向上浮动到第一个 EditText 下方,并在第二个 EditText 可见。