2016-04-29 4 views
1

Dieser war ein bisschen unerwartet für mich. Ich habe folgende Layout-Datei:Android-Ansicht oben auf Button und EditText verdeckt sie nicht

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
    android:id="@+id/MyButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/Hello" /> 
    <EditText 
    android:id="@+id/MyEditText" 
    android:layout_below="@id/MyButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/Hello" /> 
    <LinearLayout 
    android:layout_centerInParent="true" 
    android:layout_width="100dp" 
    android:layout_height="match_parent" 
    android:background="#ffffffff"> 
    </LinearLayout> 
</RelativeLayout> 

und ich war das Linearlayout zu obskurem Teil beiden Ansichten erwarten (Der Knopf und die EditText Des Ergebnis im Emulator ist genau das:.

emulator screenshot

result on the device

:

jedoch auf dem Gerät (A Moto G 3rd Generation) wird die Taste auf der Oberseite des Linearlayouts gezeigt

Außerdem kann ich immer noch auf den Button und den EditText auf den Teilen tippen, die durch das LinearLayout auf dem Gerät und dem Emulator verdeckt werden sollen.

clicking on the controls behind the linear layout

Meine Fragen dann sind: Wie kann ich das lineare Layout oben auf die Taste auf dem Gerät erscheinen zu lassen? Und wie kann ich verhindern, dass Taps auf dem LinearLayout auf die Schaltfläche umgeleitet werden und Text bearbeiten?

Vielen Dank.

Nur für den Fall verwende ich Xamarin für Android, aber es sollte nicht relevant sein.

Antwort

2

Wie kann ich das lineare Layout über der Schaltfläche auf dem Gerät erscheinen lassen?

Elevation ist das, was die Button vor der LinearLayout erscheinen lässt. Ansichten mit einer höheren Höhe erscheinen vorne. Es funktioniert im Emulator, weil Sie dort eine Android-Designversion verwenden.

Siehe: http://developer.android.com/training/material/shadows-clipping.html

„Um die Höhe einer Ansicht in einer Layout-Definition gesetzt ist, verwenden, um das android:elevation Attribut auf die Erhebung einer Ansicht in dem Code einer Tätigkeit gesetzt, die View.setElevation() Methode verwenden..“

Wie kann ich verhindern, dass Taps auf dem LinearLayout zur Schaltfläche umgeleitet und Text bearbeitet werden?

Mit android:clickable="true" auf LinearLayout. Grund dafür ist, dass, wenn LinearLayout nicht anklickbar ist, die Klicks schließlich an weiter zurückliegende Ansichten gesendet werden.

+0

Vielen Dank. Das Hinzufügen von android: elevation = "10dp" zum LinearLayout hat die Überlappung der Schaltfläche korrigiert. Taps auf dem linearen Layout werden jedoch weiterhin von der Schaltfläche oder dem Editiertext gehandhabt. Weißt du, wie das zu beheben ist? –

+0

Ziemlich sicher, das Problem ist, LinearLayout "erfasst keine Klickereignisse, so dass sie dann an weiter zurückliegende Ansichten gesendet werden. Haben Sie versucht, 'android: clickable =" true "' auf 'LinearLayout' zu setzen? – Nathanael

+0

Ja, das Hinzufügen beider Attribute hat beide Probleme behoben. Vielen Dank. –

Verwandte Themen