android - Jak ustawić pasek oceny, nie można go klikać ani dotykać w telefonie HTC

95

Moja aplikacja ma paski oceny. Chcę ustawić pasek oceny bez możliwości klikania i dotykania. W tym celu dodałem następujący kod w xmlpliku każdego paska oceny.

Działa w Samsung Galaxy Apollo GT-i5801. Ale to nie działa w telefonie HTC. Czemu?

kod xml

android:clickable="false"     
android:focusableInTouchMode="false"    
android:focusable="false"

dzięki

naresh
źródło
1
czy próbowałeś tego w kodowaniu takim jak ta ocena.setClickable (false);
Andro Selva
Nie. Ale czy są jakieś różnice (xml i część kodu)?
naresh
Niepewny. Ale jeszcze nie próbowałem tego w xml. przepraszam
Andro Selva

Odpowiedzi:

334

Możesz również ustawić RatingBar jako wskaźnik z xml, wykonując następujące czynności:

android:isIndicator="true"
Andy
źródło
4
jest to najlepsze rozwiązanie, jeśli używasz tego w widoku listy.
AlbertRosa
idealne rozwiązanie
Slobodan Antonijević
Działa, ale nie możesz zmienić ocen. tj. android: rating = "4" nie będzie działać. Zawsze będzie to 5.
Vishal
@Vishal może tak być; wiele rzeczy zmienia się w ciągu 8 lat. Nie pracuję już na Androidzie, ale z tego, co pamiętam, był sposób, w jaki można ustawić ocenę. Prawdopodobnie z kodu zamiast XML.
Andy
@Andy - zgadzam się, właśnie opublikowałem swój komentarz dla innych deweloperów. Jeśli trzeba wyłączyć pasek oceny ze wskaźnikiem oceny równym 4, powinno to być coś w rodzaju android: rating = "4", a setOnTouchListener musi zostać zastąpiony dla wskaźnika.
Vishal
20

To jest napisanie tego kodu w swoim setOnRatingBarChangeListener

ratingaddrate.setIsIndicator(true);

Aktualizacja :

Możesz użyć tego przykładu w swoim XML

android:isIndicator="true"

dodaj również tę linię do kodu

ratingBar.setFocusable(false);
alireza amini
źródło
18

Nie ustawiaj Enabled na false, ponieważ spowoduje to przyciemnienie kontrolki. To, co chcesz zrobić, to zastąpić słuchacza on-touch w następujący sposób:

import android.view.View.OnTouchListener;

RatingBar ratingBar = (RatingBar)findViewById(R.id.ratingBar);
ratingBar.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });

Więc w zasadzie przechwytujesz dotyk i nic z nim nie robisz

Dodaj również następujący kod, aby zablokować najazdy trackballa

ratingBar.setFocusable(false);
Ryan C.
źródło
7
Mimo że napisałem tę odpowiedź i działa, bardziej podoba mi się odpowiedź Andy'ego poniżej
Ryan C
4
android: isIndicator = "true" to właściwe rozwiązanie
dirkoneill
ZŁA ODPOWIEDŹ. Prawidłowy sposób to: android: isIndicator = "true" (XML) lub setIsIndicator (false) // CODE
Sileria,
0

Dodaj style = "? Android: attr / ratingBarStyleIndicator" do swojego układu
Na przykład

<RatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/review_star"
        style="?android:attr/ratingBarStyleIndicator"
        android:scaleX=".5"
        android:rating="3.5"
        android:scaleY=".5"
        android:transformPivotX="0dp"
        android:transformPivotY="0dp"
        android:max="5"/>
Infomaster
źródło