blob: 8146a15786823a82ca413ede4e9a2e4bdd48c3f9 [file] [log] [blame]
page.title=Ảnh trong nh
page.keywords=preview,sdk,PIP,Picture-in-picture
page.tags=androidn
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>Trong tài liu này</h2>
<ol>
<li><a href="#declaring">Khai báo Hot động h tr
nh trong nh</a></li>
<li><a href="#pip_button">Chuyn Hot động sang nh trong nh</a>
</li>
<li><a href="#handling_ui">X lý UI trong chế độ nh trong nh</a>
</li>
<li><a href="#continuing_playback">Tiếp tc phát li video chế độ
nh trong nh</a></li>
<li><a href="#best">Thc hành Tt nht</a></li>
</ol>
<h2>Xem thêm</h2>
<ol>
<li><a href="{@docRoot}preview/features/multi-window.html">H tr
đa ca sổ</a></li>
</ol>
</div>
</div>
<p>Trong Android N, người dùng Android TV đã có th xem video
trong mt ca s được ghim vào mt góc màn hình khi điu hướng bên trong
các ng dng. Chế độ nh trong nh (PIP) cho phép ng dng chy mt hot động
video trong ca s được ghim trong khi mt hot động khác tiếp tc chy
ngm. Ca s PIP cho phép người dùng thc hin nhiu vic khi đang s dng ng dng ca bn,
giúp cho người dùng năng sut hơn.</p>
<p>ng dng ca bn có th quyết định khi nào thì kích hot chế độ PIP. Sau đây là mt vài ví d v
thi đim chuyn vào chế độ PIP:</p>
<ul>
<li>ng dng ca bn có th chuyn mt video vào chế độ PIP khi người dùng điu hướng
ri khi video đó để duyt ni dung khác.</li>
<li>ng dng ca bn có th chuyn mt video sang chế độ PIP khi người dùng xem đon cui
ca mt tp ni dung. Màn hình chính s hin th thông tin qung cáo
hoc tóm tt v tp tiếp theo trong lot video đó.</li>
<li>ng dng ca bn có th mang li cho người dùng mt cách để xếp hàng các ni dung b sung khi
h đang xem mt video. Video đó s tiếp tc được phát trong chế độ PIP trong khi màn hình
chính hin th hot động chn ni dung.</li>
</ul>
<p>Ca s PIP có kích thước 240x135 dp và được hin th trên lp trên cùng mt trong
bn góc ca màn hình được h thng chn. Người dùng có th gi ra mt menu PIP
, cho phép h bt tt ca s PIP lên toàn màn hình hoc đóng ca s
PIP bng cách bm gi nút <b>Home</b> trên điu khin t xa. Nếu mt video
khác bt đầu phát trên màn hình chính, ca s PIP s t động
được đóng. Người dùng cũng có th đóng ca s PIP thông qua nút Recents.</p>
<img src="{@docRoot}images/android-7.0/pip-active.png" />
<p class="img-caption"><strong>Hình 1.</strong> Mt video nh trong nh
được hin th góc màn hình khi người dùng duyt ni dung
trên màn hình chính.</p>
<p>PIP s dng các API đa ca s có trong Android N để
to ca s video nm chng được ghim. Để thêm chế độ PIP vào ng dng bn cn
đăng ký các hot động h tr PIP, chuyn hot động ca bn sang chế độ PIP khi
cn và đảm bo cho các phn t UI s b n đi và phát li video vn tiếp tc khi
hot động đó trong chế độ PIP.</p>
<h2 id="declaring">Khai báo Hot động h tr nh trong nh</h2>
<p>Theo mc định, h thng không t động h tr PIP cho các ng dng.
Nếu bn mun h tr chế độ PIP trong ng dng ca mình, hãy đăng ký hot động
video trong bn kê khai bng cách đặt
<code>android:supportsPictureInPicture</code> và
<code>android:resizeableActivity</code> thành <code>true</code>. Ngoài ra, hãy ch định
hot động ca bn x lý các thay đổi cu hình b trí để hot động đó
không khi chy li khi có các thay đổi v b trí trong quá trình chuyn tiếp chế độ PIP.</p>
<pre>
&lt;activity android:name="VideoActivity"
android:resizeableActivity="true"
android:supportsPictureInPicture="true"
android:configChanges=
"screenSize|smallestScreenSize|screenLayout|orientation"
...
</pre>
<p>Khi đăng ký hot động ca bn, hãy nh rng trong chế độ PIP, hot động
ca bn s được hin th trong mt ca s nh nm chng trên màn hình TV. Các hot động
phát li video vi UI ti gin s đem đến tri nghim người dùng tt nht. Các hot động
có cha nhng phn t UI nh có th không đem li tri nghim người dùng đạt yêu cu
khi được chuyn sang chế độ PIP bi người dùng không th thy các chi tiết ca phn t UI
trong ca s PIP.</p>
<h2 id="pip_button">Chuyn Hot động sang nh trong nh</h2>
Khi bn cn chuyn hot động ca mình sang chế độ PIP, hãy gi
<code>Activity.enterPictureInPicture()</code>. Ví d sau s chuyn
sang chế độ PIP khi người dùng chn mt nút PIP riêng trên thanh điu khin
media:</p>
<pre>
&#64;Override
public void onActionClicked(Action action) {
if (action.getId() == R.id.lb_control_picture_in_picture) {
getActivity().enterPictureInPicture();
return;
}
...
</pre>
<p>Thêm mt nút PIP vào thanh điu khin media ca bn s cho phép người dùng d dàng chuyn
sang chế độ PIP khi điu khin phát li video.</p>
<img src="{@docRoot}images/android-7.0/pip-button.png" />
<p class="img-caption"><strong>Hình 1.</strong> Mt nút nh trong nh
trên thanh điu khin media.</p>
<p>Android N có mt lp
<code>PlaybackControlsRow.PictureInPictureAction</code> mi định nghĩa
các hành động chế độ PIP trên thanh điu khin và s dng biu tượng PIP.</p>
<h2 id="handling_ui">X lý UI trong chế độ nh trong nh</h2>
<p>Khi hot động ca bn vào trong chế độ PIP thì hot động đó ch nên hin th phát li
video. Hãy xóa các phn t UI trước khi hot động ca bn vào chế độ PIP,
và khôi phc các phn t này khi hot động quay li chế độ toàn màn hình.
Ghi đè phương thc <code>Activity.onPictureInPictureChanged()</code> hoc
<code>Fragment.onPictureInPictureChanged()</code> và bt hoc
tt các phn t UI khi cn thiết, ví dụ:</p>
<pre>
&#64;Override
public void onPictureInPictureChanged(boolean inPictureInPicture) {
if (inPictureInPicture) {
// Hide the controls in picture-in-picture mode.
...
} else {
// Restore the playback UI based on the playback status.
...
}
}
</pre>
<h2 id="continuing_playback">Tiếp tc phát li video chế độ
nh trong nh</h2>
<p>Khi hot động ca bn chuyn sang chế độ PIP thì h thng s coi hot động đó đang trong
trng thái tm dng và s gi phương thc <code>onPause()</code> ca hot động. Vic phát li
video không nên được tm dng và cn được tiếp tc phát nếu hot động
b tm dng do chế độ PIP. Hãy kim tra chế độ PIP trong phương thc
<code>onPause()</code> ca hot động và x lý vic phát li cho phù hp, ví
dụ:</p>
<pre>
&#64;Override
public void onPause() {
// If called due to PIP, do not pause playback
if (inPictureInPicture()) {
// Continue playback
...
}
// If paused but not in PIP, pause playback if necessary
...
}
</pre>
<p>Khi hot động ca bn chuyn ra khi chế độ PIP để quay tr v chế độ toàn màn hình thì
h thng s tiếp tc hot động ca bn và gi phương thc <code>onResume()</code>.</p>
<h2 id="best">Thc hành Tt nht</h2>
<p>PIP được dành cho các hot động phát li video toàn màn hình. Khi chuyn
hot động ca bn vào chế độ PIP, hãy tránh hin th bt k ni dung nào ngoài video.
Theo dõi khi hot động ca bn vào chế độ PIP và n đi các phn t UI, như mô t
trong <a href="#handling_ui">X lý UI trong chế độ nh trong nh</a>.</p>
<p>Vì ca s PIP được hin th dưới dng ca s ni góc
màn hình do đó bn cn tránh hin th các thông tin quan trng trong màn hình chính
bt k vùng nào có th b che khut bi ca s PIP.</p>
<p>Theo mc định, khi mt hot động đang trong chế độ PIP thì nó s không nhn tiêu đim nhp vào. Để
tiếp nhn các s kin nhp vào khi chế độ PIP, hãy s dng
<code>MediaSession.setMediaButtonReceiver()</code>.</p>