working - setonclicklistener layout android




帶有子項的onLineClick不在LinearLayout上觸發 (9)

您沒有使用您的自定義視圖; 你正在使用一個標準的LinearLayout。 你的XML標籤應該是:

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

我有一個自定義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();
            }
        });
    }
}

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


為每個孩子

機器人:duplicateParentState =“真”


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

android:layout_below="@id/shouldBeTheIdOfTheViewCurrentlyBeingCovered"

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


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


將以下屬性添加到線性佈局中未由子視圖處理的任何單擊事件將自動傳遞到LinearLayout。

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

<child/>
<child/>

</LinearLayout>

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

不要在TextView中使用android:inputType


我面臨同樣的問題,所有的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,但是然後我的孩子意見沒有我需要的連鎖反應。


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

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

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







android-linearlayout