搜尋此網誌

2018年9月29日 星期六

【Note】2018重灌電腦 之 瀏覽器 擴充套件(Extensions)安裝紀錄


最近需要重灌電腦,順便紀錄一下,( 先前有分享過【工具】附加元件  ,在那遙遠的2013年),對我來說必裝、必下載的瀏覽器附加元件還有哪些,或多出哪些。


首先,安裝擴充套件的條件必須要有

  • 寧願裝單個功能專一的套件,不需要單個功能全面的套件。
理由:單個專一功能套件,可節省資源(包含cpu、ram耗能)、效能
  • 盡量不用中國製的產品,為了資安考量。


以前就是FireFox的愛好者:耗用資源少,可比擬chrome一樣多的擴充套件。

直到某次重大更新,一堆擴充元件瞬間無法使用,這個還好就,就當作升級陣痛過度時期。

暫時跳回chrome的懷抱的原因還有一個如下:

多開分頁時,chrome好好的沒事,但是在firefox卻當機需重啟無限循環。
例如:瀏覽新聞主流網站時,有時候標題寫的跟內容農場沒兩樣,需要點開連結才能看內容描述,所以一次需要預開10~20個分頁。(解決辦法:讓 Firefox 連線數變多 (然後加快速度))

不過不的不說,在瀏覽單個網頁頁面時,FireFox有明顯感覺到比chrome還要快和滑順。

基本工具類

擋惡意廣告必裝

可節省高達95%的記憶體,將所有分頁合併成臨時書籤。

滑鼠手勢,唯一缺點每兩周要重新註冊一次,否則要花摳摳買斷。

Gestures for Google Chrome™
同樣是滑鼠手勢,但似乎Chrome 線上應用程式商店連結不見了。

繁體簡體中文轉換工具

按滑鼠右鍵,可直接使用已自行設定的搜尋引擎。


可查看網頁的Country Flag. Website Whois - how many Visitors are visiting, Reputation Reviews, Antivirus Check, Alexa, Incognito

新聞小幫手
協助判別含有誤導資訊的新聞。

鄉民必備

連結至ptt,可設定滑鼠或鍵盤瀏覽、黑名單。

Qollie - 求職天眼通
據說是鄉民開發出來,找工作必備,但似乎Chrome 線上應用程式商店連結不見了。

八卦插IP
在瀏覽網頁板ptt時,可自動偵測發文者ip來自哪個國家?

鄉民查水表
在瀏覽網頁板ptt時,可偵測鄉民最近po文,但似乎Chrome 線上應用程式商店連結不見了。

備而不用

截取瀏覽畫面 陽春板。


截取瀏覽畫面  還可錄製畫面動作。

可以將網頁保存下來  同步至手機離線閱讀。
不過之前遇到,純文字網頁:離線觀看網頁版面都蠻正常的;但是圖文一多,整個離線觀看模式,就版面就切的有點異常到讀不下去。

開網頁時可自動載入自行編輯的Script,不過蠻耗效能,通常都是要用時才打開,不用時,就設定停用。

擋內容農場必裝,不過多看幾次也就知道哪些網頁是內容農場。

Unblock Youku
偶而瀏覽China網頁需要開啟,平常就關閉。

Linkclump
查資料必備,一次開啟多個連結。

2018年5月3日 星期四

【Android】java.lang.IllegalStateException: Underflow in restore - more restores than saves

ref:
https://stackoverflow.com/a/41391185

  • Downgrade targetSdkVersion to 22 you can run it: meaning it does not crash! but I really don'trecommend that.
  • Call canvas.save(); before every restore() is another suggestion from your link given that you can try

2018年4月15日 星期日

【Android】RecyclerView 進階文章 - ItemDecoration(範例 分隔線)


下圖片 code來自https://github.com/thinkSky1206。

為RecyclerView添加分隔線

主頁面layout布局很基本的。
<?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:background="@color/md_grey_300"> //設定灰色背景
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
宣告class去繼承RecyclerView.ItemDecoration,改寫getItemOffsets方法
public class SimplePaddingDecoration extends RecyclerView.ItemDecoration {
private int dividerHeight;
public SimplePaddingDecoration(Context context) {
Resource res = context.getResources();
dividerHeight = res.getDimensionPixelSize(R.dimen.divider_height);
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.bottom = dividerHeight; //為itemView添加長度為dividerHeight的間隔(留白)
}
}
使用自定義的itemDecoration
recyclerView.addItemDecoration(new SimplePaddingDecoration(this));
結果:




這樣就完成一個簡單的帶有分隔線的view。
缺點:
分隔線的顏色是因為背景色,若我們想分隔線和背景為不同顏色,此方法不可行。

public class SimpleDividerDecoration extends RecyclerView.ItemDecoration {
private int dividerHeight; //分隔線高度
private Paint dividerPaint; //繪製分隔線的paint
public SimpleDividerDecoration(Context context) {
Resource res = context.getResources();
dividerPaint = new Paint();
dividerPaint.setColor(context.getResources().getColor(R.color.colorAccent));
dividerHeight = res.getDimensionPixelSize(R.dimen.divider_height);
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.bottom = dividerHeight;
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
/**
* childCount : 取得recycleView所擁有的itemView總數
* left : RecyclerView 的左邊界加上 paddingLeft距離 後的坐標位置
* right : RecyclerView 的右邊界減去 paddingRight 後的坐標位置
*/
int childCount = parent.getChildCount();
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();
//
for (int i = 0; i < childCount - 1; i++) {
View view = parent.getChildAt(i);
float top = view.getBottom();
float bottom = view.getBottom() + dividerHeight;
c.drawRect(left, top, right, bottom, dividerPaint);
}
}
}
結果: