我在里面有一个带有ImageView(图标)和TextView(“设置”)的线性布局。像这样:
我希望当用户点击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>
答案 0 :(得分:3)
当您将onClickListener
设置为TextView
或ImageView
时,您还应将其声明为android:clickable="true"
或setClickable(true)
。
同样拥有LinearLayout
ImageView
和TextView
可能不是必需的,为什么不用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>