我有一个使用以下XML布局的片段:
<?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:background="@drawable/card"
android:clickable="true"
android:onClick="editActions"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
style="@style/CardTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:duplicateParentState="true"
android:text="@string/title_workstation" />
<Button
android:id="@+id/factory_button_edit"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:duplicateParentState="true"
android:text="@string/label_edit" />
</LinearLayout>
如您所见,我在LinearLayout
上设置了 onClick 参数。现在在TextView
上,这个被正确触发,并且在所有空白区域上。就在Button
上,它不会调用我设置的onClick方法。
这是正常的吗?我需要做什么才能在LinearLayout
?/ / p>的任何地方调用onClick方法
答案 0 :(得分:9)
这是您在LinearLayout中所需要的:
android:onClick="editActions"
android:clickable="true"
以及在你的类中调用xml的一些方法:
public void editActions(View view){
//something TODO
}
答案 1 :(得分:6)
直接在代码中为您的按钮添加onClick Action:
Button btn = findViewById(R.id.factory_button_edit);
btn.setOnClickListener(button_click);
OnClickListener button_click = new OnClickListener() {
@Override
public void onClick(View v) {
editActions;
}
};
或xml add
android:onClick="editActions"
到你的按钮
答案 2 :(得分:4)
我认为你应该使用TouchDelegate:
Android提供了TouchDelegate类,使其成为可能 父母将儿童视角的可触摸区域扩展到儿童视野之外 界限。当孩子必须小但应该有孩子时,这很有用 更大的触摸区域。你也可以用这种方法缩小 如果需要,孩子的触摸区域。
答案 3 :(得分:2)
尝试这样做
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/card"
android:clickable="true"
android:onClick="editActions"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
style="@style/CardTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_workstation" />
<Button
android:id="@+id/factory_button_edit"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="clickMe"
android:text="@string/label_edit" />
</LinearLayout>
以及您的活动或片段
public void editActions(View v) {
Toast.makeText(this, "Layout", Toast.LENGTH_SHORT).show();
}
public void clickMe(View v) {
Toast.makeText(this, "clickMe", Toast.LENGTH_SHORT).show();
}
答案 4 :(得分:2)
好吧,如果这个带有一些孩子的酒吧,并且您希望只有这个酒吧可以点击儿童区 - 请尝试为父母中的每个孩子添加此选项:
android:clickable="false"
当然为主要版面添加setOnClickListener
,例如my blog
示例:
<LinearLayout
android:id="@+id/parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageButton
android:clickable="false"
android:layout_width="40dp"
android:layout_height="40dp"
android:text="Cinema"
android:textSize="13sp"
android:layout_marginRight="10dp" />
<Button
android:clickable="false"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="Check in"
android:textSize="13sp"/>
</LinearLayout>
答案 5 :(得分:1)
android:duplicateParentState="true"
没有帮助我。
要使您的布局可以与其子项一起使用,您需要为每个 孩子 添加此选项:
android:clickable="false"
然后点击处理将 向上 转到 父 。
答案 6 :(得分:0)
我猜您应该为Button删除此参数:
android:duplicateParentState="true"
答案 7 :(得分:0)
<select class="form-control" name="officeLocation" id="officeLocation" formControlName="officeLocation">
<option *ngFor="let countryName of officeLocations" value="{{countryName.officeLocationName}}">{{countryName.officeLocationName}}</option>
</select>
答案 8 :(得分:0)
好的,这可能会晚了,但是它将帮助其他正在寻找的人
如何为布局[android]设置onClick侦听器。
LinearLayout mLinearLayout = findViewById(R.id.your_linear_layout_name);
mLinearLayout.setonClickListener(new View.onClickListener(){
@Overide
public void onClick(View v){
//do want to do here
}
});
注意:
当按钮位于内部时,您无法在按钮上执行onClick侦听器 已经在监听onClick的线性布局,如果可以 单击第一个父级(线性布局)。 最佳做法是不要执行嵌套的onClick侦听器。
答案 9 :(得分:0)
要消除复制粘贴代码,可以使用以下代码为所有儿童OnClickListener
设置View
:
private void setClickListenerRecursively(View view, View.OnClickListener listener){
view.setOnClickListener(listener);
if(view instanceof ViewGroup){
ViewGroup viewGroup = (ViewGroup) view;
for(int i = 0; i < viewGroup.getChildCount(); i++){
View child = viewGroup.getChildAt(i);
setClickListenerRecursively(child, listener);
}
}
}