Android RelativeLayout可点击的叠加视图

时间:2015-03-17 22:35:54

标签: android android-layout

我正在更改布局以使用RelativeLayout而不是复杂的嵌套LinerLayouts - 但是我遇到一些问题,因为获取OnClickListener以使View工作。

我已经尝试了常用的东西 - 从前面开始,设置可点击,将focusable / focusableInTouchMode设置为true和false,似乎没有什么对我有用。希望我犯了一个愚蠢的错误,你们可以帮助我:D

这是我的代码:

布局: <已删除,请参阅编辑>

自定义基础适配器:  <删除,结果只是一个布局问题>

布局适用于列表适配器中的行项目,我只需要使该行的一半可单击,因为另一半具有自己的切换(正常工作)。

提前感谢任何建议!!

编辑:这很奇怪 - 我将它从View更改为TextView,设置背景颜色,现在它正在显示 - 但它没有遵循相对布局设置:

        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/toggle"

具体而言,它不应与顶部对齐。但点击工作!现在让它一直覆盖到顶部......

EDIT2:

更新了布局代码:

<已移除,请参阅稍后编辑>

EDIT3:

橙色是clickView - 我希望它延伸到每行的顶部。

enter image description here

EDIT4 :(更改标题)

好的我现在已经正常工作了,clickView覆盖了左上角的行(并且没有使用特定的高度/宽度)。
这是当前的布局代码,让我知道是否有什么我应该做的不同/你能想到的任何改进!

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

    <View android:id="@+id/fakeView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_centerInParent="true"/>

    <TextView android:id="@+id/clickView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/toggle"
        android:layout_alignBottom="@+id/pokemonTypes" />
       <!-- android:background="#ffff914e" -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="001"
        android:id="@+id/pokemonNumber"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_margin="5dp" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Bulbasaur"
        android:id="@+id/pokemonName"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/pokemonNumber"
        android:layout_alignRight="@+id/fakeView"
        android:layout_marginLeft="5dp" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Grass"
        android:id="@+id/pokemonTypes"
        android:layout_below="@+id/pokemonName"
        android:layout_toRightOf="@+id/pokemonNumber"
        android:layout_alignRight="@+id/fakeView"
        android:layout_marginLeft="5dp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/pokemonImage"
        android:layout_centerInParent="true"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/fakeView" />

    <ToggleButton
        android:id="@+id/toggle"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:background="@drawable/check1"
        android:textOn=""
        android:textOff=""
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_margin="5dp"
        android:layout_centerInParent="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/toggle2" />

    <ToggleButton
        android:id="@+id/toggle2"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:background="@drawable/check2"
        android:textOn=""
        android:textOff=""
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_margin="5dp"
        android:layout_centerInParent="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/toggle3" />

    <ToggleButton
        android:id="@+id/toggle3"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:background="@drawable/check3"
        android:textOn=""
        android:textOff=""
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_margin="5dp"
        android:layout_centerInParent="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true" />

</RelativeLayout>

我想做的另一件事 - 在切换的右边添加一个更大的空间(可能是边距?),这样当滚动时,快速滚动条不会覆盖切换。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是基于您的回复的示例布局。它与您的原始布局不完全相同,但我尝试在适用时使其类似。请小心并比较缺少​​的差异。它在Designer中看起来几乎完美。

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

    <View
        android:id="@+id/fakeView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_centerInParent="true" />

    <TextView
        android:id="@+id/clickView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:layout_alignBottom="@id/info"
        android:layout_alignTop="@id/info"
        android:background="#ffff914e" />

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/info"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:orientation="horizontal">

        <TextView
            android:id="@+id/pokemonNumber"
            android:layout_width="wrap_content"

            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_margin="5dp"
            android:text="001"
            android:textAppearance="?android:attr/textAppearanceMedium" />

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

            android:orientation="vertical">

        <TextView
            android:id="@+id/pokemonName"
            android:layout_width="fill_parent"

            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/fakeView"

            android:layout_marginLeft="5dp"
            android:layout_toEndOf="@+id/pokemonNumber"
            android:layout_toRightOf="@+id/pokemonNumber"
            android:text="Bulbasaur"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/pokemonTypes"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"

            android:layout_marginStart="5dp"
            android:text="Grass"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        </LinearLayout>

        <ImageView
            android:id="@+id/pokemonImage"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignLeft="@+id/fakeView"
            android:layout_alignParentTop="true"
            android:layout_gravity="center" />

        <ToggleButton
            android:id="@+id/toggle"
            android:layout_width="25dp"
            android:layout_height="25dp"

            android:text="Toggle"

            android:textOn=""
            android:textOff=""
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:layout_gravity="center_vertical"
            android:layout_margin="5dp" />

    </LinearLayout>

</RelativeLayout>

注意:

  1. 嵌套的LinearLayout用于在水平方向/视图中设置一些UI元素。我给了它一个ID作为参考。
  2. 对于clickView,使用layout_alignBottom和layout_alignTop。我认为layout_alignParentTop及其底部对您的需求毫无用处。
  3. clickView的 layout_height wrap_content ,无需设置在不同屏幕分辨率下可能看起来不太好的特定高度。
  4. Textview pokemonTypes位于LinearLayout之后,因此它相对于pokemonName是垂直的。
  5. 总体而言,布局可能不完美符合您的规格。我认为这是一个好的开始。

    另一个好主意是使用 layout_weight 属性,但到目前为止我认为你并不需要它。 layout_weight避免使用特定值。请记住,我尝试阻止使用特定值,希望避免屏幕分辨率问题。