Android ImageButton ClickEvent не работает

Вот код, пожалуйста, может кто-нибудь просто сказать мне, как сделать событие onClick?

XML-файл действия, содержащий фрагмент навигационного ящика, представление "Изображение", "TextView", "ImageButton"

<?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>

Изображение экрана выглядит так

здесь класс деятельности

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 ошибочен или как?

1 ответ

Решение

Я обычно люблю подключать мои обратные вызовы в коде (только мои личные предпочтения).

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();
            }
        });

С этим вы можете удалить onClick атрибут в макете XML.

Если вы хотите всплывающее окно, то 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 что вы хотите нажать. Другими словами, некоторые другие представления блокируют или потребляют ваши клики.

Попробуйте переместить ваш ImageButton быть одним из последних элементов, которые вы добавляете в xml-файл, чтобы он был "поверх" всего остального, чтобы его можно было щелкнуть.

В качестве альтернативы вы можете попробовать сделать содержащие LinearLayout кликабельный вместо ImageButton, Таким образом, вы бы переместить android:onClick="onSettingsIconPressed" приписать LinearLayout который содержит ImageButton,

Другие вопросы по тегам