2017-11-08 26 views
1

透明なToolbar(hambugerアイコン付き)とNavigationViewDrawerLayoutを作成しようとしています。Android DrawerLayoutで透明ツールバー

これは私のmain_activtyのレイアウトです:

<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <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:headerLayout="@layout/nav_header_main" 
     app:menu="@menu/activity_main_drawer" 
     app:itemTextColor="@color/primary" 
     android:background="@color/secondary"/> 

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

これは私がapp_bar_mapレイアウト定義された方法である:

<RelativeLayout 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.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".core.MainActivity"> 

     <FrameLayout 
      android:id="@+id/fragment_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

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

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@android:color/transparent" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" /> 

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

</RelativeLayout> 

をそして最後に、これはonCreateメソッドのコードです:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    MapFragment mapFragment = new MapFragment(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, mapFragment); 
    fragmentTransaction.commit(); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.app_name, R.string.app_name); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

これが最終結果です。

enter image description here

透明ツールバー上の「国境」があることに注意してください。それがどこから来たのか、それをどう解決するのか分かりません。

アイデア?

答えて

2

おかげで、私は、この問題に対する解決策を見つけました。

これは私がAppBarLayoutでやってUO終わったものです:

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/transparent" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" 
    android:elevation="0dp" 
    android:stateListAnimator="@null"> 
1

コードにはapp:elevationでした。

app:elevation="0dp"AppBarLayoutを追加できます。

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

更新

Appcompat v24.0.0では、あなたが今標高を設定するstateListAnimatorプロパティを使用する必要があります。 **のres /アニメーター-V21フォルダ内の実行時間の1ミリ秒でアニメーションを作成

/animator/appbar_elevation.xml **

あなたはそれにandroid:valueTo="0dp"を設定することができます。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <objectAnimator 
      android:duration="1" 
      android:propertyName="elevation" 
      android:valueTo="0dp" 
      android:valueType="floatType" /> 
    </item> 
</selector> 

AppBarLayout

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"  
    android:stateListAnimator="@animator/appbar_elevation"> 
</android.support.design.widget.AppBarLayout> 

にそれを設定すると、それは、Javaコードで使用することができます。 @KeLiuyueに

appBarLayout.setStateListAnimator(AnimatorInflater.loadStateListAnimator(getContext(), R.animator.appbar_elevation)); 
+0

は残念ながら、それは働いていませんでした。とにかくありがとう。 – lpfx

+0

もう一度やり直すことができます。 – KeLiuyue

+0

私の答えを確認できますか?@lpfx – KeLiuyue

関連する問題