android - como definir a barra de avaliação não é clicável e tocável no celular HTC

94

Meu aplicativo tem barras de classificação. Desejo definir que a barra de avaliação não pode ser clicada nem tocada. Para isso, adicionei o seguinte código no xmlarquivo de cada barra de avaliação.

Ele está funcionando na galáxia Samsung Apollo GT-i5801. Mas não está funcionando no celular HTC. Por quê?

código xml

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

obrigado

Naresh
fonte
1
você já experimentou em uma codificação como esta rating.setClickable (false);
Andro Selva
Não. Mas existe algum diff (xml e parte do código), existe?
naresh de
Não tenho certeza. Mas ainda não experimentei em xml. desculpe
Andro Selva

Respostas:

332

Você também pode definir o RatingBar como indicador do xml com o seguinte:

android:isIndicator="true"
Andy
fonte
4
esta é a melhor solução se você estiver usando isso na visualização de lista.
AlbertRosa
solução perfeita
Slobodan Antonijević
Funciona, mas você não pode alterar as classificações. ou seja, android: rating = "4" não funcionará. Sempre será 5.
Vishal
@Vishal pode muito bem ser o caso; muitas coisas mudam em 8 anos. Não estou mais trabalhando no Android, mas pelo que me lembro, havia uma maneira de definir a classificação. Provavelmente de código em vez de XML.
Andy
@Andy - Concordo, acabei de postar meu comentário para referência de outros desenvolvedores. Se for necessário desabilitar a barra de classificação com o indicador de classificação 4, então deve ser algo como android: rating = "4" e setOnTouchListener precisa ser substituído pelo indicador.
Vishal
19

É para escrever este código em seu setOnRatingBarChangeListener

ratingaddrate.setIsIndicator(true);

Atualização:

Você pode usar este exemplo em seu XML

android:isIndicator="true"

também adicione esta linha ao código

ratingBar.setFocusable(false);
Alireza Amini
fonte
18

Não defina ativado como falso, pois isso escurecerá o controle. O que você deseja fazer é substituir o listener on touch assim:

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

Então, basicamente você intercepta o toque e não faz nada com ele

Adicione também o seguinte código para bloquear rollovers de trackball

ratingBar.setFocusable(false);
Ryan C
fonte
7
Embora eu tenha escrito esta resposta e ela funcione, gosto mais da resposta de Andy abaixo
Ryan C
4
android: isIndicator = "true" é a solução adequada
dirkoneill
RESPOSTA ERRADA. A maneira correta é: android: isIndicator = "true" (XML) ou setIsIndicator (false) // CÓDIGO
Sileria de