私はこのようなものを統合したいと思います:
そして、私はこのようにそれをしましたが、ツールバーの下にimageviewを置くことができないようです。ツールバーがなければ、ステータスバーの下に作成できますが、これら2つを組み合わせることはできません。
これが私のレイアウトです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:fitsSystemWindows="true"
tools:context="com.project.Android.PhotoActivity">
<Android.support.v7.widget.Toolbar
Android:id="@+id/photo_tl"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="#59000000"
tools:ignore="UnusedAttribute" />
<ImageView
Android:id="@+id/photo_image"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:adjustViewBounds="true"
Android:scaleType="fitStart" />
</LinearLayout>
私の活動では、次のことを行いました。
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
また、styles-v21.xmlファイルを宣言しました:
<style name="Project.Photo" parent="Project.Light">
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
<item name="Android:statusBarColor">#59000000</item>
</style>
そして、PhotoActivityのデフォルトスタイルとして設定します。既にツールバーをFrameLayoutに配置しようとしましたが、それを行うとツールバーは次のように単純に非表示になります。
前もって感謝します。
それは修正されましたが、ツールバーはステータスバーに重なっています。とにかくパディングを修正する方法はありますか? Android:fitsSystemWindows = "true"を使用すると、ステータスバーは半透明になりません。
レイアウトからToolbar
を削除し、_AppCompat.Theme
_からActionBar
の実装を使用します。
_<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
_
次に、半透明のActionBar
の新しいスタイルを作成します(_values/styles.xml
_で:
_<style name="AppTheme.Transparent" parent="AppTheme">
<item name="windowActionBarOverlay">true</item>
</style>
_
そして_v21/styles.xml
_で:
_<style name="AppTheme.Transparent" parent="AppTheme">
<item name="windowActionBarOverlay">true</item>
<item name="Android:windowTranslucentStatus">true</item>
</style>
_
あなたのActivity
はAppCompatActivity
を拡張しているので、onCreate()
で次のように呼び出すことができます:
戻るボタンを有効にするには:
_getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
_
半透明の色を設定するには:
_getSupportActionBar().setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.yourTranslucentColor)));
_
ActionBar
タイトルを削除するには:
_getSupportActionBar().setDisplayShowTitleEnabled(false);
_
さらに、レイアウトをより詳細に制御できるように、ルートLinearLayout
をCoordinatorLayout
に変更します(より強力なFrameLayout
)。
私が使用した色は次のとおりです。
_<color name="yourTranslucentColor">#29000000</color>
_
もちろん、このテーマを_AndroidManifest.xml
_のActivity
に適用することを忘れないでください:
_<activity
Android:name=".ui.activity.YourActivity"
Android:theme="@style/AppTheme.Transparent">
</activity>
_
これらのすべての手順を実行すると、次のような結果が得られます。
うまくいったら教えてください。
あなたが言ったように、
「ツールバーをFrameLayoutに配置しようとしましたが、それを行うとツールバーは次のように単純に非表示になります。」.
これの問題は、FrameLayout
にchildViewを追加する順序です。最初の子としてツールバーを追加し、その後ImageViewを追加しました。これが画像がツールバーを隠す理由です。代わりに、FameLayout
内のビューの順序は次のようになります
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
tools:context="com.project.Android.PhotoActivity">
<ImageView
Android:id="@+id/photo_image"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:adjustViewBounds="true"
Android:scaleType="fitStart" />
<Android.support.v7.widget.Toolbar
Android:id="@+id/photo_tl"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="#59000000"
tools:ignore="UnusedAttribute" />
</FrameLayout>
また、APIレベル> = 19の場合、style.xml
ステータスバーを透明にするファイル<item name="Android:windowTranslucentStatus">true</item>
statusBarの背後にあるコンテンツを作成するには、このリンクを使用します
https://developer.Android.com/training/system-ui/status.html#behind
以下のコードを使用
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/coordinator_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="300dp"
Android:fitsSystemWindows="true">
<Android.support.design.widget.CollapsingToolbarLayout
Android:id="@+id/collapsing_toolbar"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
app:contentScrim="@color/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:expandedTitleTextAppearance="@style/AppTheme.CollapsingToolbarLayoutExpandedTextStyle"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
Android:id="@+id/iv_backdrop"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
Android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?android:attr/actionBarSize"
Android:theme="@style/YourTheme"
app:layout_collapseMode="pin" />
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<!-- Rest of your view-->
</Android.support.design.widget.CoordinatorLayout>
ステータスバーをアプリとは別のものとして扱わないでください。 LinearLayoutを使用しているため、画像はツールバーの下に表示されます。 RelativeLayoutを使用していた場合、画像はツールバーと同じ高さから始まります。
ステータスバーを透明にし、すべてをステータスバーの下から開始するには、次を使用します。
<style name="AppTheme.TranslucentStatusBar" >
<item name="Android:windowTranslucentStatus">true</item>
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
上記のスタイルをアクティビティに使用すると、すべてがステータスバーの下から始まります。ツールバーの場合、ツールバーにパディングとしてステータスバーの高さを追加することにより、ツールバーの高さを増やすことができます。これは次のように実行できます。
toolbarContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
toolbarContainer.setPadding(0, frame.top, 0, 0);
}
});
ステータスバーに色を設定し、ツールバーのAlphaTransparencyで同じ色を使用できます。
getWindow().setStatusBarColor(ContextCompat.getColor(this, Android.R.color.transparent));
これで、ステータスバーとツールバーを含むすべてを制御できます。
TLDR;ツールバーをLinearLayoutでラップする必要があります。
私がそれを機能させるためにしたことは@Akhilesh Kumarのアプローチに似ていましたが、ツールバーのオーバーラップを修正するLinearLayoutでツールバーをラップしました。また、そのLinearLayoutでfitsSystemWindowsをtrueに設定しました。
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
tools:context="com.project.Android.PhotoActivity">
<ImageView
Android:id="@+id/photo_image"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:adjustViewBounds="true"
Android:scaleType="fitStart"/>
<LinearLayout
Android:id="@+id/content_card_image"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:fitsSystemWindows="true"
>
<Android.support.v7.widget.Toolbar
Android:id="@+id/photo_tl"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="#59000000"
tools:ignore="UnusedAttribute"/>
</LinearLayout>
</FrameLayout>
役に立てば幸いです。
LinearLayout
は、ImageView
の下にToolbar
を自動的に配置します。
代わりにRelativeLayout
を使用してみてください。
修正されましたが、ツールバーがステータスバーに重なっています。とにかくパディングを修正する方法はありますか? Android:fitsSystemWindows = "true"を使用すると、ステータスバーは半透明になりません。
私は最近、WindowInsetsについての投稿を書きました。あなたは check out かもしれません。問題が解決すると思います。
要するに、あなたがしなければならないのは、ViewCompat.setOnApplyWindowInsetListener
API経由でToolbar
にのみウィンドウインセットを渡すことです。ただし、Toolbar
の親はウィンドウのインセットを渡す必要があります。あなたの場合、デフォルトではLinearLayout
とファミリレイアウトはそれをしないので、それは起こりません。onApplyWindowInsets
メソッドをサブクラス化してオーバーライドする必要があります。
すべてをより正確に説明している記事を読むことをお勧めします。