自己Q&A投稿ですレイアウトにオーバーレイする透明なActionBarを持っています。最新のサポートライブラリに移行した後、ツールバーを優先してActionBarを削除することを余儀なくされました。それを透明にし、そのレイアウトをオーバーレイする古い方法はもう機能しません。
<style name="CustomActionBarTheme" parent="@Android:style/Theme.AppCompat">
<item name="Android:windowActionBarOverlay">true</item>
<item name="windowActionBarOverlay">true</item>
<item name="Android:actionBarStyle">@style/TransparentActionBar</item>
</style>
<style name="TransparentActionBar" parent="@Android:style/Widget.Holo.Light.ActionBar">
<item name="Android:background">@Android:color/transparent</item>
</style>
必要なのは、アクションバーを非表示にするテーマを定義し、背景が透明なアクションバーのスタイルを定義し、このスタイルをツールバーウィジェットに設定することです。ツールバーは最後のビュー(すべてのビューツリー上)として描画されることに注意してください
<style name="Theme.Custom" parent="@Android:style/Theme.AppCompat">
<item name="windowActionBar">false</item>
<item name="windowActionBarOverlay">true</item>
<item name="Android:windowActionBarOverlay">true</item>
</style>
<style name="CustomActionBar" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="Android:windowActionBarOverlay">true</item>
<!-- Support library compatibility -->
<item name="windowActionBarOverlay">true</item>
</style>
レイアウト:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<!-- Toolbar should be above content-->
<include layout="@layout/toolbar" />
</RelativeLayout>
ツールバーのレイアウト:
<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_width="match_parent"
Android:layout_height="wrap_content"
app:theme="@style/CustomActionBar"/>
AppBarLayoutの背景が@ nullであるtoolbar.xmlファイルを作成します
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.AppBarLayout
Android:id="@+id/general_appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@null"
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<Android.support.v7.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center_horizontal"
Android:text="Login"
Android:textSize="20sp"/>
</Android.support.v7.widget.Toolbar>
</Android.support.design.widget.AppBarLayout>
結果は次のとおりです。
Googleのサンプルソースコードを確認して、ツールバーを完全に透明にする方法を見つけました。思ったより簡単でした。このような単純なShape Drawableを作成するだけです。
ドロアブルの名前はtoolbar_bg
です
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<gradient
Android:angle="90"
Android:startColor="@Android:color/transparent"
Android:endColor="@Android:color/transparent"
Android:type="linear" />
</shape>
そして、フラグメントまたはアクティビティに..このようなツールバーを追加します。
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:layout_alignParentStart="true"
Android:layout_alignParentTop="true"
Android:background="@drawable/toolbar_bg"
Android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
そして、ここには完全に透明なツールバーがあります。
<Android.support.design.widget.AppBarLayout >
を追加しないでください。これは機能しません。
注:AppBarLayoutが必要な場合は、影を描画しないように標高を0に設定します。
ツールバーはビューのように機能するため、答えは非常に簡単です。
toolbar.getBackground().setAlpha(0);
Style.xmlに次の行を追加します
<style name="Base.Theme.AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme" parent="Base.Theme.AppTheme">
</style>
次に、style-v21に次の行を追加します。
<style name="AppTheme" parent="Base.Theme.AppTheme">
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
<item name="Android:statusBarColor">@Android:color/transparent</item>
</style>
android:theme = "@ style/AppTheme"としてテーマを設定します
ステータスバーが透明になります。
次のxmlコードを使用するだけです。
レイアウトのコード:
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/def_toolbar"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:minHeight="?attr/actionBarSize"
Android:background="@color/toolbarTransparent"
Android:layout_alignParentTop="true" />
そして、次のコードをcolors.xmlに追加します。
<color name="toolbarTransparent">#00FFFFFF</color>
これにより、目的の出力が得られます。
アプリバーのレイアウトに以下のようにAndroid:background="@Android:color/transparent"
を追加するだけです
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@Android:color/transparent">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</Android.support.design.widget.AppBarLayout>`
2つのTheme.AppCompat.Light.NoActionBar
テーマを作成し、colorPrimary
属性を透明色に設定して、半透明のツールバーを実装しました。
1)不透明ツールバーのテーマを1つ作成します。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Toolbar background color -->
<item name="colorPrimary">#ff212cff</item>
</style>
透明/オーバーレイツールバーの2番目のテーマ:
<style name="AppTheme.Overlay" parent="AppTheme">
<item name="colorPrimary">@color/transparent</item>
</style>
2)アクティビティレイアウトで、コンテンツの前にツールバーを配置して、その前に表示できるようにします。
<RelativeLayout
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:orientation="vertical">
<fragment
Android:id="@+id/container"
Android:name="com.test.CustomFragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?attr/colorPrimary"
Android:minHeight="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
</RelativeLayout>
3)AndroidManifest.xmlの透過性テーマをアクティビティに適用します
<activity
Android:name="com.test.TransparentActivity"
Android:parentActivityName="com.test.HomeActivity"
Android:theme="@style/AppTheme.Overlay" >
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="com.test.HomeActivity" />
</activity>
ツールバーを透明にする最も簡単な方法は、@ colorsセクションで不透明度を定義し、@でTransparentThemeを定義することです。 stylesセクションを作成し、これらの定義をツールバーに配置します。
@ colors.xml
<color name="actionbar_opacity">#33000000</color>
@ styles.xml
<style name="TransparentToolbar" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="Android:windowActionBarOverlay">true</item>
<item name="windowActionBarOverlay">true</item>
</style>
@ activity_main.xml
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:background="@color/actionbar_opacity"
app:theme="@style/TransparentToolbar"
Android:layout_height="?attr/actionBarSize"/>
それが結果です:
おそらく、この投稿をご覧になる必要があります AppCompat-v7 21を備えた透明なActionbar
投稿が示唆する点は
これで、面倒なことなく問題を解決できます。
AppBarLayoutタグにAndroid:background = "#10000000"を追加するだけです
https://stackoverflow.com/a/37672153/291414 助けてくれました。
アクティビティ用にこのレイアウトを作成しました。
<?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"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
>
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/transparent" <- Add transparent color in AppBarLayout.
Android:theme="@style/AppTheme.AppBarOverlay"
>
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?android:attr/actionBarSize"
Android:theme="@style/ToolbarTheme"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:theme="@style/ToolbarTheme"
/>
</Android.support.design.widget.AppBarLayout>
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
<- Remove app:layout_behavior=...
/>
</Android.support.design.widget.CoordinatorLayout>
これが機能しない場合は、アクティビティのonCreate()
に書き込みます(ツールバーは@ + id/toolbar):
toolbar.background.alpha = 0
半透明の色(#30ff00ffなど)を設定する場合は、toolbar.setBackgroundColor(color)
を設定します。または、AppBarLayout
の背景色を設定します。
私の場合、AppBarLayout
とToolbar
のスタイルは役割を果たしませんでした。
私はパーティーに遅れていることを知っています。 Toolbar
透明度を管理する単純なクラスを作成しました。
import Android.annotation.SuppressLint;
import Android.graphics.drawable.ColorDrawable;
import Android.support.v7.widget.Toolbar;
public class TransparentToolbarManager {
private Toolbar mToolbar;
private ColorDrawable colorDrawable;
public static final int MAX_ALPHA = 255, MIN_ALPHA = 0;
public TransparentToolbarManager(Toolbar mToolbar) {
this.mToolbar = mToolbar;
this.colorDrawable = new ColorDrawable(mToolbar.getContext().getResources().getColor(R.color.colorPrimary));
}
public TransparentToolbarManager(Toolbar mToolbar, ColorDrawable colorDrawable) {
this.mToolbar = mToolbar;
this.colorDrawable = colorDrawable;
}
//Fading toolbar
public void manageFadingToolbar(int scrollDistance) {
if (mToolbar != null && colorDrawable != null) {
//FadeinAndOut according to the horizontal scrollValue
if (scrollDistance <= MAX_ALPHA && scrollDistance >= MIN_ALPHA) {
setToolbarAlpha(scrollDistance);
} else if (scrollDistance > MAX_ALPHA) {
setToolbarAlpha(MAX_ALPHA);
}
}
}
@SuppressLint("NewApi")
public void setToolbarAlpha(int i) {
colorDrawable.setAlpha(i);
if (CommonHelper.isSupport(16)) {
mToolbar.setBackground(colorDrawable);
} else {
mToolbar.setBackgroundDrawable(colorDrawable);
}
}
}
およびCommonHelper.isSupport()
public static boolean isSupport(int apiLevel) {
return Build.VERSION.SDK_INT >= apiLevel;
}
以下のコードを試してください
<Android.support.design.widget.AppBarLayout
Android:id="@+id/app_bar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/AppTheme.Transparent"
>
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</Android.support.design.widget.AppBarLayout>
style.xml
<style name="AppTheme.Transparent" parent="ThemeOverlay.AppCompat.Light">
<item name="colorPrimary">@Android:color/transparent</item>
<item name="colorControlActivated">@color/colorWhite</item>
<item name="colorControlNormal">@color/colorWhite</item>
</style>
ツールバーv7をサポートAndroid.support.v7.widget.Toolbar
:
コード
toolbar.setBackground(null);
// or
toolbar.setBackgroundColor(ContextCompat.getColor(getContext(), Android.R.color.transparent));
xml(Android:background="@null"
またはAndroid:background="@Android:color/transparent"
)
<Android.support.v7.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
Android:background="@null"
Android:minHeight="?attr/actionBarSize"
Android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textColor="@Android:color/white"
Android:ellipsize="start"
Android:singleLine="true"
Android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"/>
</Android.support.v7.widget.Toolbar>
タイトルが非表示の場合、textColor
を設定します