gpt4 book ai didi

android - 如何始终在 Bottom Sheet 对话框 fragment 中将按钮与屏幕底部对齐

转载 作者:行者123 更新时间:2023-12-03 10:11:36 31 4
gpt4 key购买 nike

我有一个自定义类扩展 BottomSheetDialogFragment 将在单击按钮时显示。
我的自定义 BottomSheetDialogFragment 布局有 3 个部分。

a.A 标题文本,

b.A 单选组(我动态添加 n 个项目)

c.底部的OK按钮(我想一直显示在底部)

这就是我点击按钮时的样子。
enter image description here

实际上在我的对话框 fragment 第一次启动时,我的 OK 按钮是不可见的。但是当我展开 BottomSheet 时,它看起来像下面并且我的 OK 按钮是可见的
enter image description here

但是我需要的是始终显示我的底部 OK 按钮,即当我的对话框 fragment 启动时,我的 OK 按钮应该出现在底部,而不管它具有多少单选按钮,并且当它展开时,OK 按钮也应该在底部,我的单选按钮应该是可滚动的 .

下面是我的对话框 fragment 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/nested_scroll_view"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="25dp"
android:layout_marginRight="20dp"
android:layout_alignParentTop="true"
android:text=""
/>


<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginLeft="15dp"
android:layout_below="@id/title"
android:layout_marginBottom="10dp"
>
</RadioGroup>


<android.widget.Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ok"
android:layout_below="@id/radiogroup"
android:text="OK"
android:layout_marginTop="10dp"
android:layout_alignParentBottom="true"
></android.widget.Button>

</RelativeLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>

这是我的自定义 BottomSheetDialogFragment
public class BottomSheetExample extends BottomSheetDialogFragment {

@BindView(R.id.title)
TextView title;

@BindView(R.id.ok)
Button ok;

@BindView(R.id.nested_scroll_view)
NestedScrollView nestedScrollView;

@BindView(R.id.radiogroup)
RadioGroup radioGroup;

// TODO: Rename and change types of parameters

public BottomSheetExample() {
// Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.bottom_sheet, container, false);

ButterKnife.bind(this, view);

ArrayList<String> list = new ArrayList<>();
for(int i=0;i<15;i++){
list.add(""+i);
}

title.setText("Numbers");

RadioGroup rg = radioGroup;

for (int i = 0; i < list.size(); i++) {
RadioButton rbn = new RadioButton(getContext());
rbn.setId(View.generateViewId());
String radioButtonText = list.get(i);
rbn.setText(radioButtonText);
rg.addView(rbn);
}

return view;
}
}

这就是我如何称呼我的 Bottom Sheet :
BottomSheetExample bottomSheet = new BottomSheetExample();
bottomSheet.showNow(this.getSupportFragmentManager(), "tag");

任何输入都将非常有用。提前致谢!

最佳答案

最后,我找到了解决办法。

1.为了正确使用 Bottom Sheet ,我用的是协调员布局顶部 LinearLayout 具有 Bottom Sheet 行为

2.我已经让radiogroup适合一个nestedscrollview。我希望nestedscrollview的最大高度是固定的。但不幸的是,没有最大高度方法 .因此,LinearLayout 容纳了我们拥有 radio 组的嵌套 ScrollView 。
现在我将线性布局的高度设置为 300dp。布局部分完成

3.现在我们要修复 Bottom Sheet 部分。 从顶部 LinearLayout 获取 BottomSheetBehaviour 实例在 1 中提到。所以现在将 Bottom Sheet 的窥视高度设置为 300dp。这样做是为了将 Bottom Sheet 固定到适合问题中提到的用例的特定高度。

XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<LinearLayout
android:id="@+id/bottom_sheet_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:textStyle="bold"
android:textSize="20sp"
/>

<LinearLayout
android:layout_below="@id/title"
android:id="@+id/scroll_layout"
android:layout_width="match_parent"
android:layout_height="300dp">

<androidx.core.widget.NestedScrollView
android:id="@+id/nested_scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">


<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:layout_marginBottom="10dp" />

</androidx.core.widget.NestedScrollView>

</LinearLayout>

<androidx.appcompat.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="OK"
android:id="@+id/click_btn"
android:layout_below="@id/scroll_layout"/>

</RelativeLayout>

</LinearLayout>

java :
public class BottomSheetExample extends BottomSheetDialogFragment {

@BindView(R.id.title)
TextView title;

@BindView(R.id.click_btn)
Button ok;

@BindView(R.id.nested_scroll_view)
NestedScrollView nestedScrollView;

@BindView(R.id.radiogroup)
RadioGroup radioGroup;

@BindView(R.id.bottom_sheet_layout)
LinearLayout bottomSheetLayout;

private BottomSheetBehavior sheetBehavior;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.bottom_sheet, container, false);
ButterKnife.bind(this, view);
sheetBehavior = BottomSheetBehavior.from(bottomSheetLayout);
sheetBehavior.setPeekHeight(R.dimen.peek_height);//put this ub dimens.xml (300dp)
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 15; i++) {
list.add("" + i);
}
title.setText("Numbers");
RadioGroup rg = radioGroup;
for (int i = 0; i < list.size(); i++) {
RadioButton rbn = new RadioButton(getContext());
rbn.setId(View.generateViewId());
String radioButtonText = list.get(i);
rbn.setText(radioButtonText);
rg.addView(rbn);
}
return view;
}

}

这个解决方案实际上对我有用!欢迎任何改进建议!

关于android - 如何始终在 Bottom Sheet 对话框 fragment 中将按钮与屏幕底部对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58290703/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com