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:inputType
에 TextView
내 내부 ViewGroup
차단 된 onClick()
수신기 (아무 생각없는 이유)
android:inputType
TextView와 함께 사용하지 마십시오.
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 () 이벤트 리스너를 재정의하십시오.
문제의보기가 TextView
s이면 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
'programing tip' 카테고리의 다른 글
"X-Frame-Options에 의해 표시가 금지되어 문서 표시를 거부했습니다."YouTube 동영상 삽입 (0) | 2020.12.28 |
---|---|
EditorFor ()에 형식이 지정된 날짜 표시 (0) | 2020.12.28 |
WINDOWS RESTful 서비스의 cURL POST 명령 줄 (0) | 2020.12.28 |
설치된 코코아 포드의 버전을 확인하는 방법은 무엇입니까? (0) | 2020.12.28 |
JavaScript 런타임을 찾을 수 없습니다. (0) | 2020.12.28 |