返回

简洁,优雅,让日记触手可及

Android

今天刚进入主页面,显示的是“今天,你什么都没写下...”这个伪日记。其实只要是某一天没有写日记的话,界面最上面显示的就是这个,当我们写了日记之后,这个伪日记便会消失,讲道理一开始实现这个还真花了我不少心思,本来的思路是将这个伪日记作为 RecyclerView 的第一个 Item。

这样可以实现一个永远显示在最上层的标题栏,不会被挤掉或抢占位置,但有几点好处却很难实现:

  1. 写第一条日记时会无法点击,因为焦点一直都在伪日记上。
  2. 当日记条数多的时候,伪日记会挡住第一个日记条目的一行内容。
  3. 伪日记显示内容的高度会影响整体界面的布局,影响体验。

于是后来我决定使用 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 的设计思路挺有意思,简洁优雅,没有多余的修饰,但又很实用,值得学习。