【问题标题】:Android - Two activities with the same bottom barAndroid - 具有相同底栏的两个活动
【发布时间】:2017-08-01 20:46:19
【问题描述】:

我有两个具有相同底栏的活动。 问题是当我从 Activity A 到 Activity B 调用 startActivity 时有一些闪烁并且看起来不那么顺利。 例如,我想要的是一个带有两个片段的容器的 Activity,并且该 Activity 有底栏,所以这不会改变底栏。

我知道 Activity with Fragments 可以帮助我解决这个问题,但在我的项目中更改它太复杂了,所以对我来说这是最后的选择。

我发现了另一种使用 SharedElements 转换的选项,但仅受 api 21 (Lollipop) 支持。

这是我的活动,当我将其更改为活动 B 时,我需要底部的 LinearLayout 保持粘性。

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    您可以设置活动动画:

    startActivity();
    overridePendingTransition(R.anim.hold, R.anim.fade_in);
    

    请参考这个答案:stackoverflow

    【讨论】:

      【解决方案2】:

      您可以删除活动之间的默认转换。 在 yourProject/res/values/styles.xml 下试试这个:

      <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="android:windowAnimationStyle">@null</item>
      </style>
      

      【讨论】:

        【解决方案3】:

        如果您想要相同的实例,则必须使用片段。 如果不是,您可以将 LinearLayout 放到两个布局文件中。 你要哪一个?

        【讨论】:

          【解决方案4】:

          您需要创建一个布局并包含 ex。布局文件夹中的bottombar.xml并创建布局。

           <include layout="@layout/bottombar"/>
          

          如果您不想看到更改延迟,则需要使用片段。

          要管理片段,我建议使用FragNav

          使用这个库管理片段非常容易,删除动画并不能解决您的问题

          【讨论】:

            【解决方案5】:

            我制作了一个包含两个片段的 Activity。 在 Activity 类中,我为 commonBottomSheet 编写了这段代码:-

            BottomSheetBehavior mBottomSheetBehavior = BottomSheetBehavior.from(findViewById(R.id.bottom_pannel_layout));
            mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
            mBottomSheetBehavior.setBottomSheetCallback(mBottomSheetCallback);
            

            在 Co-ordinator 布局中的 Activity xml 文件中,我已将以下布局包括在内:-

            <include layout="@layout/bottom_sheet_pannel"/>
            

            在 CommonBottomSheetFragment 中,您可以创建布局。

            我的bottomSheet的xml文件(bottom_sheet_pannel)是这样的:-

             <?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:id="@+id/bottom_pannel_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:behavior_peekHeight="45dp"
                app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
            
                <ImageView
                    android:id="@+id/grabber_view"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/ic_vector_slider_grabber"
                    android:tint="@color/colorTint" />
            
                <fragment
                    android:id="@+id/rf_common_details_fragment"
                    android:layout_marginTop="@dimen/margin_10"
                    android:name="com.fragment.CommonBottomSheetFragment"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
            </LinearLayout>
            

            你可以用下面的callBack改变bottomSheet的状态:-

             private BottomSheetBehavior.BottomSheetCallback mBottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() {
                @Override
                public void onStateChanged(View bottomSheet, int newState) {
                    // do what you want on state change
                }
            
                @Override
                public void onSlide(View bottomSheet, float slideOffset) {
            
                }
            };
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-19
              • 1970-01-01
              • 2016-03-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-06-30
              相关资源
              最近更新 更多