编辑:有关完整代码,请参阅Using the Master/Detail template in ViewPager Fragments (download link)
我有一个工具栏和一个recyclerView
。当布局首次膨胀时,recyclerView
的最后一项不在屏幕的可滚动区域内,因此不可见。旋转后出现项目。很明显,工具栏正在将recyclerView
推到屏幕边界之外。如果我使用工具栏的高度在recyclerView
的底部添加填充,则问题将得到解决,但仅限于布局的初始膨胀。旋转后,我在屏幕底部留下了一个间隙。我正在使用sdk 23。
可能的解决方法是在布局第一次充气后以编程方式删除填充。我想我可以使用:
onCreateView(){ if (onSaveInstanceState != null) removePadding();}
但是,我宁愿不必做一个狡猾的解决方法。
我的应用程序基本上与Android Studio中提供的Master / Detail-flow模板完全相同,只是我使用片段和单个Activity。模板中没有这样的问题。
有什么想法吗?
fragment_item_list.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<include layout="@layout/item_list" />
</FrameLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
item_list.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_list"
android:name="com.idragonit.scrolltabs.ItemListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="LinearLayoutManager"
tools:context="com.idragonit.scrolltabs.ItemListActivity"
tools:listitem="@layout/item_list_content" />
item_list_content.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem" />
</LinearLayout>
ItemListFragment.java的片段
Toolbar toolbar = (Toolbar) root.findViewById(R.id.toolbar);
toolbar.setTitle("List");
答案 0 :(得分:1)
我补充说:
android:layout_gravity="fill_vertical"
android:layout_marginBottom="?attr/actionBarSize"
到item_list.xml。问题依然存在。第一次布局膨胀时,它会按预期显示底部元素。旋转到横向并返回到纵向后,它会在屏幕底部留下一个与动作栏大小相同的边距。
在Android Studio中可用的Master / Detail-flow模板中不会发生此问题,而item_list.xml,item_list_twopane.xml和activity_item_list的代码与item_list.xml,land / item_list中使用的代码完全相同。我项目中的xml和fragment_item_list.xml。然而,如附图所示,AppBar的预览显示了Android模板中的灵活空间,但不显示我的代码。
编辑:当我点击模板中“?attr / actionBarSize”的引用时,它会导航到android SDK的values.xml中的另一行,该行以<declare-styleable name="AppCompatTheme">
开头。我的应用中的同一行代码引用了以<declare-styleable name="Theme">
开头的不同行。
答案 1 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.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"
android:background="@color/white"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView
android:id="@+id/item_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:scrollbars="vertical" />
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom|right"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:src="@drawable/ic_add"
app:backgroundTint="@color/colorPrimary" />
</android.support.design.widget.CoordinatorLayout>