使用LinearLayout,ImageView,TextView设置onClickListener

时间:2015-03-17 13:22:54

标签: android android-layout onclicklistener

我在里面有一个带有ImageView(图标)和TextView(“设置”)的线性布局。像这样:

enter image description here

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

所以我在代码中执行此操作:

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>

这是text_view

的style.xml
<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>

6 个答案:

答案 0 :(得分:3)

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

同样拥有LinearLayout ImageViewTextView可能不是必需的,为什么不用android:drawableLeft添加图片呢?嵌套LinearLayouts是一个非常糟糕的习惯。

答案 1 :(得分:1)

在您的活动中实施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;
        }

    }

只有因为你的控件在其中才能有一个线性布局的情况

答案 2 :(得分:0)

如果您在LinearLayout中有TextView和ImageView,如果您不需要处理父级点击侦听器的不同操作,则无法在其上设置点击侦听器。

你只需要这样做:

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

答案 3 :(得分:0)

将布局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);

答案 4 :(得分:0)

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>

答案 5 :(得分:0)

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

<块引用>

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>