我試圖適應隱蔽策略/示出了從很好地解釋和大條工具欄(或任何視覺元素): http://mzgreen.github.io/2015/02/15/How-to-hideshow-Toolbar-when-list-is-scroling%28part1%29/隱藏工具欄
但在我的情況下,我正在使用片段來保存recycleview而不是活動。我的問題是沒有應用填充,因此第一個元素位於工具欄下方,而且我還有另一個奇怪的行爲,因爲工具欄也位於狀態欄下方。我不知道這裏發生了什麼事。 以下是我的「移動作品」:
BasicActivity.java:基於上一篇文章中給出的一個,但將刪除recycleview部分,就像將在Fragment部分上一樣。此外,它暴露的顯示和隱藏方法允許片段訪問它:
public class BasicActivity extends ActionBarActivity {
private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basic);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container,new RecycleFragment())
.commit();
overridePendingTransition(0, 0);
initToolbar();
}
private void initToolbar() {
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
setTitle(getString(R.string.app_name));
mToolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
}
public void hideViews() {
mToolbar.animate().translationY(-mToolbar.getHeight()).setInterpolator(new AccelerateInterpolator(2));
}
public void showViews() {
mToolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2));
}
}
我activiy_basic.xml如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<include layout="@layout/toolbar_actionbar" />
</FrameLayout>
佈局toolbar_actionbar.xml
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:clipToPadding="false"/>
片段RecycleFragment.java: 公共類RecycleFragment擴展片段{
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_recycler, container, false);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initRecyclerView(view);
}
private void initRecyclerView(View view) {
RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(createItemList());
recyclerView.setAdapter(recyclerAdapter);
recyclerView.setOnScrollListener(new HidingScrollListener() {
@Override
public void onHide() {
((BasicActivity)getActivity()).hideViews();
}
@Override
public void onShow() {
((BasicActivity)getActivity()).showViews();
}
});
}
private List<String> createItemList() {
List<String> itemList = new ArrayList<>();
for(int i=0;i<20;i++) {
itemList.add("Item "+i);
}
return itemList;
}
} 而碎片的佈局僅僅是一個recyclerview fragment_recycler.xml:
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
的適配器和回收商的viewholder是一樣的文章,它們不影響行爲。
代碼有什麼問題?
更新: MichałZ.下面指出。少了什麼是對Recyclerview視圖 的paddingTop和clipptoPadding所以最終的XML應該是:
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize"
android:clipToPadding="false"/>
,解決狀態欄重疊的問題,它需要添加一個「fitsystemwindows」 =「真」的元素活動佈局。因此,它必須是以下幾點:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<FrameLayout android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<include layout="@layout/toolbar_actionbar" />
</FrameLayout>
UPDATE2 的fitSystemWindows只需要當主題設置狀態欄半透明
太棒了!這解決了第一行的問題。現在剩下的唯一問題是狀態欄與工具欄重疊。 – gpulido 2015-03-03 06:44:52
添加fitsystemwindows = true解決了狀態欄填充問題 – gpulido 2015-03-03 06:56:47
您是否試圖從'toolbar_actionbar.xml'中刪除'android:clipToPadding =「false」'而不是添加'fitSystemWindows =「true」'? – 2015-03-03 08:00:14