Pytanie Klikalny obraz - Android


Jak sprawić, aby obraz był klikalny? Próbowałem, ale bez powodzenia. Oto ostatni kod, który próbowałem (jest klikalny, ale pojawia się błąd):

    ImageView btnNew = (ImageView) findViewById(R.id.newbutton);
    btnNew.setOnClickListener(new View.OnClickListener() {

          @Override
          public void onClick(View v) {

            // do stuff
          }

        });      

a oto część z xml:

    <ImageView 
    android:src="@drawable/tbnewbutton" 
    android:text="@string/hello"
    android:layout_width="wrap_content"
    android:layout_alignParentRight="true"
    android:id="@+id/newbutton"
    android:clickable="true"
    android:onClick="clickImage"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" />

Po uruchomieniu tego kodu i kliknięciu obrazu pojawia się ten błąd:

01-24 19: 14: 09.534: BŁĄD / AndroidRuntime (1461): java.lang.IllegalStateException: Nie można znaleźć metody ClickImage (Wyświetl) w działaniu

TUTAJ ROZWIĄZANIE:

XML:

    <ImageButton
    android:src="@drawable/tbnewbutton" 
    android:text="@string/hello"
    android:layout_width="wrap_content"
    android:layout_alignParentRight="true"
    android:id="@+id/newbutton"
    android:clickable="true"
    android:onClick="clickNew"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="@null" />

Kod :

    public void clickNew(View v)
{
    Toast.makeText(this, "Show some text on the screen.", Toast.LENGTH_LONG).show();
}

15
2018-01-24 18:18


pochodzenie




Odpowiedzi:


Jak powiedzieli inni: zrób to ImageButton i zdefiniuj jego atrybut onClick

<ImageButton
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:layout_gravity="left"
     android:onClick="scrollToTop"
     android:src="@drawable/to_top_button"
/>

Obraz jest tutaj zakodowany w pliku res / drawable / to_top_button.png. Jeśli użytkownik kliknie przycisk, metoda scrollToTop() jest nazywany. Ta metoda musi zostać zadeklarowana w klasie, która ustawia układ z ImageButton jako układ zawartości.

public void scrollToTop(View v) {
    ...
}

Definiowanie programu obsługi OnClick w ten sposób oszczędza wiele pisania, a także zapobiega potrzebie anonimowych klas wewnętrznych, co jest korzystne dla śladu pamięci.


24
2018-01-24 18:51



Ok, ten działa, ale teraz mój obraz znajduje się wewnątrz przycisku. Więc hamuje mój układ. Aby to naprawić, dodałem do androida linię: background = "@ null" i wszystko działa idealnie! - user484146
Czy mógłbyś wtedy oznaczyć tę odpowiedź jako pomocną? - Heiko Rupp
Prawidłowe tło do użycia to android:background="?android:selectableItemBackground". - thirtythreeforty


Czy ImageButton rób co chcesz?

Komunikat o błędzie, który otrzymujesz, oznacza, że ​​nie masz metody w swojej aktywności, która pasuje do twojej procedury obsługi onClick.

Powinieneś mieć coś takiego clickImage(View view) w Twojej aktywności za pomocą implementacji obsługi kliknięć.


3
2018-01-24 18:22



Próbowałem z clickImage (View view), ale nie działa, przyczyną OnClickListner. Jeśli obrazek jest przezroczysty i pokaże tylko obraz (bez przycisku), mogę go użyć. - user484146
Och, jeśli jawnie ustawiasz obiekt nasłuchujący na onCreate, nie powinieneś mieć atrybutu onClick w swoim układzie. - Cheryl Simon
Próbowałem usunąć z kodu android: onClick = "clickImage", a wynikiem jest, że nic się nie dzieje po kliknięciu. - user484146


Możesz po prostu użyć klasy ImageButton ... http://developer.android.com/reference/android/widget/ImageButton.html


1
2018-01-24 18:22





Użyć ImageButton ;)


1
2018-01-24 18:22





Ustawiłeś metodę onclick, aby wywoływać "clickImage", gdy obraz jest klikany w twoim pliku XML, ale nie utworzyłeś w kodzie metody ClickImage. Nie powinieneś w ogóle ustawiać odbiornika onclick. Po prostu zaimplementuj metodę ze swojego XML i powinieneś ustawić.


0
2018-01-24 18:24