2014-11-17 13 views
5

का उपयोग कर प्री-लॉलीपॉप डिवाइस के साथ काम नहीं करता है। मैं सामग्री appcompatv7 का उपयोग करके टूलबार और मेनू ड्रॉवर के लिए एक साधारण कोड कर रहा हूं। सब कुछ लॉलीपॉप के साथ नेक्सस 5 पर पूरी तरह से काम करता है, लेकिन प्री-लॉलीपॉप (4.1 या 4.4) डिवाइस क्रैश में। समस्या शैली को परिभाषित करने में समस्या आती है। मैंने अपना कोड डाला अगर कोई मुझे बता सके कि गलती कहां है।टूलबार एपकोपेट v7

यह मेरा मुख्य गतिविधि है:

import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.widget.Toolbar; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class Hello extends ActionBarActivity { 

    private ActionBarDrawerToggle toggle; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_hello); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     toggle = new ActionBarDrawerToggle(
       this, 
       drawerLayout, 
       R.string.navigation_drawer_open, 
       R.string.navigation_drawer_close); 
     toggle.setDrawerIndicatorEnabled(true); 
     drawerLayout.setDrawerListener(toggle); 

     ListView lv_navigation_drawer = (ListView) findViewById(R.id.lv_navigation_drawer); 
     lv_navigation_drawer.setAdapter(new ArrayAdapter<String>(
       this, 
       android.R.layout.simple_list_item_1, 
       new String[] {"Screen 1", "Screen 2", "Screen 3"})); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (toggle.onOptionsItemSelected(item)) 
      return true; 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     toggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     toggle.onConfigurationChanged(newConfig); 
    } 
} 

मुख्य लेआउट: बस Theme.AppCompat.Light.NoActionBar बढ़ा कर

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     theme="@style/ThemeOverlay.AppCompat.ActionBar" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" /> 

    <android.support.v4.widget.DrawerLayout 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <FrameLayout 
      android:id="@+id/container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

     <ListView 
      android:id="@+id/lv_navigation_drawer" 
      android:layout_width="240dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:background="@android:color/white" /> 
    </android.support.v4.widget.DrawerLayout> 

</LinearLayout> 

शैली (मैं है कोई शैली मान-V21 के लिए परिभाषित)

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 

    </style> 
</resources> 

यह सब डिवाइस लॉलीपॉप और प्री-लो पर सही ढंग से काम करता है llipop। समस्या है जब उपकरण पट्टी और स्थिति पट्टी

मैं मूल्यों में यह परिवर्तन करने के रंग/शैलियों

<resources> 
    <style name="AppTheme" parent="Base.Theme.AppCompat"/> 

    <style name="AppTheme.Base" parent="Theme.AppCompat"> 
     <item name="colorPrimary">#2ecc71</item> 
     <item name="colorPrimaryDark">#27ae60</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="windowActionBar">false</item> 
     <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
    </style> 

    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
     <item name="spinBars">true</item> 
     <item name="color">@android:color/white</item> 
    </style> 

    <color name="primary">#457C50</color> 
    <color name="primaryDarker">#580C0C</color> 
</resources> 

अनुकूलित करने के लिए चाहता हूँ और मैं मान-V21

लिए शैली को जोड़ने की बात आती है
<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <style name="AppTheme" parent="AppTheme.Base"> 
     <item name="android:windowContentTransitions">true</item> 
     <item name="android:windowAllowEnterTransitionOverlap">true</item> 
     <item name="android:windowAllowReturnTransitionOverlap">true</item> 
     <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> 
     <item name="android:windowSharedElementExitTransition">@android:transition/move</item> 
    </style> 

</resources> 

जैसा कि पहले कहा गया था, यह नेक्सस 5 पर ठीक काम करता है लेकिन हालांकि यूआई सही रंगों के साथ आता है, मैं सूची दृश्य को मेनू ड्रॉवर (I समझ में नहीं आता क्यों .. .. । लेकिन "प्री-लॉलीपॉप" डिवाइस दुर्घटनाग्रस्त हो जाता है।

... java.lang.IllegalStateException: त्रुटि मुझे फेंकता यह है इस गतिविधि पहले से ही एक कार्रवाई बार खिड़की सजावट के द्वारा आपूर्ति की है। विंडो.FEATURE_ACTION_BAR का अनुरोध न करें और इसके बजाय टूलबार का उपयोग करने के लिए अपने थीम में विंडो एक्शनबार को गलत पर सेट करें।

मैं इस त्रुटि के बारे में जानकारी का एक बहुत खोज की है और कोशिश की कई विकल्प: आइटम windowActionBar शैली के भीतर है "गलत" मुख्य गतिविधि में "टूलबार" को "android.support.v7.widget.Toolbar बन गए हैं टूलबार "लेकिन सफलता के बिना ... मैंने पहले से दिए गए उदाहरणों की भी खोज की है, लेकिन मेरे लिए काम नहीं कर रहे हैं मैं ग्रहण का उपयोग कर रहा हूं, मैनिफ़ेस्ट 21 का लक्ष्य और न्यूनतम 16 है, मैंने एसडीके और एडीटी भी अपडेट किया है ..

क्या कोई डिवाइस प्री-लॉलीपॉप पर सही तरीके से काम करने में मदद कर सकता है?

+0

उत्तर आपके लिए काम करता है? – Sauron

उत्तर

14

इसके बजाय Theme.AppCompat.Light.NoActionBar का उपयोग करें।

setSupportActionBar पर कॉल करने के लिए आपके पास कोई अन्य एक्शन बार नहीं हो सकता है। यही कारण है कि आप

इस गतिविधि पहले से ही कार्रवाई बार खिड़की सजावट

सुनिश्चित करें कि आपके विषय उपकरण पट्टी का उपयोग करने के ActionBar नहीं है बनाओ द्वारा आपूर्ति की है क्यों मिलता है।

+0

काम करना! धन्यवाद दोस्तों;) – Sergio76

+0

महान काम दोस्त .. –

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