Android 使用LinearLayout、ImageView、TextView设置onClickListener
我有一个线性布局,里面有ImageView(图标)和TextView(“设置”)。像这样: 我希望当用户单击LinearLayout或ImageView或TextView时,另一个活动会启动 所以我在代码中这样做: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) {
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是非常好的建议,谢谢!这对我有用!