BottomSheetDialogFragment анимирует программные клавиши Android (назад, домой) - PullRequest
0 голосов
/ 15 мая 2019

Я использую BottomSheetDialogFragment в своем проекте и заметил, что BottomSheetDialog анимируется по программным клавишам, что не очень хорошо выглядит (см. Рис. 1) .
Однако при перетаскивании диалогового окна вверх ианимация не перекрывает программные клавиши (рис. 2)
Есть ли способ избежать этого перекрытия при показе / отклонении?

Я настроил минимальный проект Android дляпротестируйте и установите «bottom_sheet_slide_duration» на 500, чтобы сделать проблему более заметной.Код довольно прост:

Активность:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity_activity);
    findViewById(R.id.container).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            (new DialogFragment()).show(getSupportFragmentManager(), null);
        }
    });
}}

Фрагмент:

public class DialogFragment extends BottomSheetDialogFragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.item, container, false);
}}

Я не понимаю, почему это поведение по умолчанию ... У меня болят глазаесли я увижу это :)

1 Ответ

0 голосов
/ 15 мая 2019

Вместо этого вы можете добавить фрагмент в макет контейнера действий, выровняв его по родительскому дну, и получите желаемый эффект.

Вот рабочий код Snippet:

Основная деятельность:

 boolean fragVisible = false;
    private DialogFragment newFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);


        findViewById(R.id.container).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (fragVisible) {
                    FragmentManager fragmentManager = getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.setCustomAnimations(R.anim.bottom_to_top, 0);
                    fragmentTransaction.remove(newFragment);
                    fragmentTransaction.commit();
                    fragVisible = false;
                } else {
                    newFragment = new DialogFragment();
                    FragmentManager fragmentManager = getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.setCustomAnimations(R.anim.top_to_bottom, 0);
                    fragmentTransaction.replace(R.id.frag_container, newFragment, "h");
                    fragmentTransaction.commit();
                    fragVisible = true;
                }
            }
        });

    }

activity_test.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.jawadzeb2.socketlibrary.NativeActivityTest">


    <FrameLayout
        android:id="@+id/frag_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />


</RelativeLayout>
...