2

AppBarLayout で遊んでいますが、背景を透明にする方法が見つかりません。

ここで私が意味するもの:

ここに画像の説明を入力

そして、ここに私のXMLがあります:

<?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=".MainActivity">


    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:elevation="0dp"
        android:background="@android:color/transparent">

        <TextView
            android:id="@+id/toolbar"
            app:elevation="0dp"
            android:text="hey"
            android:textColor="@android:color/white"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:background="#8000CDFE"
            app:layout_scrollFlags="scroll|enterAlways"/>

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

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

ご覧のとおり、#8000CDFE という色を使用しているため、50% の透明度が得られますが、何らかの理由でそうではありません。AppBarLayout に透明な背景を設定しようとしましたが、あまり役に立ちません。

誰もこの問題に遭遇しましたか? AppBarLayout とその兄弟に透明な色を割り当てる方法はありますか?

ありがとう。

4

2 に答える 2

6

それが起こる理由:

docsによると、CoordinateLayoutは特別な種類の であるFrameaLayoutため、通常の と同じようにオーバーレイの動作を想定できFrameLayoutますよね? app:layout_behavior="@string/appbar_scrolling_view_behaviorただし、RecyclerView にフラグがあることを検出すると、動作が異なります。

スクロール動作を検出すると、次のことを行うと想定しています(コードを見ていないので、想定していますRecyclerViewAppBarLayout。スクロールが発生すると、RecyclerViewの translationY を負の数に設定して、スクロール値だけ上に移動するだけです。

考えられる解決策:

  1. の翻訳RecyclerViewを -appBarHeight に設定します。これにより、appBar の下に表示されます。
  2. RecyclerViewの高さを appBarHeight だけ増やします。これは、scrollBehavior によって引き起こされる translationY の変更を相殺するためです。

たとえば、これを行う方法は次のとおりです。

ViewTreeObserver vto = mRecyclerView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {

        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
            mRecyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        } else {
            mRecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }

        recyclerView.setTranslationY(-appBarHeight);
        recyclerView.getLayoutParams().height = recyclerView.getHeight()+appBarHeight;
    }
});
于 2015-10-13T14:04:13.153 に答える
0

これらの単純な数行のコードでうまくいきます

RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycler);
AppBarLayout barLayout = (AppBarLayout) findViewById(R.id.appbar);    

mRecyclerView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                mRecyclerView.setTranslationY(-barLayout.getHeight());
                mRecyclerView.getLayoutParams().height = mRecyclerView.getHeight()+barLayout.getHeight();
            }
        });
于 2016-11-04T08:24:59.517 に答える