programing tip

onClick이 자식과 함께 LinearLayout에서 트리거되지 않았습니다.

itbloger 2020. 12. 28. 07:54
반응형

onClick이 자식과 함께 LinearLayout에서 트리거되지 않았습니다.


더 작은 TextView 자식이있는 사용자 지정 LinearLayout이 있습니다. TextView에서 다루지 않는 영역을 클릭 할 수 있기를 원하므로 clickable = true 및 onclicklistener를 LinearLayout으로 설정했지만 onClick이 트리거되지 않습니다. TextView에 onclick 리스너를 설정하면 예상대로 작동합니다.

아무도 도울 수 있습니까?

ar_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ar_item" android:layout_width="202dp"
    android:layout_height="62dp" android:background="@drawable/bg_item_ar"
    android:clickable="true">

    <TextView android:id="@+id/ar_item_txt"
        android:layout_width="164dp" android:layout_height="fill_parent"
        android:paddingBottom="8dp" android:paddingLeft="8dp"
        android:paddingTop="8dp" android:paddingRight="6dp" android:gravity="center"
        android:background="#50000000" />

</LinearLayout>

내 맞춤 LinearLayout

public class ARView extends LinearLayout
{    

    public ARView(final Context context, String name, String id)
    {        
        super(context);  
        getLayoutInflater().inflate(R.layout.ar_item, this ,true);
        LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        inflater.inflate(R.layout.ar_item, null);

        TextView textView = (TextView) findViewById(R.id.ar_item_txt);
        textView.setText(name);

        setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {                   
                Toast t = Toast.makeText(context, "hey!", Toast.LENGTH_SHORT);
                t.show();
            }
        });
    }
}

모든 어린이를 위해

android : duplicateParentState = "true"


android:duplicateParentState="true" 나를 도와주지 않았다.

레이아웃을 자식과 함께 클릭 할 수 있도록하려면 모든 자식에 대해이 옵션을 추가해야합니다 .

 android:clickable="false"

그런 다음 갈 것입니다 처리를 클릭 최대부모 .


이것은 귀하의 경우가 아니지만 clickable과 비슷한 문제가 ViewGroup있습니다. 솔루션 찾는 상대의 시간이 내가 설정하는 것이 발견 후 android:inputTypeTextView내 내부 ViewGroup차단 된 onClick()수신기 (아무 생각없는 이유)

android:inputTypeTextView와 함께 사용하지 마십시오.


TextView 높이는 전체 상위 (전체 레이아웃)를 덮으므로 레이아웃이 아닌 빈 공간을 클릭 할 수 있습니다. TextView에 android : layout_height에 wrap_content를 사용해보세요. 레이아웃에 대한 클릭 리스너도 설정합니다.


사용자 정의보기를 사용하지 않습니다. 표준 LinearLayout을 사용하고 있습니다. XML 태그는 다음과 같아야합니다.

<com.yourcode.ARView ...> ... </com.yourcode.ARView>

android:duplicateParentState="true"내 만든 텍스트 뷰의 비활성화, 그리고 클릭 이벤트를 수신 할 수없는 것처럼 보이는.

필요한 것은 TextView 설정 뿐입니다clickable="false" . 따라서 click 이벤트는 부모 레이아웃으로 전달되고 TextView는 여전히 터치 이벤트에 반응 할 수 있습니다 (파급 효과 포함).


부모 LinearLayout의 android : clickable = "true"만들기

모든 하위보기의 android : clickable = "false"를 만듭니다 .

있는 LinearLayout에서 - 제거는 안드로이드 : inputType = "" 텍스트 뷰에서


확인해야 할 한 가지는 클릭하려는보기 위에 다른보기가 없다는 것입니다. 이것은 특히 FrameLayouts (하위 LinearLayout이 다뤄질 수있는 곳) 또는이 행을 업데이트하는 것을 잊었을 수있는 상대 레이아웃에서 일반적입니다.

android:layout_below="@id/shouldBeTheIdOfTheViewCurrentlyBeingCovered"

뷰가 같은 공간을 채우지 않도록합니다.


android:layout_height="fill_parent"레이아웃에 있는 textview에서 문제가 발생할 수 있습니다 . 그래도 문제가 해결되지 않으면 onClick () 이벤트가 문제 일 수 있습니다. 선형 레이아웃은 레이아웃이기 때문에 실제로 onClick ()을 호출하지 않을 수 있습니다. 대신 onTouch () 이벤트 리스너를 재정의하십시오.


문제의보기가 TextViews이면 focusable="false"첫 번째 클릭이 텍스트보기에 초점을 맞추는 데 사용되지 않도록 설정해야 할 수 있습니다.


linearlayout에 다음 속성을 추가합니다. 자식 뷰에서 처리하지 않는 Any Click 이벤트는 LinearLayout에 자동으로 전달됩니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:focusable="true"
    android:clickable="true">

<child/>
<child/>

</LinearLayout>

나는 같은 문제에 직면했고 모든 XML 속성이 작동하지 않았습니다. 프로그래밍 방식으로 뷰를 확장하고 추가하기 때문에 이것이 발생하는지 확실하지 않지만 이것이 문제를 해결하는 방법입니다.

I have a Class which extends LinearLayout, with a TextView and an ImageView. After inflating the layout and getting the views, I assigned the child views a OnClickListener, when pressed, executes the LineaLayout's onClickListner.

public class MyView extends LinearLayout {
private OnClickListener clickListener;
ImageView imageView;
TextView textView;

@Override
public void setOnClickListener(@Nullable OnClickListener l) {
    super.setOnClickListener(l);
    clickListener = l;
}

void afterViews() {
    imageView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            clickListener.onClick(MyView.this);
            return false;
        }
    });
    textView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            clickListener.onClick(MyView.this);
            return false;
        }
    });
}

I also tried overriding OnTouchListener, but then my child views didn't have the ripple effect, which I needed.


None of the solutions above forked for me. Than i noticed that a LinkMovementMethod set to TextView inside my LinearLayout. This class intercepts touch events, click events and properties of TextView such as clickable, focusable vs..


I faced the same problem, and all the XML attributes didn't work. I think this happens because I programmatically inflate and add the views. The fix for me was to - also that programatically - set the inflated root view not clickable:

View view = layoutInflater.inflate(R.layout.some_layout, someLinearLayout, false);
view.setClickable(false);

(Yes, I tried to have the some_layout not clickable in XML.)


Create a variable for LinearLayout

LinearLayout layout;
layout.setOnClicknersetOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {                   
                Toast t = Toast.makeText(context, "hey!", Toast.LENGTH_SHORT);
                t.show();
            }
        });

ReferenceURL : https://stackoverflow.com/questions/6763876/onclick-not-triggered-on-linearlayout-with-child

반응형