2012-09-28 10 views
11

मैं "मोड"/"क्लोज़" बटन एक्शन मोड का टेक्स्ट रंग सेट करना चाहता हूं। मैंने यह कोशिश की है:एक्शन मोड क्लोज़ बटन टेक्स्ट कलर

<item name="android:actionModeCloseButtonStyle">@style/ActionModeCloseButton</item> 
.... 
<style name="ActionModeCloseButton" parent="android:style/Widget.Holo.ActionButton.CloseMode"> 
    <item name="android:textColor">@android:color/white</item> 
</style> 

लेकिन इसका कोई प्रभाव नहीं है।

enter image description here

ध्यान दें कि जेबी पर, यह है कि मैं ActionModeCloseButton शैली की मूल नियमित होलो विषय बनाने के काफी है। यह ठीक काम करता है (textColor सेटिंग के बिना भी)।

कोई विचार? धन्यवाद।

उत्तर

6

सबसे पहले, टेक्स्टव्यू "पूर्ण" केवल बड़े उपकरणों पर दिखाई देता है। एंड्रॉइड स्रोत में चेकआउट । तो android:actionModeCloseButtonStyle केवल उस दृश्य पर लागू होता है, न कि छविदृश्य और टेक्स्टव्यू।

सौभाग्य से, एंड्रॉइड इंजीनियरों ने बालदृश्य शैलियों के लिए सार्वजनिक रूप से सुलभ विशेषताओं का उपयोग किया।

  • टेक्स्ट व्यू के पाठ रंग बदलने के लिए android:actionMenuTextColor का उपयोग करें।

    <style name="MyTheme"> 
        <item name="android:actionMenuTextColor">#ff000000</item> 
        <item name="android:actionModeCloseDrawable">@drawable/my_close_drawable</item> 
    </style> 
    

    नीचे layout-large -folder जहां आप देख सकते हैं कि लेआउट का निर्माण होता है में की एक प्रति है:

  • उपयोग android:actionModeCloseDrawable imageView

उदाहरण के drawable बदलने के लिए।

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/action_mode_close_button" 
     android:focusable="true" 
     android:clickable="true" 
     android:paddingStart="8dip" 
     style="?android:attr/actionModeCloseButtonStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_marginEnd="16dip"> 
    <ImageView android:layout_width="48dip" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:scaleType="center" 
       android:src="?android:attr/actionModeCloseDrawable" /> 
    <TextView android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:layout_marginStart="4dip" 
       android:layout_marginEnd="16dip" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:textColor="?android:attr/actionMenuTextColor" 
       android:textSize="12sp" 
       android:textAllCaps="true" 
       android:text="@string/action_mode_done" /> 
</LinearLayout> 
+0

कार्रवाई के साथ समस्यामेनूक्स्टकॉलर यह है कि यह "सामान्य" एक्शन बार आइटम के लिए रंग भी बदल देगा। – sergio91pt

+0

यह काम नहीं करता है क्योंकि सही आइटम बदलने के लिए 'abs__action_mode_close_item.xml' है और' abs__action_menu_item_layout.xml' नहीं है। समस्या यह है कि 'abs__action_mode_close_item.xml' टेक्स्ट रंग प्रदान नहीं करता है :(आप इसे एबीएस के लिए आसानी से ठीक कर सकते हैं, लेकिन यह केवल 4.0 से पहले एंड्रॉइड के लिए काम कर रहा है। यह कहने के लिए खेद है ... – Trinimon

0

कार्रवाई मोड बंद करें बटन पाठ दृश्य के लिए एक रंग विशेषता प्रदान नहीं करता है के लिए लेआउट के बाद से, वहाँ एक कस्टम विषय में इस रंग सेट करने के लिए कोई रास्ता नहीं है। इसके बजाय केवल ay मैंने पाया मेरी व्युत्पन्न ActionMode वर्ग के onPrepareActionMode() विधि में पाठ का रंग अधिलेखित करने के लिए किया गया था:

@Override 
public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
    new AsyncTask<Void, Void, Void>() { 
     @Override 
     protected Void doInBackground(Void... none) { 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void none) { 
      if (activity != null) { 
       LinearLayout layout = (LinearLayout) activity 
          .findViewById(R.id.abs__action_mode_close_button); 

       if (layout == null) { 
        int id = Resources.getSystem().getIdentifier(
             "action_mode_close_button", "id", "android"); 
        layout = (LinearLayout) activity.findViewById(id); 
       } 

       if (layout != null && layout.getChildCount() > 1) { 
        TextView label = (TextView) layout.getChildAt(1); 
        if (label != null) label.setTextColor(Color.RED); 
       } 
      } 
     } 
    }.execute(); 

    return false; 
} 

दो उपकरणों के पहले और बाद के Android 4.0 के साथ काम किया।

+0

सावधान, अगर एंड्रॉइड का संस्करण नहीं है स्थिति 1 पर टेक्स्टव्यू नहीं है, आपका कोड उस डिवाइस पर उड़ाएगा। मैं एक उदाहरण करता हूं अगर इसे कास्ट करने से पहले उस पर जांच करें। – MinceMan

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^