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


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"

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

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

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"/>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.