android - Как установить панель рейтинга, которая не нажимается и не доступна для касания в мобильном телефоне HTC

95

У моего приложения есть полосы рейтинга. Я хочу, чтобы панель рейтинга была недоступна для щелчка и касания. Для этого я добавил следующий код в xmlфайл каждой панели рейтинга.

Он работает в галактике Samsung Apollo GT-i5801. Но в мобильном телефоне HTC не работает. Зачем?

xml код

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

Спасибо

нареш
источник
1
Вы пробовали это в коде, подобном этому rating.setClickable (false);
Андро Сельва
Нет. Но есть ли какие-нибудь различия (xml и часть кода)?
naresh
Точно сказать не могу. Но в xml еще не пробовал. извините
Андро Сельва

Ответы:

333

Вы также можете установить RatingBar как индикатор из xml следующим образом:

android:isIndicator="true"
Энди
источник
4
это лучшее решение, если вы используете его в виде списка.
AlbertRosa
идеальное решение
Слободан Антониевич
Работает, но рейтинги изменить нельзя. т.е. android: rating = "4" работать не будет. Всегда будет 5.
Vishal
@Vishal, это вполне может быть так; за 8 лет многое изменилось. Я больше не работаю над Android, но, насколько я помню, был способ выставления рейтинга. Наверное, из кода, а не из XML.
Энди
@Andy - Я согласен, я только что опубликовал свой комментарий для справки других разработчиков. Если нужно отключить полосу рейтинга с индикатором рейтинга как 4, тогда это должно быть что-то вроде android: rating = "4" и setOnTouchListener необходимо переопределить для индикатора.
Vishal
20

Это напишите этот код в свой setOnRatingBarChangeListener

ratingaddrate.setIsIndicator(true);

Обновить :

Вы можете использовать этот пример в своем XML

android:isIndicator="true"

также добавить эту строку в Код

ratingBar.setFocusable(false);
Алиреза Амини
источник
18

Не устанавливайте для параметра enabled значение false, поскольку это приведет к затемнению элемента управления. Что вы хотите сделать, так это переопределить прослушиватель при касании следующим образом:

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

Так что в основном вы перехватываете касание и ничего не делаете с ним

Также добавьте следующий код, чтобы заблокировать опрокидывание трекбола.

ratingBar.setFocusable(false);
Райан С
источник
7
Несмотря на то, что я написал этот ответ, и он работает, мне больше нравится ответ Энди ниже
Ryan C
4
android: isIndicator = "true" - правильное решение
dirkoneill
НЕПРАВИЛЬНЫЙ ОТВЕТ. Правильный способ: android: isIndicator = "true" (XML) или setIsIndicator (false) // КОД
Sileria
0

Добавьте style = "? Android: attr / ratingBarStyleIndicator" в свой макет.
Например

<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
источник