Настройка Диалога в нижнем листе
5 ответов
Вы можете создать фрагмент диалога нижнего листа следующим образом:
Сначала создайте файл XML, как указано ниже, как
fragment_bottomsheet
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/_150sdp"
android:layout_margin="@dimen/_20sdp"
android:background="@drawable/round_corner_white3"
android:orientation="vertical">
<TextView
android:id="@+id/tv_select_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/white"
android:background="@drawable/round_corner_gray"
android:layout_margin="@dimen/_10sdp"
android:layout_alignParentBottom="true"
android:paddingBottom="@dimen/_10sdp"
android:paddingTop="@dimen/_10sdp"
android:text="Select Address" />
</RelativeLayout>
</RelativeLayout>
Теперь создайте фрагмент нижнего листа с именем
Bottom Sheet Fragment
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetDialogFragment;
import android.view.View;
public class BottomSheetFragment extends BottomSheetDialogFragment {
public static BottomSheetFragment newInstance() {
BottomSheetFragment fragment = new BottomSheetFragment();
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void setupDialog(Dialog dialog, int style) {
View contentView = View.inflate(getContext(), R.layout.fragment_bottomsheet, null);
dialog.setContentView(contentView);
((View) contentView.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent));
}
}
Чтобы вызвать этот фрагмент нижнего листа, вы можете написать так:
BottomSheetFragment bottomSheetDialog = BottomSheetFragment.newInstance();
bottomSheetDialog.show(getSupportFragmentManager(), "Bottom Sheet Dialog Fragment");
Пока я взял только один текстовый вид и прикрепил скриншот, потому что ваша главная задача - получить маржу в нижней части листа. Также таким образом вы можете настроить нижний лист, как вы хотите. Спасибо!
Используйте это в своих стилях. Создайте папку в значениях, называемых стилями, и используйте этот код.
<style name="BottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/BottomSheetStyle</item>
</style>
<style name="BottomSheetStyle" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@android:color/transparent</item>
</style>
Теперь установите его в качестве фона в вашем классе Fragment.
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_bottom_sheet, container, false);
textView = view.findViewById(R.id.textview);
return view;
}
А для круглых углов просто создайте drawable с простой формой и закругленными углами (например, drawable/bottom_sheet_background.xml)
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white" />
<corners android:radius="18dp" />
</shape>
Наконец, не забудьте назначить его корневому элементу макета.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="20dp"
android:background="@drawable/bottom_sheet_background"
android:orientation="vertical">
<TextView
android:id="@+id/easy_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_margin="10dp"
android:background="@drawable/toast_background"
android:gravity="center"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="Select Address"
android:textColor="@color/white" />
</RelativeLayout>
</RelativeLayout>
Use this in your styles. Create a folder in values called styles and use this code.
<style name="BottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/BottomSheetStyle</item>
</style>
<style name="BottomSheetStyle" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@android:color/transparent</item>
</style>
Чтобы вызвать этот фрагмент нижнего листа, вы можете написать, как показано ниже:
BottomSheetDialog BottomSheetDialog = новый BottomSheetDialog(Activity.this, R.style.BottomSheetDialogTheme); BottomSheet.setContentView(R.layout.your_layout); нижнийлист.шоу();
Более стандартная форма принятого ответа (setupDialog
замена):
bottom_sheet.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="20dp"
android:background="@drawable/round_corner_white3"
android:orientation="vertical">
<TextView
android:id="@+id/tv_select_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/white"
android:background="@drawable/round_corner_gray"
android:layout_margin="10dp"
android:layout_alignParentBottom="true"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:text="Select Address" />
</RelativeLayout>
</RelativeLayout>
BottomSheetFragment.java
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetDialogFragment;
import android.view.View;
public class BottomSheetFragment extends BottomSheetDialogFragment {
public static BottomSheetFragment newInstance() {
BottomSheetFragment fragment = new BottomSheetFragment();
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.bottom_sheet, container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((View) view.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent));
//other views ...
}
}
Добавить зависимость
implementation 'com.baoyz.actionsheet:library:1.1.7'
Добавьте этот код в Activity
public void ButtonActionSheet() {
ActionSheet.createBuilder(this, getSupportFragmentManager())
.setCancelButtonTitle("Cancel")
.setOtherButtonTitles("item1", "item2")
.setCancelableOnTouchOutside(true)
.setListener(new ActionSheet.ActionSheetListener() {
@Override
public void onDismiss(ActionSheet actionSheet, boolean isCancel) {
}
@Override
public void onOtherButtonClick(ActionSheet actionSheet, int index) {
if (index == 0) {
myMethod();
} else if (index == 1) {
myMethod2();
}
}
})
.show();
}
Добавьте эту строку в style.xml
<item name="actionSheetStyle">@style/ActionSheetStyleiOS7</item>