2017-01-04 14 views
0

v4コンパイラライブラリを使用している間、バージョン21以上のAndroidのステータスバーの下に表示される単一のツールバー(v7)を作成しようとしています。私はたくさんの投稿を読んで、さまざまな設定を試しましたが、手作業でパディングを設定しなければ動作しないようです(これは、AndroidWindowのサイズがSystemWindowのサイズが変更される可能性があるので避けたいものです) setSupportActionBar()を使用してください。Android FragmentActivity、AppBarLayout、ツールバーと半透明のステータスバー

私はAndroidスタジオのデフォルトのスクロールの例から始め、通常のツールバーで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の質問は明確ではないので(1つのスレッドで2つの質問のようなものです)、あなたの答えが正しい場所にないと思います。それはコメントである可能性があります... – Mohsen

+0

彼は 'CoordinatorLayout'と一緒に' AppCompatActivity'の代わりに 'FragmentActivity'を使用しています。そして、いいえ、それはコメントではありません、私は彼のコードを実行し、問題を再現し、私が私の答えで説明したようにそれを修正しました。あなたが質問を理解していない場合、それは皆が同じことをしたということではありません。 – Divers

+0

ああ、そうです。その 'FragmentActivity'について考える/見なかった。この時点であなたは正しいです!私はちょうどあなたの答えをアップアップします。 – Mohsen

1

この問題を解決するには、あなたはwrap_contentAppBarLayoutandroid:layout_heightを変更することもできます。

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

UPDATE:

<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"> 

としてだけでなく、ドキュメントが同じことを言う:

だから

正直なところ、私は考えていなかったFragmentActivity 。とにかく、ここにあなたの答えは:

あなたの ActivityActionBarActivityとして AppCompatActivityを延長すべきであるサポートライブラリの最新バージョンで

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

は は廃止されました。

しかし、あなたのような状況では、これが助けることができる:

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

そして、これが機能しなかった場合に、その後、

@Diversによると、「アクティビティ」を「AppCompatActivity」に拡張する必要があります。「ツールバー」を初期化するだけです。

+0

試しましたか?いいえ、問題は解決しません。 – Divers

+0

これでうまくいくはずです:) – Mohsen

+0

更新された回答は著者の問題をどのように反映していますか?作者は 'ActionBarActivity'ではなく' FragmentActivity'を使います。また、 'FragmentActivity'を' AppCompatActivity'にキャストしようとすると、例外がスローされます。 – Divers

関連する問題