Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用LinearLayout、ImageView、TextView设置onClickListener_Android_Android Layout_Onclicklistener - Fatal编程技术网

Android 使用LinearLayout、ImageView、TextView设置onClickListener

Android 使用LinearLayout、ImageView、TextView设置onClickListener,android,android-layout,onclicklistener,Android,Android Layout,Onclicklistener,我有一个线性布局,里面有ImageView(图标)和TextView(“设置”)。像这样: 我希望当用户单击LinearLayout或ImageView或TextView时,另一个活动会启动 所以我在代码中这样做: OnClickListenerLessons mOnClickListener = new mOnClickListenerLessons(){ @Override public void onClick(View v) {

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

我希望当用户单击LinearLayout或ImageView或TextView时,另一个活动会启动

所以我在代码中这样做:

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);
我发现它非常笨重和凌乱,有没有办法让代码更干净

非常感谢

这里是我的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

<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>

@空的
匹配父项
匹配父项
22便士
5dp
大胆的
@颜色/主页按钮\u选择\u状态\u颜色

如果您在LinearLayout中有TextView和ImageView,如果您不需要处理父对象的click listener的不同操作,则在它们上设置click listener是无用的

您只需执行以下操作:

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

如果在LinearLayout中有TextView和ImageView,如果不需要处理父对象的单击侦听器的不同操作,则在它们上设置单击侦听器是无用的

您只需执行以下操作:

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

在活动中实现
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;
        }

    }

只有当控件位于linearlayout中时,才可以使用linearlayout,在活动中实现
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;
        }

    }

只有当控件位于linearlayout中时,才可以使用linearlayout

<?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)

在布局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
设置为
TextView
ImageView
时,还应将它们声明为
android:clickable=“true”
setClickable(true)


也可能不需要使用带有
ImageView
TextView
LinearLayout
,为什么不使用
android:drawableLeft
添加图像呢?嵌套
LinearLayouts
是一个非常坏的习惯。

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

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>
也可能不需要使用带有
ImageView
TextView
LinearLayout
,为什么不使用
android:drawableLeft
添加图像呢?嵌套
LinearLayouts
是一个非常坏的习惯。

您可以对图像和文本使用单个按钮。然后设置按钮宽度和高度匹配\u parent。
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>

只需在两个子视图中添加以下行

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>


我尝试仅为linearLayout设置OnlickListener并忽略文本视图,当我单击文本时,它不会启动新活动。当我尝试单击imageView和textView之间的空间(这是属于linearLayout的空间)时,它会启动我想要的新活动。这就是为什么我不得不为所有这些设置OnClickListener。@mochi但在您的xml文件中,您的LinearLayout是textview和imageview的父级?对不起,Fondesa,让我上载我的xml文件。我尝试只为LinearLayout设置OnClickListener,而忽略textview,当我单击文本时,它不会启动新活动。当我尝试单击imageView和textView之间的空间(这是属于linearLayout的空间)时,它会启动我想要的新活动。这就是为什么我不得不为它们设置OnClickListener。@mochi但在您的xml文件中,您的LinearLayout是textview和imageview的父级?对不起,Fondesa,让我上传我的xml文件。谢谢您的回答。我尝试仅为linearLayout设置OnlickListener并忽略textView,当我单击文本时,它不会启动新活动。当我尝试单击imageView和textView之间的空间(这是属于linearLayout的空间)时,它会启动我想要的新活动。这就是为什么我不得不为他们所有人设置一个监听器的原因。谢谢你的回答。我尝试仅为linearLayout设置OnlickListener并忽略textView,当我单击文本时,它不会启动新活动。当我尝试单击imageView和textView之间的空间(这是属于linearLayout的空间)时,它会启动我想要的新活动。这就是为什么我必须为他们所有人设置一个监听器的原因。这个对我来说似乎非常有效。谢谢这个对我来说似乎很有效。谢谢使用android:drawableLeft是非常好的建议,谢谢!这对我有用!使用android:drawableLeft是非常好的建议,谢谢!这对我有用!