自定义标题 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