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


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"

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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.