Android ImageButton ClickEvent 不起作用

标签 android onclicklistener android-imagebutton

这是代码,请问有人可以简单地告诉我如何使 onClick 事件运行吗?

Activity 的 xml 文件,其中包含抽屉导航 fragment 、 ImageView 、 TextView 、图像按钮

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <include
        android:id="@+id/app_bar"
        layout="@layout/app_bar" />


    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignTop="@+id/drawer_layout"
        android:adjustViewBounds="true"
        android:contentDescription="@string/ContentDescriptionProfileImage"
        android:src="@drawable/profile_pic" />

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView"
        android:background="#FFFFFF"
        android:orientation="horizontal"
        android:padding="5dp">

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

            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_gravity="center_vertical"
                android:padding="3dp"
                android:text="@string/profileName"
                android:textColor="#000000"
                android:textSize="18sp"
                android:textStyle="bold" />

        <ImageButton
            android:id="@+id/profileSettings"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:background="@null"
            android:contentDescription="@string/settingsIconDescription"
            android:padding="8dp"
            android:onClick="onSettingsIconPressed"
            android:src="@drawable/settings32" />
        </RelativeLayout>
    </LinearLayout>


    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/app_bar">

        <fragment
            android:id="@+id/fragment_navigation_drawer"
            android:name="studio25.materialdesign.NavigationDrawerFragment"
            android:layout_width="280dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:layout="@layout/fragment_navigation_drawer"
            tools:layout="@layout/fragment_navigation_drawer"></fragment>

    </android.support.v4.widget.DrawerLayout>


</RelativeLayout>

屏幕图像看起来像 this

这是 Activity 类

package studio25.materialdesign;

import android.annotation.TargetApi;
import android.os.Build;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.Toast;


public class ProfileView extends ActionBarActivity {

    private Toolbar toolbar;
    String title = "";
    ImageButton setttingsButton;

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile_view);
        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);

        this.getSupportActionBar().setTitle(title);
        getSupportActionBar().setDisplayShowHomeEnabled(true);


        NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)
                getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp((DrawerLayout) findViewById(R.id.drawer_layout), toolbar);

        setttingsButton= (ImageButton) findViewById(R.id.profileSettings);


        /*
        Window window = this.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.setStatusBarColor(this.getResources().getColor(R.color.primaryColor));
        */
    }


    public void onSettingsIconPressed(View v)
    {
        /*
        PopupMenu popupMenu=new PopupMenu(this,v);
        MenuInflater inflater=getMenuInflater();
        inflater.inflate(R.menu.profile_settings_popup_menu,popupMenu.getMenu());
        popupMenu.show();
        */

        Toast.makeText(this,"Event Click Occured",Toast.LENGTH_SHORT).show();
    }

}

我基本上想要在按钮单击上弹出菜单,但在调试时意识到我的按钮单击本身不起作用。

一些教程说对于弹出菜单,minSdkVersion应该是11,甚至改变了它。

没有什么可以帮助我。 是我的xml错误还是什么?

最佳答案

我通常喜欢在代码中连接回调(只是我个人的喜好)。

setttingsButton= (ImageButton) findViewById(R.id.profileSettings);
setttingsButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(this,"clicked!",Toast.LENGTH_SHORT).show();
            }
        });

使用此功能,您可以删除 xml 布局中的 onClick 属性。

如果你想要一个弹出窗口,那么 PopupWindow是一个不错的选择。

popupWindow = new PopupWindow(some_view_to_show, ViewGroup.LayoutParams.MATCH_PARENT, (int)popupHeight, false);
...
popupWindow.showAtLocation(view_to_inject_into, Gravity.NO_GRAVITY, 0, (size.y) - (int) popupHeight);

然后调用 popupWindow.dismiss(); 删除弹出窗口

您的问题也可能是,由于您使用的是 RelativeLayout,每个元素都会“堆叠”在彼此之上,因此您基本上“埋葬”了您的 ImageButton你想点击。换句话说,其他一些 View 正在阻止或消耗您的点击。

尝试将 ImageButton 移动到最后添加到 xml 文件的元素之一,使其位于其他所有元素的“顶部”,以便可以单击。

或者,您可以尝试使包含的 LinearLayout 可点击,而不是 ImageButton。因此,您可以将 android:onClick="onSettingsIconPressed" 属性移动到包含 ImageButtonLinearLayout

关于Android ImageButton ClickEvent 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28909955/

相关文章:

java - android 只振动 15 秒

android - Okhttp Authenticator addHeader() vs header()

java - 如何从不同的 Activity 类设置 onclicklistener?

java - Android应用程序由于button.setOnClickListener(this)而关闭

java - 如何在 Activity 中连续放置 6 个图像按钮

android - 无法在 Android 中解析 ImageButton 的 id

android - eclipse 中的 "An existing connection was forcibly closed by the remote host"

android - 如何使用协调器布局中的嵌套 ScrollView 进行平滑滚动

asp.net - 处理内容页面上的点击事件母版控制

android - 如何在按下图像按钮时突出显示它