4

私が構築しているアプリでは、Design Support Libraryを使用しました。を使用するアプリを作成しましたTabLayout。アプリの小さな機能は、ユーザーがタブを変更するTabLayoutと、 との両方の色がToolbar対応する色に変わることです。NavigationViewまた、ユーザーに Material design を提示するために、新しい を使用していますDrawerLayout

TabLayoutただし、との両方の色を変更することToolbarはまったく問題ありません。次の行で行います。

String hexColor = String.format("#%06X", (0xFFFFFF & getResources().getColor(R.color.primaryColor)));
getBaseActivity().getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor)));
mTabLayout.setBackgroundColor(getResources().getColor(primaryColor));

これはすべて問題なく、想定どおりに機能しています。Status bar背景を設定しようとすると問題が発生します。マテリアル デザインの仕様では、NavigationDrawer特別な処理を行う必要があることが示されているため、下の画像はステータス バーが実際に半透明になっている様子を示しています。ナビゲーション ドロワーはメイン フラグメントの上に重なっており、ナビゲーション バーは両方の上にあり、半透明のバーになっています。

それはどのように見えるべきか

私の最初の考えは、それは #7000 の 16 進値のバーか何かであるということでしたが、真実から遠く離れることはできませんでした. それを行っても、「暗く」する必要がある実際の色の色は変わりません。

その後、必要な色の暗いバージョンをステータスバーの背景として設定しようとしました。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getBaseActivity().getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(getResources().getColor(R.color.primaryColor));
}

しかし、これを行った後、完全な機能が壊れます。私のビューは次のようになります。

ここに画像の説明を入力

本質的に、この動作を修正するにはどうすればよいですか? 半透明機能がマテリアル デザインの仕様に従って必要なことを引き続き行うように変更したいのですが、status barの背景色も変更します。

4

2 に答える 2

0

その背後には常に半透明の影があり、それを取り除くことはできないと思います。したがって、色のアルファ チャネルをいじって許容できる結果を得るか、次のような回避策を考えることができます。 ? Viewでは、NavigationDrawer レイアウトに目的の色とステータスバーと同じ高さの空を追加して、同じ効果を実現してみませんか?

ところで、R.dimen.status_bar_height高さ指定があります。

于 2015-07-13T15:55:14.743 に答える
0

活動レイアウト

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

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

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/drawer_menu" />

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

アクティビティ テーマ、statusBarColor を透明に設定

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

NavigationView は ScrimInsetsFrameLayout を拡張し、ステータスバーの位置に色を描画します

ここに画像の説明を入力

于 2016-04-18T08:07:08.530 に答える