2017-09-30 11 views
1

下のコードでは、標高が8dpの白い図が表示されています。青いボタンは10dpの標高を持ち、理論的にはそれが表示されるはずです。しかし、それはしません。それは、それが白い視野の真上にない部分だけを示しています。私はそれが仰角と何かであることを知っているが、私は正確に何がわからない。ホワイトビューが= < 2のときはうまくいきましたが、それを高く設定すると問題が発生します。ここで2dpを超える標高でボタンが消える

enter image description here

私のコードです:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/login_background" 
      android:background="@color/colorPrimary" /> 

     <View 
      android:id="@+id/view" 
      android:layout_width="@dimen/login_container_width" 
      android:layout_height="@dimen/login_container_height" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="@dimen/login_container_margin_top" 
      android:background="@drawable/login_container" 
      android:elevation="8dp"> 

     </View> 

     <Button 
      android:id="@+id/button" 
      android:layout_width="190dp" 
      android:layout_height="50dp" 
      android:layout_marginBottom="52dp" 
      android:background="@drawable/login_button" 
      android:elevation="10dp" 
      android:text="LOGIN" 
      android:textColor="@color/white" 
      android:textSize="20sp" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" /> 

    </RelativeLayout> 

</LinearLayout> 
+0

[この質問](https://stackoverflow.com/questions/27080338/android-5-0-androidelevation-works-for-view-but-not-button)と表示されている回答をご覧くださいあなたの質問に答えたら。 – Cheticamp

+0

私は受け入れられた答えが何を試みたが、それはうまくいかなかった。何も変わっていません。 –

答えて

0

以下はthisスタックオーバーフローの質問と受け入れ答えを反映しています。

まず始めに何を考えてみましょう。私はあなたの次元のすべてにアクセスすることはできませんが、あなたの例とまったく同じように次のように見えますが、基礎はそこにあります。以下は基本レイアウトです。ビューの標高が8dpで、ボタンの標高が10dpであっても、ボタンがビューの下にあることがわかります。

enter image description here

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/colorPrimaryDark"> 

     <View 
      android:id="@+id/view" 
      android:layout_width="match_parent" 
      android:layout_height="175dp" 
      android:layout_alignBottom="@+id/button" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentStart="true" 
      android:layout_margin="30dp" 
      android:background="@android:color/white" 
      android:elevation="8dp"> 

     </View> 

     <Button 
      android:id="@+id/button" 
      android:layout_width="190dp" 
      android:layout_height="50dp" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="52dp" 
      android:background="@mipmap/ic_launcher" 
      android:elevation="10dp" 
      android:text="LOGIN" 
      android:textColor="@color/white" 
      android:textSize="20sp" /> 

    </RelativeLayout> 

</LinearLayout> 

だから、これはなぜですか?これは、ボタンのXMLのandroid:elevation="10dp"が実際に標高を定義していないためです。代わりに、ボタンの高さは、android:elevationとandroid:translationZの各プロパティを制御する"StateListAnimator"によって制御されます(上記の質問に対する受け入れられた回答を参照してください)。

StateListAnimatorが本当に気にしないレイアウトのために、android:stateListAnimator="@null"をボタンのXMLに追加するだけで、簡単に削除できます。このコードを追加した後のレイアウトは次のとおりです(デザイナーはすぐに変更を表示しないことがあります) )しませんでした。だから、あなたが変更を確認するために、レイアウトを更新する必要があるかもしれません。

enter image description here

表示されているように、ボタンは期待通りに表示されています。

StateListAnimatorが気になる場合は、自分で定義し、上記のXMLステートメントで@nullの代わりにその名前を入力する必要があります。私が上記の答えは、StateListAnimatorがAndroidに使用されていると思われるので、それを基にして高度を好みに変えることができます。私はこれを試していないが、それは動作するはずです。

+0

ありがとう!あなたは私が実際にそれを理解することができるポイントまで、それを本当にうまく説明しました。あなたのために+1! –

関連する問題