自定义标题 android onClick ,调用了错误的 id
custom title android onClick , wrong id called
我已经为我的 activity 实现了自定义标题:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#3a5894" >
<LinearLayout
android:layout_width="50dp"
android:layout_height="100dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="vertical"
android:id="@+id/left_button_title_bar_main_content_fragment"
android:background="#90C3D4"
android:onClick="onClickTitleBar">
<ImageView android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#90C3D4"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:orientation="vertical"
android:id="@+id/center_textview_title_bar"
android:onClick="onClickTitleBar">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="15dp"
android:text="Quick Notes"
android:textColor="#ffffff"/>
</LinearLayout>
</RelativeLayout>
我的 activity 实现:
public class MainActivity extends Activity implements OnClickListener {
private LinearLayout leftButtonInTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// custom title
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
// full screen activity
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
// custom title bar
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar);
leftButtonInTitle = (LinearLayout) findViewById(R.id.left_button_title_bar_main_content_fragment);
以及我想处理点击的方法
public void onClickTitleBar(View v) {
int id = v.getId();
Log.e("","id : "+id);
Log.e("","button id: " + R.id.left_button_title_bar_main_content_fragment);
}
并且我已经注销了 v.getId 和线性布局的实际 ID。
而且我已经意识到 ID 不一样了。
这是日志:
E/﹕ id 2131493001
E/﹕ button id: 2131493000
如您所见,数字并不相同。
知道为什么会这样吗?
感谢任何帮助。
在您的 xml
文件中,两个 LinearLayout 的 onClick
属性值相同。
可能是您因此获得了不同的 ID。
尝试为两个 LinearLayouts 提供不同的 onClick
值。
您也已在 ID 为 R.id.center_textview_title_bar
的 LinearLayout 上设置了 onClick。因为是在RelativeLayout中,没有设置约束,而且是children的顺序"higher up",所以会显示在ID为R.id.left_button_title_bar_main_content_fragment
的LinearLayout之上,它将代替标题栏获取所有点击。
要解决此问题,请删除行
android:onClick="onClickTitleBar"
来自 ID 为 R.id.center_textview_title_bar
的 LinearLayout
我已经为我的 activity 实现了自定义标题:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#3a5894" >
<LinearLayout
android:layout_width="50dp"
android:layout_height="100dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="vertical"
android:id="@+id/left_button_title_bar_main_content_fragment"
android:background="#90C3D4"
android:onClick="onClickTitleBar">
<ImageView android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#90C3D4"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:orientation="vertical"
android:id="@+id/center_textview_title_bar"
android:onClick="onClickTitleBar">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="15dp"
android:text="Quick Notes"
android:textColor="#ffffff"/>
</LinearLayout>
</RelativeLayout>
我的 activity 实现:
public class MainActivity extends Activity implements OnClickListener {
private LinearLayout leftButtonInTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// custom title
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
// full screen activity
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
// custom title bar
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar);
leftButtonInTitle = (LinearLayout) findViewById(R.id.left_button_title_bar_main_content_fragment);
以及我想处理点击的方法
public void onClickTitleBar(View v) {
int id = v.getId();
Log.e("","id : "+id);
Log.e("","button id: " + R.id.left_button_title_bar_main_content_fragment);
}
并且我已经注销了 v.getId 和线性布局的实际 ID。 而且我已经意识到 ID 不一样了。
这是日志:
E/﹕ id 2131493001
E/﹕ button id: 2131493000
如您所见,数字并不相同。
知道为什么会这样吗?
感谢任何帮助。
在您的 xml
文件中,两个 LinearLayout 的 onClick
属性值相同。
可能是您因此获得了不同的 ID。
尝试为两个 LinearLayouts 提供不同的 onClick
值。
您也已在 ID 为 R.id.center_textview_title_bar
的 LinearLayout 上设置了 onClick。因为是在RelativeLayout中,没有设置约束,而且是children的顺序"higher up",所以会显示在ID为R.id.left_button_title_bar_main_content_fragment
的LinearLayout之上,它将代替标题栏获取所有点击。
要解决此问题,请删除行
android:onClick="onClickTitleBar"
来自 ID 为 R.id.center_textview_title_bar