搜尋此網誌

2013-11-22

當View沒有對映的method可以設定屬性時...



想在程式裡建立一個EditText, 並設定cursorDrawable, 但我們new EditText所取得的instance裡並沒有對應可以set CursorDrawablemethod, 而只在xml可以設定android:textCursorDrawable屬性, 這時我們就可以用這種解決方法.

AttributeSet editTextAttributeSet = null;
int res = context.getResources().getIdentifier("cust_edittext", "layout", context.getPackageName());
XmlPullParser parser = context.getResources().getXml(res);
int state=0;
do {
    state = parser.next();
    if (state == XmlPullParser.START_TAG) {
        if (parser.getName().equals("EditText")) {
            editTextAttributeSet = Xml.asAttributeSet(parser);
            break;
        }
    }
} while(state != XmlPullParser.END_DOCUMENT);


然後要使用時只要代入AttributeSet就可以了
EditText edittext = new EditText(context, editTextAttributeSet);

上面紅字部分有個cust_edittext其實就是一個EditTextxml, 例如在layout/cust_edittext.xml
這樣我們就可以設定CursorDrawable
<?xml version="1.0" encoding="utf-8"?>
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textCursorDrawable="@null"
        android:textColor="#ff000000">       
</EditText>

2013-11-01

Strong Reference and Weak Reference

在 Java 中關於Reference,一般說來分為四種:Strong、Soft、Weak 和 Phantom 。

為什麼 Java 需要四種不同的 Reference 呢?

因為 Java 不像 C/C++ 需要設計師自行管控和釋放記憶體,而是透過 Garbage collector 檢查記憶體 (Heap) 中的 Object reference count / reachability 來決定是否要回收該記憶體以供他處使用, 而這垃圾回收機制(Garbage Collection) 需要知道那些記憶體該被回收、其回收的優先順序為何,所以 Java 提供了四種不同的 reference type 以便進行演算來得知。

Garbage collector 回收記憶體 (Heap) 時,將依據不同的 reference type 的強弱來決定其順序,以下是一個由強至弱的排序:

Strong Reference > Soft Reference > Weak Reference > Phantom Reference