我有一個帶單位表的SQLite數據庫。單位表被設置爲僅與兩列:預先設計一個Spinner選項中子字符串的顏色[Android Studio]
create table units (_id INTEGER PRIMARY KEY, desc TEXT)
實施例數據在這個表中的行是:
- _id:4
- 遞減: 「螺旋#5 [2231]」
「[2231]」子字符串很重要,我想將其顏色更改爲中等灰色。 Id也喜歡對desc列中的數據執行此操作,而不是使用java操作它。
所以,我查詢數據:
/**
* Get all unit records for display in spinner
*/
public Cursor getAllUnitRecords(){
String sql = "select * from units order by `desc`";
return db.rawQuery(sql, null);
}
我的微調是這樣的:
<Spinner
android:id="@+id/UnitSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:spinnerMode="dropdown" />
而且我得到的數據,以微調這樣的:
// Prepare unit dropdown
Cursor units = db.getAllUnitRecords();
MatrixCursor unitsMatrixCursor = new MatrixCursor(new String[] { "_id", "desc" });
unitsMatrixCursor.addRow(new Object[] { 0, "" });
MergeCursor unitsMergeCursor = new MergeCursor(new Cursor[] { unitsMatrixCursor, units });
String[] unitsFrom = new String[]{"desc"};
int[] unitsTo = new int[]{android.R.id.text1};
Spinner unitSpinner = (Spinner) findViewById(R.id.UnitSpinner);
SimpleCursorAdapter unitAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_dropdown_item, unitsMergeCursor, unitsFrom, unitsTo, 0);
unitAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
unitSpinner.setAdapter(unitAdapter);
由於我想爲中間灰色的「[2231]」子字符串着色,所以我想我可能能夠更改數據中的desc值基地,所以它看起來像這樣:
"Helix #5 <font color='#6e737e'>[2231]</font>"
我這樣做只是因爲我在搜索互聯網,它似乎可能工作。那麼,這是行不通的,因爲標籤只是輸出,而不是改變顏色。什麼是錯的,我該如何解決?我想如果有必要,我可以開放不同的解決方案,但是這個Android的東西對我來說很難,因爲我不經常使用它,所以我試圖去尋求最簡單的解決方案。
更新#1 ----------------------
所以@MartinMarconcini還跟點我在正確的方向,我複製並將他的colorSpan方法粘貼到我的活動類中進行測試。然後,我查看了堆棧溢出的所有線索,以瞭解如何修改我的微調器文本,然後如何修改SimpleCursorAdapter中的文本。
,我發現這些問題的答案:
- Android, using SimpleCursorAdapter to set colour not just strings
- Changing values from Cursor using SimpleCursorAdapter
這給了我一些想法,所以我試圖與工作:
// Prepare unit dropdown
Cursor units = db.getAllUnitRecords();
MatrixCursor unitsMatrixCursor = new MatrixCursor(new String[] { "_id", "desc" });
unitsMatrixCursor.addRow(new Object[] { 0, "" });
MergeCursor unitsMergeCursor = new MergeCursor(new Cursor[] { unitsMatrixCursor, units });
String[] unitsFrom = new String[]{"desc"};
int[] unitsTo = new int[]{android.R.id.text1};
Spinner unitSpinner = (Spinner) findViewById(R.id.UnitSpinner);
SimpleCursorAdapter unitAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_dropdown_item, unitsMergeCursor, unitsFrom, unitsTo, 0);
unitAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
/* NEW CODE STARTS HERE */
unitAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View aView, Cursor aCursor, int aColumnIndex) {
if (aColumnIndex == 1) {
String desc = aCursor.getString(aColumnIndex);
TextView textView = (TextView) aView;
final Spannable colorized = colorSpan(desc);
textView.setText(TextUtils.isEmpty(colorized) ? desc + "a" : colorized + "b");
return true;
}
return false;
}
});
/* NEW CODE ENDS HERE */
unitSpinner.setAdapter(unitAdapter);
公告如果沒有文本,我添加了字母「a」,如果有的話,我添加了「b」文本。果然,「a」和「b」被添加到我的微調項目中,但沒有顏色變化!所以,我正在嘗試...但仍可以使用一些幫助。這是我所看到的圖像:
[設置TextView跨度在Android中的顏色]可能的重複(https://stackoverflow.com/questions/3282940/set-color-of-textview-span-in-android) –
這個問題與無關TextViews。 –
textView是_irrelevant_,問題是關於「着色字符串」。這是用Spannables完成的。這個問題會引導你。 –