2015-09-27 8 views
0

У меня есть новое приложение, на самом деле мое первое, для которого я хотел бы отобразить навигационный ящик.Панель действия не отображается

Приложение работает нормально и отображает профиль пользователя после входа на удаленный сервер.

Ящик работает нормально, открытие и закрытие, как и ожидалось.

Но должна быть панель управления. И я этого не вижу. Кроме того, значок ящика гамбургера также не отображается.

Класс профиль, который загружается нормально, отображая данные профиля пользователя:

public class UserProfileActivity extends UserActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.profile); 
    } 

} 

Активность пользователя является базовым классом для всех действий пользователей:

public class UserActivity extends BaseActivity { 

    private String email; 
    private String token; 

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

} 

И, наконец, базовая деятельность :

public class BaseActivity extends AppCompatActivity { 

private Toolbar toolbar; 
private ActionBarDrawerToggle drawerToggle;  
private DrawerLayout baseLayout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    checkVersion(); 
} 

@Override 
public void setContentView(int layoutResID) { 
    baseLayout = (DrawerLayout) getLayoutInflater().inflate(R.layout.base, null); 
    FrameLayout contentLayout = (FrameLayout) baseLayout.findViewById(R.id.content); 
    getLayoutInflater().inflate(layoutResID, contentLayout, true); 
    super.setContentView(baseLayout); 

    // Set a Toolbar to replace the ActionBar 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    if (null != toolbar) { 
     setSupportActionBar(toolbar); 
    } 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setHomeButtonEnabled(true); 
    actionBar.setDisplayHomeAsUpEnabled(true); 

    drawerToggle = new ActionBarDrawerToggle(this, baseLayout, toolbar , R.string.drawer_open, R.string.drawer_close) { 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      //getActionBar().setTitle(mTitle); 
      //invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      //getActionBar().setTitle(mDrawerTitle); 
      //invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    }; 
    baseLayout.setDrawerListener(drawerToggle); 
    baseLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      drawerToggle.syncState(); 
     } 
    }); 
} 

adb logcat показывает, что панель инструментов не имеет значения:

E/permapp (3292): ========>> toolbar: [email protected] 

Компоновка base.xml является:

<android.support.v4.widget.DrawerLayout 
    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" 
    android:id="@+id/base" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    >  

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

    <include 
     layout="@layout/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

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

    </RelativeLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/drawer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/drawer_header" 
     app:menu="@menu/drawer_menu" 
     /> 

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

Компоновка toolbar.xml является:

<?xml version="1.0" encoding="utf-8"?> 

    <android.support.v7.widget.Toolbar 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/toolbar" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:fitsSystemWindows="true" 
     android:minHeight="?attr/actionBarSize" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     android:background="?attr/colorPrimaryDark"> 
    </android.support.v7.widget.Toolbar> 

Стиля осуществляются в двух файлах, Рез/значениях/styles.xml содержит:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"></style> 

и res/values-v19/styles.xml содержит:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:windowTranslucentStatus">true</item> 
</style> 

У меня следующие зависимости:

<dependency> 
    <groupId>com.google.android</groupId> 
    <artifactId>android</artifactId> 
    <version>4.1.1.4</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>com.android.support</groupId> 
    <artifactId>support-v4</artifactId> 
    <version>23.0.1</version> 
    <type>aar</type> 
</dependency> 
<dependency> 
    <groupId>com.android.support</groupId> 
    <artifactId>appcompat-v7</artifactId> 
    <version>23.0.0</version> 
    <type>aar</type> 
</dependency> 
<dependency> 
    <groupId>com.android.support</groupId> 
    <artifactId>design</artifactId> 
    <version>23.0.0</version> 
    <type>aar</type> 
</dependency> 
+0

Распространяется ли ваши '' BaseActivity' от AppCompatActivity'? Какую тему вы продлеваете? – LordRaydenMK

+0

Да, он расширяет AppCompatActivity, и я добавил это в вопрос сейчас. Тема - Theme.AppCompat.Light.NoActionBar. – Stephane

ответ

1
<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

    <include 
     layout="@layout/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

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

Это соответствующая часть макета. И ваши Toolbar, и ваш FrameLayout находятся в пределах RelativeLayout. FrameLayout просто лежит над вашим Toolbar, покрывая его. Либо заменить RelativeLayout с LinearLayout или сказать FrameLayout быть ниже панели инструментов (в пределах RelativeLayout) как

<include 
    android:id="@+id/toolbarinclude" 
    layout="@layout/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<FrameLayout 
    android:layout_below="@id/toolbarinclude" 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
+0

Я попробовал LinearLayout вместо FrameLayout для элемента контента, но ничего не изменил. – Stephane

+0

Атрибут layout_below не был распознан. – Stephane

+1

Вы должны были заменить RelativeLayout LinearLayout, а не FrameLayout. – FWeigl

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