TextViewのロングクリックイベントのみを処理する必要があります(そしてこのイベントにポップアップメニューを表示します)。ただし、クリックするだけの場合は、このイベントをこのビューをホストしているレイアウトに転送する必要があります。
これを達成する方法は?
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();
}
}
...
}
このようにして、2つの連続したクリックイベントを受け取り、Androidには2つの標準的なクリック音があります。良くない。
これを達成する簡単な方法はありますか?
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に渡されません。