2017-01-04 2 views
0

Я пытаюсь создать единую панель инструментов (v7), которая отображается под статусом Android в версии 21+ при использовании библиотеки совместимости v4. Я прочитал много сообщений и попробовал множество разных конфигураций, но не могу заставить их работать, не устанавливая вручную заполнение (что я хочу предотвратить, поскольку размер SystemWindow может измениться на более поздних версиях Android) или используя setSupportActionBar().Android FragmentActivity, AppBarLayout, панель инструментов и полупрозрачная строка состояния

Я начал с примера прокрутки по умолчанию в Android Studio и попытался заменить CollapsingToolbarLayout обычной панелью инструментов.

Моей раскладка:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.example.wbusey0.toolbartest.ScrollingActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:fitsSystemWindows="true" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:fitsSystemWindows="true" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:popupTheme="@style/AppTheme.AppBarOverlay" /> 
    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_scrolling" /> 

</android.support.design.widget.CoordinatorLayout> 

styles.xml:

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
    </style> 

    <style name="AppTheme.NoActionBar"> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
    </style> 

    <style name="AppTheme.AppBarOverlay" /> 

    <style name="AppTheme.PopupOverlay" /> 

</resources> 

v21 стили XML:

<style name="AppTheme.NoActionBar" parent="@style/Theme.AppCompat.Light"> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
     <item name="android:statusBarColor">@android:color/transparent</item> 
     <item name="android:windowTranslucentStatus">true</item> 
    </style> 

Моего манифест:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.wbusey0.toolbartest"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".ScrollingActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

Я не могу использовать setSupportActionBar(), потому что я хочу использовать вложенные фрагменты позже и, таким образом, чтобы расширить FragmentActivity. Однако использование setSupportActionBar() решает мою проблему. Любые идеи о том, как исправить высоту панели?

Toolbar height too small

ответ

1

Вы должны использовать AppCompatActivity, не FragmentActivity.

public ScrollingActivity extends AppCompatActivity { 

НЕ

public ScrollingActivity extends FragmentActivity { 
+0

Не могли бы вы объяснить этот ответ? Поскольку вопрос OP не ясен (это как два вопроса в одном потоке), я думаю, что ваш ответ не в нужном месте. Это может быть комментарий ... – Mohsen

+0

Он использует 'FragmentActivity' вместо' AppCompatActivity' в сочетании с 'CoordinatorLayout'. И нет, это не должно быть комментарий, я запустил его код, воспроизвел проблему и исправил ее, как я описал в своем ответе. Если вы не поняли вопроса, это не значит, что все сделали то же самое. – Divers

+0

О, ты прав. Не думал/не видел об этом «FragmentActivity». На этом этапе вы правы! Я просто подтверждаю ваш ответ. – Mohsen

1

Чтобы устранить эту проблему, вы можете захотеть изменить android:layout_height из AppBarLayout в wrap_content.

Итак:

<android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fitsSystemWindows="true" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

Как и документация говорит то же самое:

https://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

UPDATE:

Честно говоря, я не думаю о FragmentActivity , В любом случае, вот ваш ответ:

https://stackoverflow.com/a/30371919/4409113

С последней версией библиотеки поддержки вы должны сделать свой Activity продлить AppCompatActivity, как ActionBarActivity был устаревшее.

Но в вашей ситуации, это может помочь:

((AppCompatActivity) getActivity()).setSupportActionBar(toolbar) 

И если это не сработает, тогда;

Как сказал @Divers, вам нужно расширить «Активность» до «AppCompatActivity» .. И просто инициализировать «Панель инструментов».

+0

Вы попробовали? Нет, это не решает проблемы. – Divers

+0

Теперь он должен работать :) – Mohsen

+0

Как ваш обновленный ответ отражает проблему автора? Автор использует 'FragmentActivity', а не' ActionBarActivity'. Также, если он попытается использовать 'FragmentActivity' для' AppCompatActivity', он просто выбросит исключение. – Divers

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