android - วิธีตั้งค่าแถบคะแนนไม่สามารถคลิกและสัมผัสได้ในมือถือ HTC


95

แอปพลิเคชันของฉันมีแถบการให้คะแนน ฉันต้องการตั้งค่าแถบการให้คะแนนคือไม่สามารถคลิกได้และไม่สามารถแตะได้ สำหรับสิ่งนี้ฉันได้เพิ่มรหัสต่อไปนี้ในxmlไฟล์ของแต่ละแถบการให้คะแนน

มันทำงานใน samsung galaxy Apollo GT-i5801 แต่มันไม่ทำงานในมือถือ HTC ทำไม?

รหัส xml

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

ขอบคุณ


1
คุณได้ลองใช้ในการเข้ารหัสเช่นนี้ rating.setClickable (เท็จ);
Andro Selva

ไม่ แต่มีส่วนต่าง (xml และโค้ด) อยู่หรือไม่
naresh

ไม่แน่ใจ. แต่ฉันยังไม่ได้ลองใช้ใน xml ขอโทษ
Andro Selva

คำตอบ:


334

คุณยังสามารถตั้งค่า RatingBar เป็นตัวบ่งชี้จาก xml ดังต่อไปนี้:

android:isIndicator="true"

4
นี่เป็นทางออกที่ดีที่สุดหากคุณใช้สิ่งนี้ในมุมมองรายการ
AlbertRosa

โซลูชั่นที่สมบูรณ์แบบ
Slobodan Antonijević

ใช้งานได้ แต่คุณไม่สามารถเปลี่ยนแปลงการให้คะแนนได้ เช่น android: rating = "4" จะไม่ทำงาน จะเป็น 5. เสมอ
วิชาล

@ Vishal มันอาจจะเป็นอย่างนั้นก็ได้ มีหลายสิ่งเปลี่ยนไปใน 8 ปี ฉันไม่ได้ทำงานบน Android อีกต่อไป แต่จากสิ่งที่ฉันจำได้มีวิธีตั้งค่าการให้คะแนน อาจมาจากโค้ดแทน XML
Andy

@Andy - ฉันเห็นด้วยฉันเพิ่งโพสต์ความคิดเห็นของฉันสำหรับการอ้างอิงของนักพัฒนาคนอื่น ๆ หากจำเป็นต้องปิดใช้งานแถบการจัดอันดับที่มีตัวบ่งชี้การให้คะแนนเป็น 4 ก็ควรเป็นเช่น android: rating = "4" และ setOnTouchListener จะต้องถูกแทนที่สำหรับตัวบ่งชี้
Vishal

20

นี่คือการเขียนโค้ดนี้ใน setOnRatingBarChangeListener ของคุณ

ratingaddrate.setIsIndicator(true);

อัปเดต:

คุณสามารถใช้ตัวอย่างนี้ใน XML ของคุณ

android:isIndicator="true"

เพิ่มบรรทัดนี้ใน Code ด้วย

ratingBar.setFocusable(false);

18

อย่าตั้งค่าเปิดใช้งานเป็นเท็จเพราะจะทำให้ตัวควบคุมจางลง สิ่งที่คุณต้องการทำคือแทนที่ตัวรับฟังแบบสัมผัสเช่นนี้:

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
แม้ว่าฉันจะเขียนคำตอบนี้และได้ผล แต่ฉันก็ชอบคำตอบของ Andy มากกว่าด้านล่าง
Ryan C

4
android: isIndicator = "true" คือโซลูชันที่เหมาะสม
dirkoneill

คำตอบที่ไม่ถูกต้อง. วิธีที่ถูกต้องคือ: android: isIndicator = "true" (XML) หรือ setIsIndicator (false) // CODE
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"/>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.