2012-05-10 32 views
5

Tôi có một TextView với android: autoLink = "web". Văn bản có chứa một số URL.Android - Tại sao tính năng tự động liên kết bỏ qua đường dẫn gốc của URL?

Ví dụ:
http://example.com/

Nhưng khi trả lại, nó liên kết các chương trình tên và tên miền nhưng bỏ qua các đường dẫn gốc.

Ví dụ ám như:
http://example.com/

Tại sao nó làm điều này và làm thế nào để làm cho nó tự động liên kết URL đầy đủ đúng cách?

Edit: Ngoài ra, các URL theo sau là một fullstop hoặc dấu phẩy:
http://example.com/,

đang được render thành:
http://example.com/,

Lưu ý rằng StackExchange Tự động liên kết một cách chính xác (xem tại nguồn cho câu hỏi này) .

Edit: Sam, đây là đoạn code:

 <TextView android:id="@+id/open_source" 
      android:text="@string/open_source" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textColor="#FFF" 
      android:paddingBottom="10dp" 
      android:autoLink="web" /> 

Một số văn bản:

<string name="open_source">Three examples, fully qualified http://isokeys.sourceforge.net/ missing root path http://isokeys.sourceforge.net and followed with a fullstop http://isokeys.sourceforge.net/.</string> 

nên làm như sau:
Ba ví dụ, có đủ điều kiện http://isokeys.sourceforge.net/ thiếu đường dẫn gốc http://isokeys.sourceforge.net và theo sau với một fullstop http://isokeys.sourceforge.net/.

là render thành:
Ba ví dụ, đầy đủ đường http://isokeys.sourceforge.net/thiếu rễ http://isokeys.sourceforge.net và theo sau với một fullstop http://isokeys.sourceforge.net/.

+0

Vui lòng đăng XML, chuỗi và bất kỳ thứ gì khác có liên quan. – Sam

+0

'http: // example.com /' và 'http: // example.com' là các URL tương đương. Bất kỳ máy chủ Web nào xử lý chúng theo cách khác đều bị cấu hình sai, IMHO. – CommonsWare

+0

CommonsWare: Tôi biết, nhưng đầu tiên là thích hợp. Khi kết thúc, dấu gạch chéo màu trắng ở cuối sẽ nổi bật như một ngón tay cái đã thấy. Chắc chắn phải có cách để nhận diện chính xác các URL chính xác. Đúng? –

Trả lời

0

tôi sẽ chỉ cần chỉ ra hai điều:
1) Khi bạn thiết lập tự động liên kết để bình đẳng " web ", trong nền Android sử dụng các công cụ từ gói android.text.util để tìm các mục có thể thao tác được chứa trong văn bản của đối tượng Chế độ xem của bạn. Theo mặc định, android.text.util.Linkify có ý kiến ​​riêng về URL là gì và không hợp lệ (dựa trên kết hợp regex). Nếu bạn thực sự muốn sử dụng URL có dấu gạch chéo, bạn hoặc dấu phẩy được nối vào cuối, bạn có thể triển khai MatchFilter của riêng mình bằng các biểu thức chính quy của riêng nó. Bạn có thể tìm thấy tài liệu here trên trang web dành cho nhà phát triển Android
2) Dấu gạch chéo không thực sự có ý nghĩa trong URL chuẩn vì nó được sử dụng để chỉ ra vị trí đó trong phân cấp tài nguyên, nhưng nếu bạn không có gì sau dấu gạch chéo , sau đó bạn không đi qua một cấp độ khác của hệ thống phân cấp. Việc thêm một dấu phẩy hoặc dấu chấm không nên là cú pháp URL hợp lệ vì nó không hỗ trợ vị trí một tài nguyên trong hệ thống phân cấp của bạn, vì vậy tôi giả định regex của Android cho phù hợp bỏ qua nó để ngăn chặn bạn nhận được MalformedURLException khi nó cố gắng hành động trên liên kết

Các vấn đề liên quan