我只需要處理TextView的長按事件(並在此事件上顯示popup菜單)。但在簡單點擊的情況下,我應該將此事件轉移到託管此視圖的佈局。如何不在同一時間處理View.onClick()並處理View.onLongClick()?
如何實現這一目標?
public class MainActivity extends Activity implements OnLongClickListener, OnClickListener {
TextView mTextView;
RelativeLayout mTopLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.mTextView);
mTopLayout = (RelativeLayout) findViewById(R.id.mTopLayout);
mTextView.setOnLongClickListener(this);
mTopLayout.setOnClickListener(this);
mTextView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(this, v.getClass().getName() + " clicked!", Toast.LENGTH_SHORT).show();
if (v.getId() == R.id.mTextView) {
((View) v.getParent()).performClick();
}
}
...
}
這樣我們就會收到兩個連續的點擊事件,並且在android中會有兩個標準的點擊聲音。不好。
是否有一些簡單的方法來實現這一目標?
這裏是XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mTopLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/mTextView"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#FFFF0000"
android:clickable="false"
android:focusable="false"
android:text="@string/hello_world" />
</RelativeLayout>
編輯: 我想補充細節。如果我不會設置onClickListener,那麼在TextView中進行截圖沒有任何效果,並且此事件被mTextView消耗(即使可點擊和可聚焦在xml中設置爲false)並且不會傳遞給mTopLayout
可能是GestureDetecter在這裏有幫助嗎? – Prizoff 2013-03-26 13:25:20
我正在做類似的事情! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42 2013-05-18 16:07:19