自制Android RSS閱讀器
這個問題困擾我挺久了,android端找不到一款好的RSS閱讀器。我就想簡簡單單開啟自己訂閱的RSS每天看一看,沒有註冊,沒有廣告,就簡簡單單的。終於抽了兩天時間出來寫了個BETA。
記錄一下開發過程中遇到的一些問題。
1. RecyclerView處在ConstraintLayout中出現的檢視問題
檢視的問題如圖。
在adapter
的onCreateViewHolder()
方法中,就是按照
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rss_list_item, parent, false);
這樣來寫的。子檢視的高度也都是確定的。如果這麼簡單就好了。問題照舊。
嘗試了很久,結果癥結出在ConstraintLayout
和RecyclerView
一起使用上。
上圖中是一個fragment,有問題的fragment的根佈局如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/fragment_bg"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rssRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
因為其他很多地方我都排查過了,所以對這個佈局心生懷疑。
我就把ConstraintLayout
改成了FrameLayout
,修改後的佈局如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/fragment_bg"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rssRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
問題解決。
2. 對RSS的XML文件的解析
讀取RSS中的內容其實就是解析一下XML文件。
RSS的格式有個大概的標準,大致就是<channel>
或者<rss>
開頭,然後是最外層的<title>, <link>, <description>
的內容;緊接著就是<item>
,代表每個子條目;每個<item>
標籤中也有相應的<title>, <link>, <description>
節點。
比較了feed.yeeyan.org/select
,zhihu.com/rss
,http://www.read.org.cn/feed
以及feed.androidauthority.com
四個RSS,發現有三個問題:
<link>
標籤的內容,可能包含在<link>
的屬性中,如:<link href="http://...">
<description>
標籤有時候又叫<subtitle>
<item>
標籤有時候又叫<entry>
因此在解析的時候,將這三個問題考慮進去,大部分的RSS應該都能解析了。
簡單的應用,使用sqlite作為本地儲存,如果重複新增已有的RSS,就相當於重新整理RSS的內容。
目前還只有簡單的新增RSS,瀏覽其內容的功能。
陸續還會抽空把重新整理,進度條和 RSS補全庫等功能加上。
程式碼希望對大家有用。有需要改進的地方,可以郵件我或者ISSUE。
上個截圖: