2017-03-20 47 views
1

如果NavigationView的高度小於其父項的高度,則在NavigationView以下有投影。我怎樣才能消除這個影子?如何在NavigationView下移除陰影?

這裏是我的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     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:layout_gravity="left" 
     android:orientation="vertical" 
     android:background="@android:color/white"> 

    <android.support.design.widget.NavigationView 
      android:id="@+id/map_type_menu" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      app:menu="@menu/menu_map_type"/> 

    <!-- unwanted drop shadow here --> 

    <fragment 
      android:id="@+id/settings" 
      android:name="com.chalcodes.treasuremap.SettingsFragment" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 

</LinearLayout> 

enter image description here

我不認爲這是相關的,但這裏的menu_map_type XML:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 
     <item 
       android:id="@+id/item_street" 
       android:icon="@drawable/ic_menu_map_type_street" 
       android:title="@string/map_type_street" /> 
     <item 
       android:id="@+id/item_satellite" 
       android:icon="@drawable/ic_menu_map_type_satellite" 
       android:title="@string/map_type_satellite" /> 
     <item 
       android:id="@+id/item_hybrid" 
       android:icon="@drawable/ic_menu_map_type_satellite" 
       android:title="@string/map_type_hybrid" /> 

     <item 
       android:id="@+id/item_terrain" 
       android:icon="@drawable/ic_menu_map_type_terrain" 
       android:title="@string/map_type_terrain" /> 
    </group> 

</menu> 
+0

我可以看到你的設計截圖? –

+0

你可以粘貼'menu_map_type'文件的代碼嗎? –

+0

我試過了。但我找不到這種類型的解決方案。對不起 –

回答

0

試試這個。

<android.support.design.widget.NavigationView 
      android:id="@+id/map_type_menu" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="left" 
      app:menu="@menu/menu_map_type"> 


<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> 

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

<fragment android:id="@+id/settings" android:name="com.chalcodes.treasuremap.SettingsFragment" android:layout_width="match_parent" android:layout_height="wrap_content"/> 

</LinearLayout> 

</android.support.design.widget.NavigationView> 
+0

高度不能是'match_parent'。 「NavigationView」與其他視圖共享其父項。 –

+0

我錯了。你可以發表一個截圖嗎?很難猜測影子會在哪裏? – albeee

+0

添加了屏幕截圖。 –

0

該陰影是由NavigationView具有非零默認高程造成的。這實際上是我想到的第一件事,但我試圖改變它的方式並不奏效,所以我錯誤地認爲提升不是問題。

我原來在NavigationView聲明中加了android:elevation="0dp"。這產生了一個警告,因爲我支持21以下的API。我錯誤地認爲這個屬性對於API 21+仍然有效,但顯然它被剝離了。

的解決方案是在代碼中設置海拔:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    navView.setElevation(0f); 
} 
+0

'我錯誤地認爲這個屬性會對API 21+保持有效,但顯然它會被剝離。「不能相信會發生。 – azizbekian

+0

@azizbekian無論什麼原因,'android:elevation =「0dp」'不起作用。 –

2

只需添加到您的NavigationView佈局:

app:elevation="0dp" 
+0

在API 23及更高版本中,我遇到了一個問題:設置'app:elevation =「0dp」'時,會在'NavigationView'上出現灰色。解決方法是設置'NavigationView'的另一個屬性:'android:background =「#0000」' –