2014-04-24 106 views
3

我在佈局中使用了一個微調器。 我用這個代碼:微調文字顏色是白色的?

​​

現在,當我給它分配的適配器我使用此代碼:

... 
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mcontext, android.R.layout.simple_spinner_item, mylabels); 
// Drop down layout style 
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
Spinner myspinner = (Spinner) V.findViewById(R.id.spin_prod_promo); 
// attaching data adapter to spinner 
myspinner.setAdapter(dataAdapter); 
... 

我的問題是,微調的文字顏色爲白色...因此不可讀,而且我不會在代碼中將它設置爲這種方式。

「有趣的事情」是我在不同的活動中使用完全相同的代碼,並且微調器具有正確的顏色。 區別在於,在這個(BAD)情況下,微調器位於一個片段中。

  • 因此,如果微調是在一個活動 - 顏色搞砸

我試圖用一個自定義佈局的項目 - 如果微調位於片段的顏色都很好

  • 微調,但我成功的只是讓紡紗工看起來無法使用。另外,下拉菜單中總是有一個背景顏色的項目(只有當我點擊它時才能看到,然後只要點擊就可以看到內容) 這裏發生了什麼? 我該如何解決這個問題?

    有什麼我可以做的,將微調的顏色設置爲主題的顏色? 片段中的所有其他部件有正常的顏色...

    謝謝

  • +1

    什麼是'mcontext'?如果它不是承載片段的活動,那可能是您的問題。 – CommonsWare

    +0

    上下文mcontext = getActivity()。getApplicationContext();這是錯的嗎? – user1137313

    +0

    當我將項目的佈局更改爲自定義佈局並將TextView的顏色設置爲黑色時,它看起來有效。但是這很煩人......爲什麼會這樣呢? (所以我的問題得到解決) – user1137313

    回答

    22

    上下文mcontext = getActivity()。getApplicationContext();這是錯的嗎?

    是的,這是錯誤的。只有當您知道時,才使用getApplicationContext()爲什麼您正在使用getApplicationContext()。特別是,從不使用getApplicationContext()作爲膨脹佈局,因爲it will screw things up by not using the right theme

    我會完全刪除mcontext,將其替換爲getActivity(),在需要的片段中。

    +0

    謝謝,我已經發現你是正確的第一位:)這就是爲什麼我放置第二個「答案」。再次感謝您的專業知識,非常歡迎。即使我的第一個解決方案也行得通...它不乾淨,這就是我接受你的原因。這是更好的方式 – user1137313

    +0

    每天我都會學到新的東西。我喜歡這個。謝謝(我通過示例和代碼學習Android(不是最好的方式)_所以你的解釋非常有幫助) – user1137313

    +0

    來自android sdk的奇怪行爲,但來自我的100萬upvotes,這個問題正在讓我大開眼界。 –

    2

    我找到了解決辦法。它是爲Spinner的項目聲明一個自定義佈局,並使用它來代替默認的佈局。在自定義佈局中,我將TextView文本的顏色設置爲黑色。 它以這種方式工作。 因此,代碼:(promospin_row.xml)

    <?xml version="1.0" encoding="utf-8"?> 
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
    
    
        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="New Text" 
         android:textColor="#000000" 
         android:id="@+id/tv_promo_txt" 
         android:paddingLeft="5dp" 
         android:paddingTop="5dp" /> 
    </LinearLayout> 
    

    和java代碼:

    // Creating adapter for spinner 
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mcontext, R.layout.promospin_row, R.id.tv_promo_txt, mylabels); 
        // Drop down layout style 
        dataAdapter.setDropDownViewResource(R.layout.promospin_row); 
        Spinner myspinner = (Spinner) V.findViewById(R.id.spin_prod_promo); 
        // attaching data adapter to spinner 
        myspinner.setAdapter(dataAdapter); 
    

    這樣,項文本變成黑色。並沒有其他異常情況。 謝謝@CommonsWare爲您的時間

    +0

    上面的「mylabels」可以使用:final String [] mylabels = mContext.getResources()。getStringArray(R.array.one_list); –

    0

    另一個解決方案是確屬自用的GetApplication()的情況下,而不是

    getActivity().getApplicationContext();

    這樣我可以使用默認的項目佈局,而不必聲明一個新的自定義佈局。

    所以我猜,CommonsWare是正確的。這是吹起來的背景。 請@Commonsware,讓你的評論一個答案,所以我可以接受它,因爲你應得的。

    編輯

    我在寫這個,而你寫你的答案,這就是爲什麼它似乎我沒有看到你的答案 :)

    1

    只需使用getApplicationContext的空,而不是()。 它必須工作。 我試過了,它的工作。 在應用程序中,你可以使用空,而不是mcontext

    4

    只是嘗試這個..

    String[]array={"A","B","C","D"}; 
    ArrayAdapter<String> adapter=new ArrayAdapter<String> (**YourClassName.this**,android.R.layout.simple_list_item_checked,array); 
    listView.setAdapter(adapter); 
    

    注意YourClassName.this是當前類name.This代碼爲我工作。

    1

    我也有這個問題。這不是一個解決方案,但是對於其他人嘗試解決上述解決方案無法解決的潛在解決方法。

    將選擇微調控制器時出現的彈出框的背景顏色設置爲與白色文本顏色對比的東西。

    <Spinner 
        ... 
        android:popupBackground="@color/layout_background" 
        ... /> 
    

    在這裏,我已經定義layout_background在位於我的src/main/JAVA/RES一個單獨的文件名爲colors.xml一個深灰色#565656 /值的文件夾。

    +0

    UPVOTE,除非這不回答OP問題,但毫無疑問,這可以解決他的問題。 –

    0

    只需使用getBaseContext()而不是mcontext。 爲我工作。我在AutoCompleteTextView的onItemClick函數內部設置了微調器的適配器,並且在使用getBaseContext()之前具有相同的文本顏色問題。希望這個答案有幫助。