返回
简洁,优雅,让日记触手可及
Android
2023-11-02 01:20:20
今天刚进入主页面,显示的是“今天,你什么都没写下...”这个伪日记。其实只要是某一天没有写日记的话,界面最上面显示的就是这个,当我们写了日记之后,这个伪日记便会消失,讲道理一开始实现这个还真花了我不少心思,本来的思路是将这个伪日记作为 RecyclerView 的第一个 Item。
这样可以实现一个永远显示在最上层的标题栏,不会被挤掉或抢占位置,但有几点好处却很难实现:
- 写第一条日记时会无法点击,因为焦点一直都在伪日记上。
- 当日记条数多的时候,伪日记会挡住第一个日记条目的一行内容。
- 伪日记显示内容的高度会影响整体界面的布局,影响体验。
于是后来我决定使用 RelativeLayout 来实现,这样其实也挺方便的,将伪日记作为第一个 View 加入,然后设置它处于最上层(app:layout_behavior="@string/appbar_scrolling_view_behavior"
),这样就可以实现无论 RecyclerView 滑动到哪个位置,伪日记都可以一直保持在顶部了。
但实现起来也挺有意思,还需要在 MainActivity 中添加以下内容:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// 将偽日記隱藏
TextView textView = findViewById(R.id.tv_pseudo_diary);
textView.setVisibility(View.GONE);
// 監聽列表滾動
RecyclerView recyclerView = findViewById(R.id.rv_diary_list);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// 當列表滑動到頂部,顯示偽日記
if (!recyclerView.canScrollVertically(-1)) {
textView.setVisibility(View.VISIBLE);
} else {
textView.setVisibility(View.GONE);
}
}
});
}
这样就完美解决了伪日记显示的问题,该显示的时候显示,该隐藏的时候隐藏,而且不会影响界面整体布局,也解决了伪日记无法点击的问题。
总的来说,这个日记 APP 的设计思路挺有意思,简洁优雅,没有多余的修饰,但又很实用,值得学习。