【问题标题】:BottomSheetDialogFragment animates over android softkeys (back, home)BottomSheetDialogFragment 通过 android 软键(返回、主页)进行动画处理
【发布时间】:2019-05-15 17:25:08
【问题描述】:

我在我的项目中使用了 BottomSheetDialogFragment,并注意到 BottomSheetDialog 正在对软键进行动画处理,这看起来不太好(See Fig 1)
但是,当上下拖动对话框时,动画不会与软键重叠(Fig. 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);
}}

我不明白为什么这是默认行为......如果我看到这个,我的眼睛会受伤:)

【问题讨论】:

  • 你能解决这个问题吗?

标签: android android-fragments android-animation android-dialogfragment android-dialog


【解决方案1】:

您可以改为将片段添加到活动容器布局中,对齐父底部会给您想要的效果。

这是工作代码片段:

主要活动:

 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2023-04-01
    • 2019-09-10
    • 1970-01-01
    相关资源
    最近更新 更多