2015-05-19 161 views
4

我剛開始使用材質設計,並且遇到了一個問題,即只有CardView才能處理任何事物。具體來說,它應該在LinearLayout上工作嗎?Android材質設計 - LinearLayout標高

<LinearLayout 
      android:paddingTop="10dp" 
      android:orientation="vertical" 
      android:paddingLeft="@dimen/activity_horizontal_margin" 
      android:paddingRight="@dimen/activity_horizontal_margin" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:elevation="2dp"> 
      <LinearLayout 
       android:id="@+id/shareLayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:paddingBottom="10dp"> 

       <ImageView 
        android:id="@+id/shareIcon" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_share_black_48dp"/> 
       <TextView 
        android:id="@+id/shareText" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical" 
        android:paddingLeft="10dp" 
        android:text="@string/action_share"/> 
      </LinearLayout> 
      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 

       <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_computer_black_48dp"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical" 
        android:paddingLeft="10dp" 
        android:text="@string/action_desktop"/> 
      </LinearLayout> 

     </LinearLayout> 

此代碼不會產生可見的佈局高度 - 無陰影。如果我將它放在CardView中,則提升工作正常,但在點擊事件觸發時遇到問題。我試圖刪除圖像,但沒有任何效果。我是否只需要在CardView中包裝所有需要提升的內容,或者有其他方法?謝謝。

我在運行Android 5.0.2的Nexus 7上測試。

UPDATE

我試圖大綱提供的建議,而導致的陰影,但是一個奇怪的一個。

Screenshot

它看起來像的LinearLayout是角度或東西,而不是僅僅提高。更改保證金似乎沒有幫助。任何人有任何其他想法?

+0

在'LinearLayout'上設置背景。海拔只會從設置了「海拔」的視圖的背景投影出一個陰影。 – alanv

+0

你的意思是像背景可繪製的?如果我真的不想要背景,我是否將透明圖像設置爲背景?如果您有解釋此功能的文檔的任何鏈接,我會很感激,但我知道有很多這些東西沒有很好的記錄。 – nasch

+0

我有相同的怪異陰影,但設置背景爲任何元素背後的顏色(在我的情況下是白色)掩蓋了陰影 – 1mike12

回答

2

使用ViewOutlineProvider爲所有視圖生成陰影。如果設置了背景,則從視圖的背景自動生成此提供程序。陰影具有背景的形狀和透明度。爲了使透明視窗蒙上了一層陰影,你必須設定自己的ViewOutlineProvider:

view.setOutlineProvider(new ViewOutlineProvider() { 
    @Override 
    public void getOutline(View view, Outline outline) { 
     outline.setRect(0, 0, view.getWidth(), view.getHeight()); 
    } 
}); 

確保陰影投射有足夠的空間來繪製它的影子。 CardView默認會爲此添加自己的填充。

+0

這不是一個透明的視圖,只是一個沒有背景或透明度的LinearLayout或任何東西設置(我不認爲LinearLayouts默認是透明的)。我會嘗試玩保證金,也許這就是問題所在。 – nasch

+1

LinearLayout除了背景之外本身並不繪製任何東西,因此設置一個空背景使得該佈局透明。這可能是影子沒有被繪製的原因。 – Zielony

+0

我用最新的結果更新了問題。 – nasch