Công cụ của What What: bối cảnh trong các tập tin bố cục Android?


937

Bắt đầu với phiên bản ADT mới gần đây, tôi đã nhận thấy thuộc tính mới này trên các tệp XML bố cục, ví dụ:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" />

"Công cụ: bối cảnh" được sử dụng để làm gì?

Làm thế nào mà nó thậm chí biết đường dẫn chính xác đến hoạt động được viết ở đó? Nó có nhìn vào gói của ứng dụng, bên trong tệp kê khai không?

Có giới hạn trong các lớp mở rộng Bối cảnh hay chỉ hoạt động? Có thể sử dụng cho các mục ListView, vv?


vâng, tôi tự hỏi tôi đã bỏ lỡ điều gì khác (mà không thấy nó trong phần "có gì mới") vì tôi luôn cài đặt phiên bản adt & sdk mới nhất (hiện đang sử dụng adt & sdk 20 preview 3).
nhà phát triển Android

9
Ngoài ra, hãy xem các tài liệu chính thức tại đây: < tools.android.com/tech-docs/tools-attribut#TOC-tools:context >.
MDTech.us_MAN

2
Ứng dụng của tôi vẫn hoạt động mà không có ngữ cảnh.
đáng kính nhất thưa ngài

1
@ user132522 Đó là tất cả về sự phát triển, trong chính IDE. Không dành cho khi chạy ứng dụng
nhà phát triển Android

Câu trả lời:


440

Đây là hoạt động mà trình soạn thảo UI sử dụng để hiển thị bản xem trước bố cục của bạn. Nó được ghi lại ở đây :

Thuộc tính này khai báo hoạt động nào bố cục này được liên kết với mặc định. Điều này cho phép các tính năng trong trình chỉnh sửa hoặc xem trước bố cục yêu cầu kiến ​​thức về hoạt động, chẳng hạn như chủ đề bố cục nên có trong bản xem trước và vị trí chèn trình xử lý onClick khi bạn tạo các trình xử lý từ quickfix


tôi hiểu rồi . theo ảnh chụp màn hình ở đây: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/ , điều đó có nghĩa là không phải là một lớp mở rộng Ngữ cảnh, phải không? nếu vậy, tôi nghĩ nó làm nhiều hơn những gì bạn đang nói, mặc dù tôi không chắc chắn những gì.
nhà phát triển Android

2
Activitymở rộng Context, vì vậy không chắc ý của bạn là gì? Nó thực sự có thể làm được nhiều hơn, nếu bạn quan tâm, hãy kiểm tra mã nguồn, nó có sẵn. Tôi không biết bất kỳ chi tiết.
Nikolay Elenkov

Giáo sư . tôi đã không đọc chính xác văn bản của ảnh chụp màn hình. xin lỗi. Khi di chuột qua những gì tôi đã thể hiện, nó cũng nói rằng nó có thể là một mảnh, nhưng các mảnh không có chủ đề của chúng được viết ở bất cứ đâu, phải không? Dù sao, tôi vẫn không chắc thuộc tính mới này để làm gì. tự hỏi nếu google mới io sẽ nói về điều này.
nhà phát triển Android

25
họ đã tạo một video mới cho thấy các tính năng này: youtube.com /
phát triển Android vào


380

Thuộc tính đó về cơ bản là sự kiên trì cho lựa chọn "Hoạt động liên kết" phía trên bố cục. Trong thời gian chạy, một bố cục luôn được liên kết với một hoạt động. Tất nhiên nó có thể được liên kết với nhiều hơn một, nhưng ít nhất một. Trong công cụ, chúng ta cần biết về ánh xạ này (trong thời gian chạy xảy ra theo hướng khác; một hoạt động có thể gọi setContentView (layout) để hiển thị bố cục) để điều khiển một số tính năng nhất định.

Ngay bây giờ, chúng tôi chỉ sử dụng một mục đích duy nhất: Chọn đúng chủ đề để hiển thị cho bố cục (vì tệp kê khai có thể đăng ký chủ đề để sử dụng cho một hoạt động và khi chúng tôi biết hoạt động được liên kết với bố cục, chúng tôi có thể chọn đúng chủ đề để hiển thị cho bố cục). Trong tương lai, chúng tôi sẽ sử dụng điều này để điều khiển các tính năng bổ sung - chẳng hạn như hiển thị thanh hành động (được liên kết với hoạt động), một nơi để thêm trình xử lý onClick, v.v.

Lý do đây là một công cụ: thuộc tính không gian tên là vì đây chỉ là một ánh xạ tuyệt đối để sử dụng bởi công cụ. Bản thân bố cục có thể được sử dụng bởi nhiều hoạt động / đoạn, v.v. Chúng tôi chỉ muốn cung cấp cho bạn một cách để chọn một ràng buộc tuyệt vọng để chúng tôi có thể hiển thị đúng chủ đề; bạn có thể thay đổi nó bất cứ lúc nào, giống như bạn có thể thay đổi các ràng buộc danh sách và phân đoạn của chúng tôi, v.v.

(Đây là bộ thay đổi đầy đủ có thêm chi tiết về điều này )

Và vâng, liên kết Nikolay được liệt kê ở trên cho thấy trình chọn cấu hình mới trông và hoạt động như thế nào

Một điều nữa: Không gian tên "công cụ" là đặc biệt. Công cụ đóng gói Android biết bỏ qua nó, vì vậy không có thuộc tính nào trong số đó sẽ được đóng gói vào APK. Chúng tôi đang sử dụng nó cho siêu dữ liệu bổ sung trong bố cục. Ví dụ, đó cũng là nơi các thuộc tính để loại bỏ các cảnh báo xơ xác được lưu trữ - dưới dạng công cụ: bỏ qua.


Làm thế nào để nó biết đường dẫn đầy đủ đến hoạt động nếu nó không có gói cơ sở? Nó nhìn vào tệp kê khai?
nhà phát triển Android

2
Có, nó xử lý nó giống như đăng ký hoạt động trong tệp kê khai, nơi bạn cũng có thể bỏ qua gói trong thuộc tính name. Nó chuẩn bị khai báo gói từ phần tử gốc tệp kê khai, nếu cần.
Tor Norbye

đẹp . tất cả những điều này (và hơn thế nữa) sẽ được hiển thị tại google io 2012? Tôi không thể chờ để nghe về các tính năng mới. :)
nhà phát triển Android

1
Trong XML được tạo cho một dự án mới, nó đặt tools:contextgiá trị trên TextViewtrường. Vì điều này nghe giống như trường hợp sử dụng toàn cầu để áp dụng một chủ đề cho toàn bộ bố cục, tại sao nó không được đặt trong bố cục gốc?
Jason Robinson

3
Tôi đã thêm một tài liệu ghi lại các thuộc tính công cụ hiện tại của chúng tôi: tools.android.com/tech-docs/tools-attribut
Tor Norbye

92

Theo trang web Dự án Công cụ Android :

công cụ: bối cảnh

Thuộc tính này thường được đặt trên phần tử gốc trong tệp XML bố cục và ghi lại hoạt động mà bố cục được liên kết với (tại thời điểm, vì rõ ràng một bố cục có thể được sử dụng bởi nhiều hơn một bố cục). Ví dụ, điều này sẽ được trình chỉnh sửa bố cục sử dụng để đoán chủ đề mặc định, vì các chủ đề được xác định trong Bản kê khai và được liên kết với các hoạt động, không phải bố cục. Bạn có thể sử dụng cùng một tiền tố dấu chấm như trong bảng kê khai để chỉ định lớp hoạt động mà không có tên gói ứng dụng đầy đủ làm tiền tố.

<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">  

Được sử dụng bởi: Trình chỉnh sửa bố cục trong Studio & Eclipse, Lint


14

1.Mô tả

tools: context = "activity name"nó sẽ không được đóng gói vào Trình chỉnh sửa bố cục apk. Chỉ ADTtrong tệp Bố cục hiện tại của bạn đặt bối cảnh kết xuất tương ứng, hiển thị Bố cục hiện tại của bạn trong kết xuất bối cảnh là tên hoạt động tương ứng với hoạt động, nếu hoạt động trong manifesttệp đặt Chủ đề, sau đó ADTTrình chỉnh sửa bố cục sẽ hiển thị Bố cục hiện tại của bạn theo MainActivityChủ đề. Có nghĩa là nếu bạn đặt Chủ đề. The Light (cái khác), sau đó bạn thấy trong trình quản lý bố cục trực quan o điều khiển nền của chủ đề nên là Chủ đề. The Light trông giống như. Chỉ để cho bạn thấy những gì bạn thấy là những gì bạn nhận được kết quả.

Một số người nhìn thấy sẽ hiểu một số, một số người nhìn thấy cũng không biết, tôi sẽ thêm một vài lời giải thích:

2. Mẫu

Lấy một tools:textví dụ đơn giản , ví dụ, một số hình ảnh khác, thuận tiện để hiểu thêm vềtools:context

<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="sample name1" />

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="sample name2" />

nhập mô tả hình ảnh ở đây

TextView1 đã thông qua android: textvà sử dụng tools:texttrong TextView2, ở phía bên phải của trình soạn thảo Bố cục sẽ hiển thị sample name1, sample name2hai phông chữ, nếu sau khi bạn chạy mã để biên dịch, tạo apk, chỉ hiển thị đầu cuối sample name1, không hiển thị sample name2các từ. Bạn có thể thử chạy, xem hiệu quả thế nào.

3. Mô tả cụ thể

1. Cái tools: context = "activity name"này sẽ không được đóng gói vào apk(hiểu: tương đương với điều này được nhận xét, biên dịch không có hiệu lực.)

2.Chỉ ADTTrình soạn thảo Bố cục (nghĩa là đối với biểu tượng trên ở bên phải trình giả lập) trong tệp Bố cục hiện tại đặt bối cảnh kết xuất tương ứng, Bố cục của XML hiện tại khi hiển thị bối cảnh là tên hoạt động tương ứng với hoạt động, nếu hoạt động trong tệp kê khai đặt Chủ đề, sau đó ADTTrình chỉnh sửa bố cục sẽ hiển thị Bố cục hiện tại của bạn theo MainActivityChủ đề. Có nghĩa là nếu bạn đặt Chủ đề. Ánh sáng cũng có thể là (khác). (Hiểu: bạn đã thêm tools: context = "activity name", bố cục XML đang hiển thị hoạt động được chỉ định, thiết lập Chủ đề trong tệp kê khai, hình trên mô phỏng Chủ đề bên phải cũng sẽ theo các thay đổi tương ứng với Chủ đề.)

4.summary

Tóm lại, các thuộc tính này chủ yếu nhắm vào các công cụ phù hợp, trạng thái hiển thị thời gian gỡ lỗi giả lập và biên dịch không hoạt động,


7

Các công cụ của người dùng: bối cảnh là một trong những Thuộc tính Thiết kế có thể tạo điều kiện cho việc tạo bố cục trong XML trong khung phát triển. Thuộc tính này được sử dụng để hiển thị khung phát triển, lớp hoạt động nào được chọn để thực hiện bố cục. Sử dụng các công cụ của Wikipedia: bối cảnh, một cách tự động, Android Studio chọn chủ đề cần thiết để xem trước.

Nếu bạn muốn biết thêm về một số thuộc tính và công cụ hữu ích khác để phát triển ứng dụng Android, hãy xem đánh giá này: http://case.azoft.com/4-must-ledge-tools-for-effective-android -phát triển/


3

Đây là giải pháp tốt nhất: https://developer.android.com/studio/write/tool-attribut

Đây là thuộc tính thiết kế, chúng ta có thể đặt bối cảnh kích hoạt trong xml như

tools:context=".activity.ActivityName"

Bộ chuyển đổi:

tools:context="com.PackegaName.AdapterName"

nhập mô tả hình ảnh ở đây

Bạn có thể điều hướng đến lớp java khi nhấp vào biểu tượng được đánh dấu và các công cụ có nhiều tính năng hơn như

tools:text=""
tools:visibility:""
tools:listItems=""//for recycler view 

etx


0

tools:context=".MainActivity" dòng này được sử dụng trong tệp xml cho biết tệp nguồn java nào được sử dụng để truy cập tệp xml này. nó có nghĩa là hiển thị bản xem trước xml này cho các tệp java vuông góc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.