【问题标题】:FloatingActionButton OnClickListener not working on API 17FloatingActionButton OnClickListener 不适用于 API 17
【发布时间】:2015-11-12 14:16:01
【问题描述】:

我的 FAB onClick 无法在 API 17 上运行,但在 API 21 上运行良好。

我正在使用:

compile 'com.android.support:design:23.+'

FAB 布局:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/myFAB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_gravity="bottom"
    android:layout_marginBottom="26dp"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    app:backgroundTint="#FFC107"
    android:clickable="true"
    android:elevation="@dimen/design_fab_elevation"
    android:src="@drawable/ic_add_24dp"
    app:borderWidth="0dp" />

关于活动:

myFAB = (FloatingActionButton) findViewById(R.id.myFAB);
callCadastroEncoemnda();

protected void callCadastroEncoemnda() {
    myFAB.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, newPackage.class);
            MainActivity.this.startActivity(intent);
        }
    });
}

【问题讨论】:

  • 请定义“不工作”。你的应用程序崩溃了吗? logcat有什么东西吗?它表现出什么行为?你期望它做什么?
  • @MH。什么也没发生,不崩溃,logcat里什么都没有,就好像我没有点击一样
  • 您是否尝试从视图中删除android:clickable="true"?如果您设置点击侦听器,它看不到您需要它。我很快在我身边的一个 API 17 设备上进行了测试,但对我来说它可以工作。那就是:我没有你描述的问题。你可以在onClick() 回调中放置一个断点来查看它是否触发? newPackage.class 在我看来也有点可疑 - 它不符合 Java 命名约定。
  • @MH。我已经删除了android:clickable="true",但还是一样。我已经在 onClick 上放了一个断点,它没有被调用。问题是它在 API 21+ 上完美运行,但在 API 17 上却不行。newPackage.class 是我创建的一个 Activity,并且在 API 21+ 上完美运行。

标签: java android floating-action-button


【解决方案1】:

解决了!

在我的布局中,FloatingActionButton 位于 RecyclerView 的下方,当我点击 Fab 时,我点击的是 RecyclerView(那是空的)

之前:

    <android.support.v7.widget.Toolbar
        android:id="@+id/my_awesome_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/primary"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/myFAB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_gravity="bottom"
        android:layout_marginBottom="26dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        app:backgroundTint="#FFC107"
        android:clickable="true"
        android:elevation="@dimen/design_fab_elevation"
        android:src="@drawable/ic_add_24dp"
        app:borderWidth="0dp"
        android:layout_alignParentTop="false"
        android:layout_alignParentRight="false"
        android:layout_alignWithParentIfMissing="false"
        android:layout_alignParentLeft="false" />

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/my_awesome_toolbar">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/my_awesome_toolbar"
            android:layout_marginTop="?attr/actionBarSize" />
    </android.support.v4.widget.SwipeRefreshLayout>

之后:

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.Toolbar
            android:id="@+id/my_awesome_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/primary"
            android:elevation="4dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipeRefreshLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/my_awesome_toolbar">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rv"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/my_awesome_toolbar"
                android:layout_marginTop="?attr/actionBarSize" />
        </android.support.v4.widget.SwipeRefreshLayout>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/myFAB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_gravity="bottom"
            android:layout_marginBottom="26dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            app:backgroundTint="#FFC107"
            android:clickable="true"
            android:elevation="@dimen/design_fab_elevation"
            android:src="@drawable/ic_add_24dp"
            app:borderWidth="0dp"
            android:layout_alignParentTop="false"
            android:layout_alignParentRight="false"
            android:layout_alignWithParentIfMissing="false"
            android:layout_alignParentLeft="false" />
</RelativeLayout>

【讨论】:

  • 你是对的,但我没有明白。它适用于所有其他 API 版本,但不适用于 API 16。怎么会?
  • @Ranvijay 我认为是兼容性问题。我只为 android API 17+ 开发,适用于 87% 的设备。
猜你喜欢
  • 2013-04-27
  • 2017-07-24
  • 2018-10-21
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2020-04-24
  • 2015-03-07
  • 1970-01-01
相关资源
最近更新 更多