使用 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
设置为 TextView
或 ImageView
时,您还应该将它们声明为 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>
我有一个线性布局,里面有 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
设置为 TextView
或 ImageView
时,您还应该将它们声明为 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>