web-dev-qa-db-ja.com

相対レイアウトのz-index

RelativeLayoutのボタンの上にTextViewを配置する必要があります。しかし、機能していません。ボタンの前に移動しても、TextViewは常にボタンの下にあります。テキストビューを前面に移動するためにbringChildToFront()関数も試しましたが、うまくいきませんでした。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/rlBottom"
Android:layout_width="fill_parent"
Android:layout_height="match_parent">

<Button
    Android:id="@+id/bVio"
    Android:layout_width="wrap_content"
    Android:layout_height="50dip"
    Android:layout_alignParentLeft="true"
    Android:text="VIO"></Button>

    <TextView
        Android:id="@+id/bVio_count"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignRight="@+id/bVio"
        Android:layout_marginTop="6dip"
        Android:layout_marginRight="6dip"
        Android:text="00"
        Android:textSize="15dip"
        Android:textColor="#FF0000"/>
</RelativeLayout>
19

この質問に少し遅れて遭遇しましたが、ここで私はそれをどのように解決したかを示します。

Android APIレベル21(Lollipop/Android 5.0)以上の場合)、ボタンなどの高度のあるアイテムを操作するときに問題が発生します。

Lollipop以前のデバイスでレイアウトを注文するときAndroidは、XML内のアイテムの順序を参照します。XML内でアイテムが下にあるほど、Zインデックスで上にあります。したがって、最初にボタンを配置し、その下にテキストフィールドを配置すると、機能します。

ただし、API 21を超えるAndroidが設定されているデバイスでz-indexの順序を決定する場合、システムはアイテムの標高も確認し、標高の高いアイテムを標高の低いアイテムよりも高く表示します。値。デザインを機能させるには、TextFieldの高さがボタンよりも高いことを確認する必要があります。これは、アイテムにAndroid:elevationを定義することで達成できます。以下のモックXMLは、APIレベルの前後のデバイスで機能します21:

<RelativeLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/rlBottom"
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent">

    <Button
        Android:id="@+id/bVio"
        Android:layout_width="wrap_content"
        Android:layout_height="50dip"
        Android:layout_alignParentLeft="true"
        Android:text="VIO"
        Android:elevation="0dp"
        />

    <TextView
        Android:id="@+id/bVio_count"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignRight="@+id/bVio"
        Android:layout_marginTop="6dip"
        Android:layout_marginRight="6dip"
        Android:text="00"
        Android:textSize="15dip"
        Android:textColor="#FF0000"
        Android:elevation="10dp"
        />

</RelativeLayout>
39
lejonl

ボタンの背景を変更してRelativeLayoutをボタンとして取得し、TextViewをcenterInParent = "True"として設定

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/rlBottom"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@drawable/ic_launcher" >

    <TextView
        Android:id="@+id/bVio_count"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true"
        Android:text="I am khan "
        Android:textColor="#FF0000"
        Android:textSize="35dip" />

</RelativeLayout>

クラス

(RelativeLayout)findViewById(R.id.rlBottom).setOnClick(new OnClick... //like a button
0
Jawad Zeb

このコードを追加すると、問題が解決します。

Android:stateListAnimator="@null" 

参照 この答え

Lollipop以降のボタンにはデフォルトの高さがあり、常に上部に描画されます。これを変更するには、デフォルトのStateListAnimatorをオーバーライドします。

これをボタンXMLに入れてみてください。

Android:stateListAnimator="@null"

これで、FrameLayoutがボタンを覆うはずです。

0
ahsiu