android working 帶有子項的onLineClick不在LinearLayout上觸發




setonclicklistener layout android (11)

這個問題可能來自其layout中的android:layout_height="fill_parent"的textview。 如果這不能解決問題,問題可能是onClick()事件。 線性佈局可能實際上不會調用onClick(),因為它的佈局。 嘗試覆蓋onTouch()事件偵聽器。

我有一個自定義LinearLayout與一個較小的TextView子。 我希望能夠點擊沒有被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();
            }
        });
    }
}

我面臨同樣的問題,所有的XML屬性都不起作用。 我不知道是否發生這種情況,因為我以編程方式膨脹並添加視圖,但這是我如何解決這個問題。

我有一個類擴展LinearLayout,一個TextView和一個ImageView。 膨脹佈局和獲得的意見後,我分配的子視圖OnClickListener,按下時,執行LineaLayout的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;
        }
    });
}

我也嘗試覆蓋OnTouchListener,但是然後我的孩子意見沒有我需要的連鎖反應。


android:duplicateParentState="true"使得我的TextView看起來像被禁用,並且不能接收點擊事件。

所有你需要的是設置TextView clickable="false" 。 所以點擊事件會派發到父級佈局, TextView仍然可以對觸摸事件做出反應(帶有連鎖反應)。


為每個孩子

機器人:duplicateParentState =“真”


這不是你的情況,但我有可點擊的ViewGroup類似的問題。 一小時尋找解決方案後,發現我設置了android:inputType到我的ViewGroup裡面的阻止onClick()監聽器(不知道為什麼)

不要在TextView中使用android:inputType


您的TextView高度覆蓋了整個父級(整個佈局),因此您可以單擊空白區域而不是佈局。 嘗試使用您的TextView的android:layout_height的wrap_content。 設置佈局的點擊偵聽器。


如果有問題的視圖是TextView ,那麼您可能需要將它們設置為focusable="false"以便不使用第一次單擊重點放在文本視圖上。


上面的解決方案都沒有為我分手。 比我注意到一個LinkMovementMethod設置為我的LinearLayout TextView 。 這個類攔截觸摸事件,單擊事件和TextView屬性,如可點擊,可聚焦VS ..


讓你的父母LinearLayout的android:clickable =“true”

使所有的childview的android:clickable =“false”

在Linearlayout下 - 從TextView中刪除android:inputType =“”


有一件事要確定的是,另一種觀點不在你想要點擊的視圖之上。 這在FrameLayouts(你的子LinearLayout可能被覆蓋)中尤其常見,或者在相對佈局中你可能忘記更新這一行:

android:layout_below="@id/shouldBeTheIdOfTheViewCurrentlyBeingCovered"

所以意見不填充相同的空間。


android:duplicateParentState="true"沒有幫助我。

為了使您的佈局可以用它的孩子點擊,您需要為每個孩子添加這個選項:

 android:clickable="false"

然後點擊處理將上升





android-linearlayout