2015-07-27 3 views
0

Я хотел бы добавить значок в свой ActionBar, но я не могу заставить ActionBar отображать значки, определенные в файле меню. Я попытался изменить Activity на ActionBarActivity, но, если я это сделаю, приложение выйдет из строя. Также я попытался изменить тему на Theme.AppCompat, но это не сработало. Вот мой код:Значки Android ActionBar отсутствуют

public class MainActivity extends Activity { 


private DrawerLayout drawerLayout; 
private ListView drawerList; 
private ActionBarDrawerToggle drawerToggle; 

private CharSequence activityTitle; 
private CharSequence itemTitle; 
private String[] tagTitles; 




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


    itemTitle = activityTitle = getTitle(); 
    tagTitles = getResources().getStringArray(R.array.nav_options); 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawerList = (ListView) findViewById(R.id.left_drawer); 

    View header = getLayoutInflater().inflate(R.layout.drawer_cabecera, null); 
    drawerList.addHeaderView(header); 


    drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

    ArrayList<item_object> items = new ArrayList<item_object>(); 
    items.add(new item_object(tagTitles[1],R.drawable.ic_action_person)); 
    items.add(new item_object(tagTitles[2],R.drawable.ic_action_search)); 
    items.add(new item_object(tagTitles[3],R.drawable.ic_action_sd_storage)); 
    items.add(new item_object(tagTitles[4],R.drawable.ic_action_cloud)); 
    items.add(new item_object(tagTitles[5],R.drawable.ic_action_about)); 


    drawerList.setAdapter(new NavigationAdapter(this, items)); 
    drawerList.setOnItemClickListener(new DrawerItemClickListener()); 

    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 

    drawerToggle = new ActionBarDrawerToggle(
      this, 
      drawerLayout, 
      //R.drawable.ic_drawer, 
      R.string.drawer_open, 
      R.string.drawer_close 
    ) { 
     public void onDrawerClosed(View view) { 
      getActionBar().setTitle(itemTitle); 

     } 

     public void onDrawerOpened(View drawerView) { 
      getActionBar().setTitle(activityTitle); 


     } 
    }; 

    drawerLayout.setDrawerListener(drawerToggle); 

    if (savedInstanceState == null) { 
     selectItem(0); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if (drawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 



private class DrawerItemClickListener implements ListView.OnItemClickListener  { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     selectItem(position); 
    } 
} 

private void selectItem(int position) { 
    Fragment fragment = null; 
    Class clase = null; 
    Activity actividad = null; 


    switch (position) { 

     case 1: 
      fragment = new PerfilFragment(); 
      break; 
     case 2: 
      fragment = new SeleccionarFragment(); 
      break; 
     case 3: 
      fragment = new GestorFragment(); 
      break; 
     case 4: 
      fragment = new DriveFragment(); 
      break; 
     case 5: 
      fragment = new InfoFragment(); 
      break; 
     default: 
      break; 

    } 

    if (fragment != null) { 

     FragmentManager fragmentManager = getFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.content_frame,  fragment).commit(); 

     drawerList.setItemChecked(position, true); 
     drawerList.setSelection(position); 
     setTitle(tagTitles[position]); 
     drawerLayout.closeDrawer(drawerList); 
    } else { 
     // Error al crear el fragmento 
     Log.e("MainActivity", "Error al crear el fragmento"); 

    } 
} 

@Override 
public void setTitle(CharSequence title) { 
    itemTitle = title; 
    getActionBar().setTitle(itemTitle); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sincronizar el estado del drawer 
    drawerToggle.syncState(); 
} 

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


} 

В моем манифесте я это:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.VIBRATE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

<uses-feature 
    android:name="android.hardware.wifi" 
    android:required="true" > 
</uses-feature> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/logo1" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Holo.Light.DarkActionBar"> 

    <activity 
     android:name=".LoginActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".MainActivity"></activity> 
    <activity android:name=".GestorActivity"></activity> 

    <activity 
     android:name="etsiit.etsiitcast_def.SeleccionarActivity" 
     android:screenOrientation="portrait" 
     android:theme="@style/Theme.AppCompat.NoActionBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
     </intent-filter> 
    </activity> 



</application> 

Вот макет для MainActivity

<android.support.v4.widget.DrawerLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 


<!-- As the main content view, the view below consumes the entire 
    space available using match_parent in both dimensions. --> 
<FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ffffff"/> 


<!-- android:layout_gravity="start" tells DrawerLayout to treat 
    this as a sliding drawer on the left side for left-to-right 
    languages and on the right side for right-to-left languages. 
    The drawer is given a fixed width in dp and extends the full height of 
    the container. A solid background is used for contrast 
    with the content view. --> 
<ListView 
    android:id="@+id/left_drawer" 
    android:layout_width="240dp" 
    android:layout_height="fill_parent" 
    android:layout_gravity="start" 
    android:choiceMode="singleChoice" 
    android:divider="#CFCFCF" 
    android:dividerHeight="2dp" 
    android:background="#424242" 
    android:textColor="#424242" 
    /> 

</android.support.v4.widget.DrawerLayout> 

А вот menu_main .xml код:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context=".MainActivity"> 
<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    app:showAsAction="never" /> 

<item 
    android:id="@+id/action_search" 
    android:orderInCategory="200" 
    android:title="Search" 
    android:icon="@drawable/cast_icon_blanco" 
    app:showAsAction="ifRoom" 
    ></item> 

</menu> 

Благодарим за помощь.

ответ

1

Шаг # 1: Замените все вхождения app:android: в свой ресурс меню. app: используется с appcompat-v7 или другими библиотеками, и вы используете собственную панель действий.

Шаг № 2: Если вы хотите action_settings выступать в качестве кнопки на панели инструментов в панели действий, замените android:showAsAction="never" с android:showAsAction="ifRoom" (или, возможно, always вместо ifRoom).

+0

Большое спасибо, это было решением моей проблемы. Я просто изменил 'app:' с 'android:', а затем добавил 'tools: ignore = 'AppCompatResource'. –

Смежные вопросы