使用 LinearLayout、ImageView、TextView 设置 onClickListener

set onClickListener with LinearLayout, ImageView, TextView

我有一个线性布局,里面有 ImageView(图标)和 TextView("Settings")。像这样:

我希望当用户点击 LinearLayout 或 ImageView 或 TextView 时,启动另一个 Activity。

所以我在代码中这样做:

OnClickListenerLessons mOnClickListener = new mOnClickListenerLessons(){
@Override
            public void onClick(View v) {
                Intent i = new Intent(getActivity(), nextActivity.class);
                startActivity(i);
            }}

imageView.setOnClickListener(mOnClickListener);
linearLayout.setOnClickListener(mOnClickListener);
textView.setOnClickListener(mOnClickListener);

而且我发现它又大又乱,有没有办法让代码更干净?

非常感谢!

P.S: 这是我的 xml 文件

 <LinearLayout>
     ...
      <LinearLayout
            android:id="@+id/linear_layout_wrapper_lessons"
            style="@style/width_height_margin_for_items"
            android:layout_weight="25"
            android:clickable="true"
            android:gravity="center"
            android:orientation="horizontal" >
            <ImageView
                android:id="@+id/lessons_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/puzzle_piece" />

            <TextView
                android:id="@+id/home_lesson_textView"
                style="@style/text_view"
                android:clickable="true"
                android:text="@string/home_lesson_button" />
        </LinearLayout>
    ...
</LinearLayout>

这里是style.xml text_view

<style name="text_view">
    <item name="android:background">@null</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:textSize">22sp</item>
    <item name="android:layout_margin">5dp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@color/home_buttons_select_state_color</item>
</style>

如果您在 LinearLayout 中有 TextView 和 ImageView,如果您不需要处理父点击监听器的不同动作,则在它们上设置点击监听器是没有用的。

您只需要做:

linearLayout.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
        Intent i = new Intent(getActivity(), nextActivity.class);
        startActivity(i);
    }}
});

在您的 activity 中实现 OnClickListener 并覆盖 onClick() 方法并以这种方式编写

@Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.imageView1:
        case R.id.textview1:
        case R.id.linearlayout1:
            Intent i = new Intent(getActivity(), nextActivity.class);
            startActivity(i);
            break;
        default:
            break;
        }

    }

你可以有线性布局的情况只是因为你的控件在其中

按如下方式在布局 XML 中排列组件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Image android:="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
</LinearLayout>

然后为 LinearLayout

添加点击监听器

linearLayout.setOnClickListener(mOnClickListener);

当您将 onClickListener 设置为 TextViewImageView 时,您还应该将它们声明为 android:clickable="true"setClickable(true)

还有一个 LinearLayout 和一个 ImageView 和一个 TextView 可能不是必需的,为什么不直接添加带有 android:drawableLeft 的图像?嵌套 LinearLayouts 是一个很坏的习惯。

You can use single button with image and text.then set button width and height match_parent.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/ButtonTest"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:drawableLeft="@drawable/ic_launcher"
    android:paddingTop="32sp"
    android:text="this is text"
    android:textColor="#FFFFFF" >
</Button>

只需将以下行添加到您的两个子视图中,

android:clickable="false"

像这样,

<LinearLayout
            android:id="@+id/linear_layout_wrapper_lessons"
            style="@style/width_height_margin_for_items"
            android:layout_weight="25"
            android:clickable="true"
            android:gravity="center"
            android:orientation="horizontal" >
            <ImageView
                android:id="@+id/lessons_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/puzzle_piece"
                android:clickable="false" /> 
            <TextView
                android:id="@+id/home_lesson_textView"
                style="@style/text_view"
                android:clickable="true"
                android:text="@string/home_lesson_button" 
                android:clickable="false"/>
        </LinearLayout>