使LinearLayout可以点击,但只能在其填充上获得响应,而不是在子视图上

时间:2018-05-02 01:02:09

标签: android android-layout android-xml

我正在尝试使LinearLayout可单击,并且此布局包含两个子视图:TextView和在TextView下形成下划线的视图。我尝试了很多解决方案但没有解决方案。

问题是可点击的LinearLayout仅在用户点击其填充时响应,而不是在用户点击子视图时响应。

当用户点击LinearLayout及其子视图的任何位置时,我希望整个线性布局传播一个按下状态。这是我的布局文件的相关部分(我已经尝试将子视图设置为可点击但是否定了可点击的整个区域):

...
        <LinearLayout
            android:id="@+id/routineday_page_set1_weight_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="5dp"
            android:orientation="vertical"
            android:background="?android:attr/selectableItemBackground"
            android:clickable="true"
            android:focusable="true">

            <TextView
                android:id="@+id/routineday_page_set1_weight_textview"
                style="@style/TextAppearance.AppCompat.Widget.Button.Borderless.Colored"
                android:textAllCaps="false"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@drawable/set_weight_text_selector"
                android:textSize="16sp"
                tools:text="260lbs"
                android:textAlignment="center"
                android:clickable="false"
                android:duplicateParentState="true"/>

            <View
                android:id="@+id/routineday_page_set1_weight_underline"
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@drawable/set_weight_underline"
                android:clickable="false"
                android:duplicateParentState="true"/>
        </LinearLayout>
    </LinearLayout>
...

非常感谢任何帮助。

编辑:我应该补充一下,整个区域当前设置为可点击,当用户点击LinearLayout的填充时,所有子视图都在响应。但是,当用户单击任何子元素时,没有单击响应。

1 个答案:

答案 0 :(得分:0)

您可以尝试覆盖LinearLayout的 def colorCheck(src,source): prevCount=0 counter=0; ans=20 for i in range(len(src)): counter=0 for s in range(len(source)): if colorDifference(src[0][0],src[0][1],src[0][2],source[0,s,0],source[0,s,1], source[0,s,2])>2: counter= counter+1 print("OKAY") if ans== 20: prevCount=counter counter=0 ans=src[0,3] elif counter>=prevCount: prevCount=counter counter=0 ans=src[0,3] #print(colorDifference(src[0][0],src[0][1],src[0][2],source[0,s,0],source[0,s,1],source[0,s,2])) return ans 方法。当touchEvent位于填充区域时,拦截事件。否则,将事件传播给子项。

有关Android触摸事件处理的更多信息,请阅读this article