﻿﻿﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Diễn Đàn Tuổi Trẻ Việt Nam Uhm.VN - Tin học]]></title>
		<link>https://uhm.vn/forum/</link>
		<description><![CDATA[Diễn Đàn Tuổi Trẻ Việt Nam Uhm.VN - https://uhm.vn/forum]]></description>
		<pubDate>Fri, 17 Apr 2026 12:36:14 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Khai thác tốt lợi thế về nội dung - 1 khách hàng chia sẻ]]></title>
			<link>https://uhm.vn/forum/Thread-Khai-th%C3%A1c-t%E1%BB%91t-l%E1%BB%A3i-th%E1%BA%BF-v%E1%BB%81-n%E1%BB%99i-dung-1-kh%C3%A1ch-h%C3%A0ng-chia-s%E1%BA%BB</link>
			<pubDate>Mon, 05 Dec 2016 19:37:00 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=176090">ddangvanha</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-Khai-th%C3%A1c-t%E1%BB%91t-l%E1%BB%A3i-th%E1%BA%BF-v%E1%BB%81-n%E1%BB%99i-dung-1-kh%C3%A1ch-h%C3%A0ng-chia-s%E1%BA%BB</guid>
			<description><![CDATA[Ngày 01/12, lãnh đạo FPT Telecom đã đến thăm bác Bùi Xuân Huyền (Đống Đa, Hà Nội) - vị khách hàng lâu năm nhất của công ty với món quà tri ân đặc biệt là miễn phí 20 năm cước sử dụng dịch vụ Internet,Truyền hình FPT, dịch vụ chia sẻ trực tuyến FShare cùng 01 Tivi 49 inch thế hệ mới.<br />
 <br />
<span style="font-weight: bold;" class="mycode_b">1) Chung thủy sử dụng từ mạng Internet cho đến xe máy.</span><br />
 <br />
Chia sẻ về lý do gắn bó với mạng FPT, bác Bùi Xuân Huyền chia sẻ như sau: khi bác thành lập công ty năm 1995 thì chưa có mạng Internet nên giao dịch với khách hàng nước ngoài hoàn toàn thông qua Fax chi phí rất cao.<br />
 <br />
Và phải đến năm 1998, gần 1 năm sau thời điểm Việt Nam chính thức kết nối mạng, thì bác Huyền đã đăng ký sử dụng dịch vụ dial-up của FPT, hòm mail được tặng kèm có đuôi @fpt.vn. Sở dĩ bác chọn mạng FPT thay vì những mạng của doanh nghiệp khác là do tác phong làm việc của FPT Telecom rất nhanh.<br />
 <br />
Thay vì chậm chạp, chờ khách hàng đến với mình thì FPT Telecom rất chủ động tiếp cận, chăm sóc khách hàng khi mạng xảy ra sự cố. Nhờ sử dụng mạng FPT Telecom mà công ty của bác tiết kiệm được rất nhiều chi phí khi liên hệ với các đối tác nước ngoài. Mặt khác, họ cũng tin tưởng hơn khi giao dịch với công ty của bác qua hòm thư .vn thay vì yahoo.com tại thời điểm đó, bác Huyền cho biết thêm.<br />
 <br />
Sau thời gian ở Liên Trì, công ty của bác Huyền chuyển sang Lý Nam Đế rồi Thái Hà như hiện tại, nhưng vẫn tiếp tục kéo hợp đồng mạng FPT đi theo. Ngoài Lắp mạng FPT tại Hà Nội, cho đến giờ, tôi vẫn tiếp tục sử dụng email của FPT để giao tiếp cho công việc vì các đối tác, khách hàng đã quen thuộc với hòm mail này từ ngày trước. Nhân đây, được FPT gia tăng dung lượng email sẽ giúp tôi bớt đau đầu với số lượng mail lớn nhận được mỗi ngày, bác Huyền chia sẻ.<br />
 <br />
Bác tự nhận mình là người chung thủy vì không chỉ mạng FPT mà ngay cả xe gắn máy, Bác cũng đã gắn bó với chiếc xe Honda Dream từ những năm 1993, tính ra hiện tại cũng được 23 năm, hàng ngày bác vẫn sử dụng để đi lại từ nhà đến công ty. Khi sử dụng thấy tốt, tin tưởng dịch vụ thì chỉ có cơi nới, mở rộng chứ sẽ không hủy bỏ. Đó là lý do tại sao tôi sử dụng mạng FPT Telecom từ thời mạng dial-up, ADSL cho đến FTTH, bác Huyền chia sẻ.<br />
 <br />
<br />
lắp cáp quang fpt tại hà nội<br />
<br />
Chung thủy sử dụng từ mạng Internet cho đến xe máy<br />
<br />
 <br />
<span style="font-weight: bold;" class="mycode_b">2) FPT Telecom cần khai thác mạnh mẽ hơn về nội dung – đó là 1 lợi thế. </span><br />
 <br />
Khi được anh Nguyễn Văn Khoa, TGĐ FPT Telecom hỏi ý kiến về việc đơn vị nên làm như thế nào để đáp ứng tốt hơn nhu cầu của khách hàng, tăng khả năng cạnh tranh trong lĩnh vực viễn thông, bác Huyền cho rằng, FPT Telecom có lợi thế về mặt nội dung, cần phải khai thác triệt để đặc điểm này để tạo sự khác biệt.<br />
 <br />
Dù về hạ tầng, có thể 1 vài đơn vị sẽ có lợi thế hơn nhưng về nội dung thì chưa thể bằng được FPT. Các bạn đang chứng tỏ mình là 1 đơn vị sáng tạo, nhạy bén trong việc cung cấp nội dung cho khách hàng, cụ thể như: Truyền hình FPT thời gian gần đây. Khi khách hàng thấy cùng 1 tốc độ giống nhau, đường truyền giống nhau thì đơn vị nào có nội dung tốt hơn, phong phú hơn thì họ sẽ lựa chọn nhà cung cấp dịch vụ đó, bác Huyền không ngại đưa ra lời khuyên cho đơn vị.<br />
 <br />
Về vấn đề này, TGĐ FPT Telecom Nguyễn Văn Khoa cho rằng, FPT Telecom đang tập trung phát triển dịch vụ Truyền hình FPT với những lợi thế hơn so với truyền hình cáp truyền thống như có dịch vụ truyền hình xem lại, kho nội dung theo yêu cầu (VOD) thậm chí là hệ thống kênh truyền hình phong phú.v.v… để đáp ứng nhu cầu của mọi thành viên trong gia đình của khách hàng. Đầu tháng 12, Truyền hình FPT đã cho ra mắt chương trình tương tác, duy nhất trên nền tảng truyền hình IPTV tại Việt Nam mang tên Mở Két, anh cũng cho biết thêm, rất mong muốn bác Huyền có thể lắp kịp dịch vụ này để gia đình có thể tham gia, trải nghiệm chương trình tương tác này. <br />
 <br />
<br />
đăng ký cáp quang fpt<br />
<br />
FPT Telecom cần khai thác mạnh mẽ hơn về nội dung – đó là 1 lợi thế. <br />
<br />
<br />
Đứng trước xu thế của thế giới về phát triển các ứng dụng, dịch vụ thông minh trên nền tảng Internet, anh Khoa cho biết, FPT Telecom sẽ chính thức cho ra mắt nhiều sản phẩm công nghệ cao như hệ thống Home Security ứng dụng điện toán đám mây để lưu trữ dữ liệu cũng như truy cập thông qua smartphone mọi lúc mọi nơi, hay các dịch vụ thông minh theo xu thế IoT. Các đơn vị khác thường mua đứt bán đoạn nên chi phí thường khá cao, FPT Telecom lựa chọn việc cung cấp gói dịch vụ theo tháng để giảm giá thành, có thể liên tục cải tiến nhằm chăm sóc khách hàng được tốt hơn, anh Nguyễn Văn Khoa chia sẻ.<br />
 <br />
Cùng với chuỗi hoạt động dành cho khách hàng lâu năm tại Hà Nội, TP.HCM, 57 tỉnh thành trên cả nước, FPT Telecom cũng sẽ triển khai nhiều chương trình tri ân tới toàn bộ các khách hàng hiện hữu của công ty trong tháng 12 cùng với tháng 01/2017.]]></description>
			<content:encoded><![CDATA[Ngày 01/12, lãnh đạo FPT Telecom đã đến thăm bác Bùi Xuân Huyền (Đống Đa, Hà Nội) - vị khách hàng lâu năm nhất của công ty với món quà tri ân đặc biệt là miễn phí 20 năm cước sử dụng dịch vụ Internet,Truyền hình FPT, dịch vụ chia sẻ trực tuyến FShare cùng 01 Tivi 49 inch thế hệ mới.<br />
 <br />
<span style="font-weight: bold;" class="mycode_b">1) Chung thủy sử dụng từ mạng Internet cho đến xe máy.</span><br />
 <br />
Chia sẻ về lý do gắn bó với mạng FPT, bác Bùi Xuân Huyền chia sẻ như sau: khi bác thành lập công ty năm 1995 thì chưa có mạng Internet nên giao dịch với khách hàng nước ngoài hoàn toàn thông qua Fax chi phí rất cao.<br />
 <br />
Và phải đến năm 1998, gần 1 năm sau thời điểm Việt Nam chính thức kết nối mạng, thì bác Huyền đã đăng ký sử dụng dịch vụ dial-up của FPT, hòm mail được tặng kèm có đuôi @fpt.vn. Sở dĩ bác chọn mạng FPT thay vì những mạng của doanh nghiệp khác là do tác phong làm việc của FPT Telecom rất nhanh.<br />
 <br />
Thay vì chậm chạp, chờ khách hàng đến với mình thì FPT Telecom rất chủ động tiếp cận, chăm sóc khách hàng khi mạng xảy ra sự cố. Nhờ sử dụng mạng FPT Telecom mà công ty của bác tiết kiệm được rất nhiều chi phí khi liên hệ với các đối tác nước ngoài. Mặt khác, họ cũng tin tưởng hơn khi giao dịch với công ty của bác qua hòm thư .vn thay vì yahoo.com tại thời điểm đó, bác Huyền cho biết thêm.<br />
 <br />
Sau thời gian ở Liên Trì, công ty của bác Huyền chuyển sang Lý Nam Đế rồi Thái Hà như hiện tại, nhưng vẫn tiếp tục kéo hợp đồng mạng FPT đi theo. Ngoài Lắp mạng FPT tại Hà Nội, cho đến giờ, tôi vẫn tiếp tục sử dụng email của FPT để giao tiếp cho công việc vì các đối tác, khách hàng đã quen thuộc với hòm mail này từ ngày trước. Nhân đây, được FPT gia tăng dung lượng email sẽ giúp tôi bớt đau đầu với số lượng mail lớn nhận được mỗi ngày, bác Huyền chia sẻ.<br />
 <br />
Bác tự nhận mình là người chung thủy vì không chỉ mạng FPT mà ngay cả xe gắn máy, Bác cũng đã gắn bó với chiếc xe Honda Dream từ những năm 1993, tính ra hiện tại cũng được 23 năm, hàng ngày bác vẫn sử dụng để đi lại từ nhà đến công ty. Khi sử dụng thấy tốt, tin tưởng dịch vụ thì chỉ có cơi nới, mở rộng chứ sẽ không hủy bỏ. Đó là lý do tại sao tôi sử dụng mạng FPT Telecom từ thời mạng dial-up, ADSL cho đến FTTH, bác Huyền chia sẻ.<br />
 <br />
<br />
lắp cáp quang fpt tại hà nội<br />
<br />
Chung thủy sử dụng từ mạng Internet cho đến xe máy<br />
<br />
 <br />
<span style="font-weight: bold;" class="mycode_b">2) FPT Telecom cần khai thác mạnh mẽ hơn về nội dung – đó là 1 lợi thế. </span><br />
 <br />
Khi được anh Nguyễn Văn Khoa, TGĐ FPT Telecom hỏi ý kiến về việc đơn vị nên làm như thế nào để đáp ứng tốt hơn nhu cầu của khách hàng, tăng khả năng cạnh tranh trong lĩnh vực viễn thông, bác Huyền cho rằng, FPT Telecom có lợi thế về mặt nội dung, cần phải khai thác triệt để đặc điểm này để tạo sự khác biệt.<br />
 <br />
Dù về hạ tầng, có thể 1 vài đơn vị sẽ có lợi thế hơn nhưng về nội dung thì chưa thể bằng được FPT. Các bạn đang chứng tỏ mình là 1 đơn vị sáng tạo, nhạy bén trong việc cung cấp nội dung cho khách hàng, cụ thể như: Truyền hình FPT thời gian gần đây. Khi khách hàng thấy cùng 1 tốc độ giống nhau, đường truyền giống nhau thì đơn vị nào có nội dung tốt hơn, phong phú hơn thì họ sẽ lựa chọn nhà cung cấp dịch vụ đó, bác Huyền không ngại đưa ra lời khuyên cho đơn vị.<br />
 <br />
Về vấn đề này, TGĐ FPT Telecom Nguyễn Văn Khoa cho rằng, FPT Telecom đang tập trung phát triển dịch vụ Truyền hình FPT với những lợi thế hơn so với truyền hình cáp truyền thống như có dịch vụ truyền hình xem lại, kho nội dung theo yêu cầu (VOD) thậm chí là hệ thống kênh truyền hình phong phú.v.v… để đáp ứng nhu cầu của mọi thành viên trong gia đình của khách hàng. Đầu tháng 12, Truyền hình FPT đã cho ra mắt chương trình tương tác, duy nhất trên nền tảng truyền hình IPTV tại Việt Nam mang tên Mở Két, anh cũng cho biết thêm, rất mong muốn bác Huyền có thể lắp kịp dịch vụ này để gia đình có thể tham gia, trải nghiệm chương trình tương tác này. <br />
 <br />
<br />
đăng ký cáp quang fpt<br />
<br />
FPT Telecom cần khai thác mạnh mẽ hơn về nội dung – đó là 1 lợi thế. <br />
<br />
<br />
Đứng trước xu thế của thế giới về phát triển các ứng dụng, dịch vụ thông minh trên nền tảng Internet, anh Khoa cho biết, FPT Telecom sẽ chính thức cho ra mắt nhiều sản phẩm công nghệ cao như hệ thống Home Security ứng dụng điện toán đám mây để lưu trữ dữ liệu cũng như truy cập thông qua smartphone mọi lúc mọi nơi, hay các dịch vụ thông minh theo xu thế IoT. Các đơn vị khác thường mua đứt bán đoạn nên chi phí thường khá cao, FPT Telecom lựa chọn việc cung cấp gói dịch vụ theo tháng để giảm giá thành, có thể liên tục cải tiến nhằm chăm sóc khách hàng được tốt hơn, anh Nguyễn Văn Khoa chia sẻ.<br />
 <br />
Cùng với chuỗi hoạt động dành cho khách hàng lâu năm tại Hà Nội, TP.HCM, 57 tỉnh thành trên cả nước, FPT Telecom cũng sẽ triển khai nhiều chương trình tri ân tới toàn bộ các khách hàng hiện hữu của công ty trong tháng 12 cùng với tháng 01/2017.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hai lớp điều khiển Video Player Android]]></title>
			<link>https://uhm.vn/forum/Thread-Hai-l%E1%BB%9Bp-%C4%91i%E1%BB%81u-khi%E1%BB%83n-Video-Player-Android</link>
			<pubDate>Tue, 23 Feb 2016 17:22:59 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-Hai-l%E1%BB%9Bp-%C4%91i%E1%BB%81u-khi%E1%BB%83n-Video-Player-Android</guid>
			<description><![CDATA[<span style="font-size: 3pt;" class="mycode_size">Dưới đây là hai lớp điều khiển Video Player mà các bạn cần biết:<br />
<br />
- Lớp MediaController : Các android.widget.MediaController là một xem có chứa các điều khiển đa phương tiện như play/pause, trước đó, tiếp theo, nhanh về phía trước, tua lại vv<br />
<br />
- Lớp VideoView: Lớp android.widget.VideoView cung cấp phương pháp để chơi và điều khiển máy video. Các phương pháp thường được sử dụng trong lớp VideoView như sau:<br />
<br />
Phương thức	 Mô tả<br />
public void setMediaController(MediaController controller)	 thiết lập điều khiển đa phương tiện để hiển thị video.<br />
public void setVideoURI (Uri uri)	 thiết lập đường dẫn URI của tập tin video.<br />
public void start()	 bắt đầu hiển thị video.<br />
public void stopPlayback()	 ngừng phát lại.<br />
public void pause()	 tạm dừng phát lại.<br />
public void suspend()	 đình chỉ việc phát lại.<br />
public void resume()	 lại tiếp tục được phát ra.<br />
public void seekTo(int millis)	 tìm cách thời gian quy định trong mili giây.<br />
 <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html" target="_blank" rel="noopener" class="mycode_url">khoa hoc lap trinh android</a>  co ban tại hà nội <br />
Bởi sự giúp đỡ của lớp MediaController và VideoView, chúng ta có thể chơi các tập tin video trong Android. <br />
<br />
Kéo VideoView từ pallete, bây giờ các tập tin activity_main.xml sẽ như thế này:<br />
<br />
File: activity_main.xml<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android" <br />
xmlns:tools="http://schemas.android.com/tools" <br />
android:layout_width="match_parent" <br />
android:layout_height="match_parent" <br />
tools:context=".MainActivity" &gt; <br />
<br />
&lt;VideoView <br />
android:id="@+id/videoView1" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignParentLeft="true" <br />
android:layout_centerVertical="true" /&gt; <br />
<br />
&lt;/RelativeLayout&gt;</code></div></div><br />
Lớp Activity<br />
<br />
Let's write the code of to play the video file. Here, we are going to play 1.mp4 file located inside the sdcard/media directory.<br />
<br />
<span style="font-style: italic;" class="mycode_i">File: MainActivity.java</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.example.video1; <br />
<br />
import android.net.Uri; <br />
import android.os.Bundle; <br />
import android.app.Activity; <br />
import android.view.Menu; <br />
import android.widget.MediaController; <br />
import android.widget.VideoView; <br />
<br />
public class MainActivity extends Activity { <br />
<br />
@Override <br />
protected void onCreate(Bundle savedInstanceState) { <br />
super.onCreate(savedInstanceState); <br />
setContentView(R.layout.activity_main); <br />
<br />
VideoView videoView =(VideoView)findViewById(R.id.videoView1); <br />
<br />
//Creating MediaController <br />
MediaController mediaController= new MediaController(this); <br />
mediaController.setAnchorView(videoView); <br />
<br />
//specify the location of media file <br />
Uri uri=Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/media/1.mp4"); <br />
<br />
//Setting MediaController and URI, then starting the videoView <br />
videoView.setMediaController(mediaController); <br />
videoView.setVideoURI(uri); <br />
videoView.requestFocus(); <br />
videoView.start(); <br />
<br />
} <br />
<br />
@Override <br />
public boolean onCreateOptionsMenu(Menu menu) { <br />
// Inflate the menu; this adds items to the action bar if it is present. <br />
getMenuInflater().inflate(R.menu.activity_main, menu); <br />
return true; <br />
} <br />
<br />
}</code></div></div><br />
------------------- || -------------------<br />
Nguồn: <a href="http://laptrinhandroid.net.vn/video-player-trong-lap-trinh-android.html" target="_blank" rel="noopener" class="mycode_url">Video Player trong lập trình Android</a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: 3pt;" class="mycode_size">Dưới đây là hai lớp điều khiển Video Player mà các bạn cần biết:<br />
<br />
- Lớp MediaController : Các android.widget.MediaController là một xem có chứa các điều khiển đa phương tiện như play/pause, trước đó, tiếp theo, nhanh về phía trước, tua lại vv<br />
<br />
- Lớp VideoView: Lớp android.widget.VideoView cung cấp phương pháp để chơi và điều khiển máy video. Các phương pháp thường được sử dụng trong lớp VideoView như sau:<br />
<br />
Phương thức	 Mô tả<br />
public void setMediaController(MediaController controller)	 thiết lập điều khiển đa phương tiện để hiển thị video.<br />
public void setVideoURI (Uri uri)	 thiết lập đường dẫn URI của tập tin video.<br />
public void start()	 bắt đầu hiển thị video.<br />
public void stopPlayback()	 ngừng phát lại.<br />
public void pause()	 tạm dừng phát lại.<br />
public void suspend()	 đình chỉ việc phát lại.<br />
public void resume()	 lại tiếp tục được phát ra.<br />
public void seekTo(int millis)	 tìm cách thời gian quy định trong mili giây.<br />
 <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html" target="_blank" rel="noopener" class="mycode_url">khoa hoc lap trinh android</a>  co ban tại hà nội <br />
Bởi sự giúp đỡ của lớp MediaController và VideoView, chúng ta có thể chơi các tập tin video trong Android. <br />
<br />
Kéo VideoView từ pallete, bây giờ các tập tin activity_main.xml sẽ như thế này:<br />
<br />
File: activity_main.xml<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android" <br />
xmlns:tools="http://schemas.android.com/tools" <br />
android:layout_width="match_parent" <br />
android:layout_height="match_parent" <br />
tools:context=".MainActivity" &gt; <br />
<br />
&lt;VideoView <br />
android:id="@+id/videoView1" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignParentLeft="true" <br />
android:layout_centerVertical="true" /&gt; <br />
<br />
&lt;/RelativeLayout&gt;</code></div></div><br />
Lớp Activity<br />
<br />
Let's write the code of to play the video file. Here, we are going to play 1.mp4 file located inside the sdcard/media directory.<br />
<br />
<span style="font-style: italic;" class="mycode_i">File: MainActivity.java</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.example.video1; <br />
<br />
import android.net.Uri; <br />
import android.os.Bundle; <br />
import android.app.Activity; <br />
import android.view.Menu; <br />
import android.widget.MediaController; <br />
import android.widget.VideoView; <br />
<br />
public class MainActivity extends Activity { <br />
<br />
@Override <br />
protected void onCreate(Bundle savedInstanceState) { <br />
super.onCreate(savedInstanceState); <br />
setContentView(R.layout.activity_main); <br />
<br />
VideoView videoView =(VideoView)findViewById(R.id.videoView1); <br />
<br />
//Creating MediaController <br />
MediaController mediaController= new MediaController(this); <br />
mediaController.setAnchorView(videoView); <br />
<br />
//specify the location of media file <br />
Uri uri=Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/media/1.mp4"); <br />
<br />
//Setting MediaController and URI, then starting the videoView <br />
videoView.setMediaController(mediaController); <br />
videoView.setVideoURI(uri); <br />
videoView.requestFocus(); <br />
videoView.start(); <br />
<br />
} <br />
<br />
@Override <br />
public boolean onCreateOptionsMenu(Menu menu) { <br />
// Inflate the menu; this adds items to the action bar if it is present. <br />
getMenuInflater().inflate(R.menu.activity_main, menu); <br />
return true; <br />
} <br />
<br />
}</code></div></div><br />
------------------- || -------------------<br />
Nguồn: <a href="http://laptrinhandroid.net.vn/video-player-trong-lap-trinh-android.html" target="_blank" rel="noopener" class="mycode_url">Video Player trong lập trình Android</a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Đa phương tiện trong Android]]></title>
			<link>https://uhm.vn/forum/Thread-%C4%90a-ph%C6%B0%C6%A1ng-ti%E1%BB%87n-trong-Android</link>
			<pubDate>Sat, 20 Feb 2016 17:30:12 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-%C4%90a-ph%C6%B0%C6%A1ng-ti%E1%BB%87n-trong-Android</guid>
			<description><![CDATA[<span><h3><br />
Trong bài viết về cách sử dụng đa phương tiện trong ứng dụng Android này, chúng tôi sẽ xem xét hai loại chính trong khuôn khổ phương tiện truyền thông - MediaPlayer(API chính để chơi âm thanh và video) và AudioManager(Quản lý nguồn âm thanh và âm thanh đầu ra trên một thiết bị) và sử dụng chúng trong việc tạo ra một máy nghe nhạc đơn giản cho phép người sử dụng duyệt và chơi các nội dung từ SoundCloud.<br />
<br />
Trong Android, đa phương tiện được hỗ trợ chơi tốt cho nhiều loại phương diện truyền thông phổ biến, cho phép bạn tích hợp âm thanh, video và hình ảnh phù hợp vào ứng dụng khi bạn <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html" target="_blank" rel="noopener" class="mycode_url">học lập trình android</a>. Bạn có thể chơi nhạc bằng âm thanh hoặc từ video từ các tập tin đa phương tiện truyền thông lưu trữ trong tài nguyên ứng dụng, từ các tập tin độc lập trong hệ thống tập tin hoặc từ một dòng dữ liệu qua sự kết nối mạng.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Bắt đầu</span><br />
<br />
Như đã đề cập, các bạn sẽ được tạo ra một ứng dụng truy cập API SoundCloud, vì vậy đầu tiên bạn cần đăng ký một tài khoản trên cổng thông tin phát triển SoundCloud tại developers.soundcloud.com . Một khi bạn đã tạo một tài khoản hãy click vào Register và nó sẽ liên kết đến một trang mới.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Music-Streaming-Android-1.png" loading="lazy"  alt="[Image: Music-Streaming-Android-1.png]" class="mycode_img" /><br />
<br />
Trên màn hình sau, tên ứng dụng của bạn. Chúng tôi sẽ đặt tên SPPlayer ứng dụng của chúng tôi.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Music-Streaming-Android-2.png" loading="lazy"  alt="[Image: Music-Streaming-Android-2.png]" class="mycode_img" /><br />
<br />
Trên trang tiếp theo, bạn sẽ được hiển thị chi tiết của ứng dụng của bạn. Để lại các trang mở như bạn sẽ cần phải sao chép ID khách hàng hiển thị vào các ứng dụng Android.<br />
<br />
Với thiết lập, bây giờ chúng ta sẽ tạo ra các ứng dụng Android. Tạo một dự án Android mới (tôi đang sử dụng Android Studio. Nếu bạn đang sử dụng Eclipse, một số bước thực hiện trong hướng dẫn sẽ khác nhau, ví dụ thêm thư viện. Bạn có thể tìm sự giúp đỡ trực tuyến về cách sử dụng Eclipse.).<br />
<br />
Tạo một dự án mới và đặt tên cho SPPlayer ứng dụng. Đặt miền công ty của riêng bạn và nhấp vào Next. Trên màn hình tiếp theo, tôi rời SDK tối thiểu ở mặc định của API 15. Chọn mặc định Hoạt động Trống cài đặt trên màn hình tiếp theo và trên màn hình cuối cùng nhấn Finish.<br />
<br />
Tiếp theo mở file build.gradle của ứng dụng của bạn và thêm gson, trang bị thêm và thư viện picasso.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Music-Streaming-Android-3.png" loading="lazy"  alt="[Image: Music-Streaming-Android-3.png]" class="mycode_img" /><br />
<a href="http://laptrinhandroid.net.vn/" target="_blank" rel="noopener" class="mycode_url">laptrinhandroid.net.vn</a><br />
<br />
Thêm các phụ thuộc sau đây để các tập tin.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>compile 'com.google.code.gson:gson:2.3.1'<br />
compile 'com.squareup.retrofit:retrofit:1.8.0'<br />
compile 'com.squareup.picasso:picasso:2.4.0'</code></div></div>Tôi sẽ đi qua lý do tại sao chúng ta sử dụng ba thư viện như chúng ta tiến bộ thông qua các hướng dẫn.<br />
<br />
Khi bạn thay đổi các tập tin build.gradle, một thông báo sẽ cho bạn biết rằng một Sync là cần thiết cho các IDE để làm việc một cách chính xác. Nhấp chuột vào Sync Now ở bên phải của thông báo đó. Gradle sẽ lấy phụ thuộc thêm vào. Bạn sẽ cần một kết nối internet cho Gradle để lấy chúng.<br />
<br />
Để bắt đầu, đầu tiên tạo ra một class mà sẽ tổ chức một số dữ liệu cấu hình như ID của khách hàng và URL cơ sở cho các thiết bị đầu cuối SoundCloud. Tạo một lớp có tên Config và sửa đổi nó như hiển thị<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
/**<br />
* Created by echessa on 6/17/15.<br />
*/<br />
public class Config {<br />
<br />
public static final String CLIENT_ID = "YOUR_CLIENT_ID";<br />
public static final String API_URL = "https://api.soundcloud.com";<br />
}</code></div></div>Thay SoundCloud ID ứng dụng khách hàng của riêng bạn. Hằng API_URL giữ URL cơ sở cho thiết bị đầu cuối API như đã nêu trong SoundCloud HTTP API Reference này.<br />
<br />
Tiếp theo, tạo một đối tượng theo dõi mà sẽ giữ dữ liệu cho mỗi tập tin âm thanh lấy từ SoundCloud. Tạo một lớp được gọi là Track và thêm các lĩnh vực và phương thức getter sau.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
import com.google.gson.annotations.SerializedName;<br />
<br />
/**<br />
* Created by echessa on 6/17/15.<br />
*/<br />
public class Track {<br />
<br />
@SerializedName("title")<br />
private String mTitle;<br />
<br />
@SerializedName("id")<br />
private int mID;<br />
<br />
@SerializedName("stream_url")<br />
private String mStreamURL;<br />
<br />
@SerializedName("artwork_url")<br />
private String mArtworkURL;<br />
<br />
public String getTitle() {<br />
return mTitle;<br />
}<br />
<br />
public int getID() {<br />
return mID;<br />
}<br />
<br />
public String getStreamURL() {<br />
return mStreamURL;<br />
}<br />
<br />
public String getArtworkURL() {<br />
return mArtworkURL;<br />
}<br />
<br />
}</code></div></div>&gt;&gt; Khóa <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html" target="_blank" rel="noopener" class="mycode_url">học lập trình android</a> cơ bản tại hà nội !<br />
Trong đoạn mã trên, chúng tôi tạo ra bốn lĩnh vực mà sẽ giữ các dữ liệu theo dõi chúng ta quan tâm. Để biết liệu một cuộc gọi đến các API sẽ tiếp nhận, sử dụng các URL sau đó nạp dữ liệu một ca khúc duy nhất trong định dạng JSON.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>http://api.soundcloud.com/tracks/13158665.json?client_id=YOUR_CLIENT_ID</code></div></div>Chú ý các chú thích SerializedName trên từng lĩnh vực và việc nhập khẩu gson. Các thư viện Gson là một thư viện mã nguồn mở từ Google mà tuần tự và deserializes đối tượng Java (và từ) JSON. Ở trên, nó sẽ lấy JSON lấy và bản đồ cho các lĩnh vực của đối tượng, nếu không bạn sẽ phải viết rất nhiều mã để lấy dữ liệu từ JSON và tạo ra một đối tượng theo dõi với nó. Đây là lý do tại sao chúng ta không sử dụng bất kỳ setters trong lớp, Gson sẽ thiết lập các lĩnh vực tự động khi một đối tượng Track được tạo ra.<br />
<br />
Lưu ý: Tôi sẽ không được đề cập đến việc nhập khẩu cần thiết sau mỗi lần thêm mã. Nếu một nhập khẩu là cần thiết, các IDE sẽ nhắc bạn để thêm nó, và bạn cũng có thể thiết lập các IDE để nó giải quyết nhập khẩu tự động. Tôi sẽ chỉ đề cập đến nhập khẩu nếu có một cuộc xung đột nhập để cho bạn biết những lớp quyền sử dụng.<br />
<br />
Mở tập tin AndroidManifest.xml và thêm các phép sau đây.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;uses-permission android:name="android.permission.INTERNET"/&gt;</code></div></div>Tiếp theo, thêm một giao diện để các dự án được gọi là SCService. Sửa đổi nó như thể hiện.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
import java.util.List;<br />
<br />
import retrofit.Callback;<br />
import retrofit.http.GET;<br />
import retrofit.http.Query;<br />
<br />
/**<br />
* Created by echessa on 6/18/15.<br />
*/<br />
public interface SCService {<br />
<br />
@GET("/tracks?client_id=" + Config.CLIENT_ID)<br />
public void getRecentTracks(@Query("created_at[from]") String date, Callback&lt;List&lt;Track&gt;&gt; cb);<br />
<br />
}</code></div></div>Ở đây chúng ta sử dụng các thư viện Retrofit trong giao diện. Trang bị thêm một thư viện mã nguồn mở từ Square mà đơn giản hóa giao tiếp HTTP bằng cách chuyển các API từ xa vào khai báo, giao diện kiểu an. Phương pháp kê khai trên giao diện đại diện cho một điểm cuối API từ xa duy nhất. Chú thích mô tả cách thức các bản đồ vào một yêu cầu HTTP.<br />
<br />
Các thư viện giúp tải các JSON hay XML dữ liệu từ một API web đơn giản. Một khi dữ liệu được tải về, nó được phân tách thành một Object Plain Old Java (POJO) mà phải được xác định cho mỗi tài nguyên trong các phản ứng.<br />
<br />
Để kiểm tra điều này hoạt động diễn ra sau đây vào onCreate (Bundle) trong MainActivity.java sau khi cuộc gọi đến setContentView (R.layout.activity_main) ;.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(Config.API_URL).build();<br />
SCService scService = restAdapter.create(SCService.class);<br />
scService.getRecentTracks(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()), new Callback&lt;List&lt;Track&gt;&gt;() {<br />
@Override<br />
public void success(List&lt;Track&gt; tracks, Response response) {<br />
Log.d(TAG, "First track title: " + tracks.get(0).getTitle());<br />
}<br />
<br />
@Override<br />
public void failure(RetrofitError error) {<br />
Log.d(TAG, "Error: " + error);<br />
}<br />
});</code></div></div><br />
&gt;&gt; Khóa <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html" target="_blank" rel="noopener" class="mycode_url">học lập trình php </a>cơ bản tại hà nội !<br />
Thêm thuộc tính vào class<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private static final String TAG = "MainActivity";</code></div></div>Chạy ứng dụng và kiểm tra log. Bạn bên xem một dòng lệnh, nó sẽ hiện tiêu đề đầu tiên được lấy.<br />
<br />
Trong đoạn mã trên lớp RestAdapter tạo ra một thực hiện các giao diện SCService. Mỗi cuộc gọi trên SCService tạo ra làm cho một yêu cầu HTTP tới máy chủ web từ xa.<br />
<br />
Việc thực hiện ở trên không phải là cách tốt nhất để thực hiện các yêu cầu HTTP. Chúng tôi sẽ làm cho một số cuộc gọi đến máy chủ và sử dụng ở trên, chúng ta sẽ tạo ra một RestAdapter và SCService mỗi khi một yêu cầu được thực hiện và những người đang hoạt động đắt tiền, do đó hiệu suất tổng thể sẽ bị ảnh hưởng. Do đó chúng tôi sẽ sử dụng mẫu Singleton để các RestAdapter và SCService được tạo ra chỉ một lần và sử dụng bất cứ khi nào cần thiết. Thêm các lớp sau cho dự án.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
import retrofit.RestAdapter;<br />
<br />
/**<br />
* Created by echessa on 6/18/15.<br />
*/<br />
public class SoundCloud {<br />
<br />
private static final RestAdapter REST_ADAPTER = new RestAdapter.Builder().setEndpoint(Config.API_URL).build();<br />
private static final SCService SERVICE = REST_ADAPTER.create(SCService.class);<br />
<br />
public static SCService getService() {<br />
return SERVICE;<br />
}<br />
<br />
}</code></div></div>Điều này tạo ra các bộ chuyển đổi phần còn lại và dịch vụ như chúng tôi đã làm trước đó, sau đó nó có chức năng đó sẽ trở lại các dịch vụ. Kể từ REST_ADAPTER và SERVICE là final và static, họ sẽ chỉ được tạo ra một lần và tái sử dụng mỗi lần một đối tượng SoundCloud được tạo ra.<br />
<br />
Bây giờ bạn có thể sử dụng trong các đoạn mã chúng ta đặt trong onCreate(Bundle).<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>SCService scService = SoundCloud.getService();<br />
scService.getRecentTracks(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()), new Callback&lt;List&lt;Track&gt;&gt;() {<br />
@Override<br />
public void success(List&lt;Track&gt; tracks, Response response) {<br />
Log.d(TAG, "First track title: " + tracks.get(0).getTitle());<br />
}<br />
<br />
@Override<br />
public void failure(RetrofitError error) {<br />
Log.d(TAG, "Error: " + error);<br />
}<br />
});</code></div></div>Bây giờ chúng ta có thể nhận được dữ liệu từ máy chủ, chúng ta cần tạo một danh sách sẽ hiển thị dữ liệu.<br />
<br />
Thêm một tập tin bố trí bằng cách kích chuột phải vào thư mục Layout và chọn tập tin New -&gt; Layout. Đặt tên nó là track_list_row và thêm phần sau đây để các tập tin track_list_row.xml.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
android:orientation="vertical"<br />
android:paddingLeft="@dimen/activity_vertical_margin"<br />
android:paddingRight="@dimen/activity_vertical_margin"<br />
android:layout_width="match_parent"<br />
android:layout_height="@dimen/row_height"&gt;<br />
<br />
&lt;ImageView<br />
android:id="@+id/track_image"<br />
android:layout_centerVertical="true"<br />
android:padding="@dimen/image_padding"<br />
android:layout_width="@dimen/image_size"<br />
android:layout_height="@dimen/image_size"/&gt;<br />
&lt;TextView<br />
android:layout_centerVertical="true"<br />
android:id="@+id/track_title"<br />
android:layout_marginLeft="@dimen/activity_vertical_inner_margin"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:textAppearance="@style/TextAppearance.AppCompat.Body2"/&gt;<br />
<br />
&lt;/RelativeLayout&gt;</code></div></div>Trên đây tạo ra cách bố trí chúng tôi sẽ sử dụng cho mỗi hàng trong danh sách theo dõi. Chúng tôi sẽ đưa ra một hình ảnh của album art của theo dõi và tiêu đề của ca khúc.<br />
<br />
Sửa đổi activity_main.xml như hình vẽ.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"<br />
tools:context=".MainActivity"&gt;<br />
<br />
&lt;ListView<br />
android:id="@+id/track_list_view"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"/&gt;<br />
<br />
&lt;/RelativeLayout&gt;</code></div></div><br />
Thêm các dòng sau vào file dimen.xml. Không thay đổi bất kỳ giá trị nào trong file, chúng ta sẽ chit sử dụng chúng<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;dimen name="row_height"&gt;72dp&lt;/dimen&gt;<br />
&lt;dimen name="image_padding"&gt;4dp&lt;/dimen&gt;<br />
&lt;dimen name="image_size"&gt;48dp&lt;/dimen&gt;<br />
&lt;dimen name="activity_vertical_inner_margin"&gt;56dp&lt;/dimen&gt;</code></div></div><br />
Tiếp theo, tạo các bộ chuyển đổi tùy chỉnh sau đó sẽ được sử dụng để xem danh sách.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
import android.content.Context;<br />
import android.view.LayoutInflater;<br />
import android.view.View;<br />
import android.view.ViewGroup;<br />
import android.widget.BaseAdapter;<br />
import android.widget.ImageView;<br />
import android.widget.TextView;<br />
import com.squareup.picasso.Picasso;<br />
import java.util.List;<br />
<br />
/**<br />
* Created by echessa on 6/18/15.<br />
*/<br />
public class SCTrackAdapter extends BaseAdapter {<br />
<br />
private Context mContext;<br />
private List&lt;Track&gt; mTracks;<br />
<br />
public SCTrackAdapter(Context context, List&lt;Track&gt; tracks) {<br />
mContext = context;<br />
mTracks = tracks;<br />
}<br />
<br />
@Override<br />
public int getCount() {<br />
return mTracks.size();<br />
}<br />
<br />
@Override<br />
public Track getItem(int position) {<br />
return mTracks.get(position);<br />
}<br />
<br />
@Override<br />
public long getItemId(int position) {<br />
return position;<br />
}<br />
<br />
@Override<br />
public View getView(int position, View convertView, ViewGroup parent) {<br />
<br />
Track track = getItem(position);<br />
<br />
ViewHolder holder;<br />
if (convertView == null) {<br />
convertView = LayoutInflater.from(mContext).inflate(R.layout.track_list_row, parent, false);<br />
holder = new ViewHolder();<br />
holder.trackImageView = (ImageView) convertView.findViewById(R.id.track_image);<br />
holder.titleTextView = (TextView) convertView.findViewById(R.id.track_title);<br />
convertView.setTag(holder);<br />
} else {<br />
holder = (ViewHolder) convertView.getTag();<br />
}<br />
<br />
holder.titleTextView.setText(track.getTitle());<br />
<br />
// Trigger the download of the URL asynchronously into the image view.<br />
Picasso.with(mContext).load(track.getArtworkURL()).into(holder.trackImageView);<br />
<br />
return convertView;<br />
}<br />
<br />
static class ViewHolder {<br />
ImageView trackImageView;<br />
TextView titleTextView;<br />
}<br />
<br />
}</code></div></div>Các bộ chuyển đổi trên sử dụng các mẫu thiết kế ViewHolder đó cải thiện hiệu suất của một danh sách xem.<br />
<br />
Khi di chuyển qua một ListView, mã của bạn có thể gọi findViewById() thường xuyên có thể làm chậm hiệu suất. Ngay cả khi Adapter trả về một view tăng cao để tái chế, bạn vẫn cần phải tìm các yếu tố và cập nhật chúng. Một cách khoảng sử dụng lặp lại findViewById() là sử dụng các mẫu thiết kế ViewHolder.<br />
<br />
Một đối tượng ViewHolder cửa hàng mỗi lần xem thành phần bên trong các lĩnh vực thẻ của Layout, vì vậy bạn có thể ngay lập tức truy cập chúng mà không cần phải tìm họ nhiều lần.<br />
<br />
Trong đoạn mã trên, chúng tôi tạo ra một lớp học để giữ tập hợp các quan điểm: static class ViewHolder. Sau đó, trong getView (int, View, ViewGroup) Chúng ta sẽ chuyển ViewHolder và lưu trữ nó bên trong bố trí. Sau này, mỗi lần xem bây giờ có thể được truy cập mà không cần nhìn lên, tiết kiệm chu kỳ bộ xử lý có giá trị.<br />
<br />
Chúng tôi thiết lập các văn bản của hàng danh sách theo dõi là tiêu đề của bài hát và lấy hình ảnh của ca khúc bằng cách sử dụng thư viện Picasso. Các thư viện Picasso, cũng từ Square, là một tải hình ảnh và thư viện bộ nhớ đệm cho Android. Khác hơn so với tải và bộ nhớ đệm hình ảnh, bạn có thể làm một số biến đổi trên một hình ảnh với nó, giống như thiết lập kích thước và cây trồng. Bạn cũng có thể sử dụng nó để thiết lập một hình ảnh giữ chỗ đó sẽ hiển thị trong khi hình ảnh tải và một 'lỗi' hình ảnh sẽ hiển thị nếu tải không thành công. Trong đoạn mã trên, chúng ta sử dụng nó để tải các hình ảnh từ các url và đặt nó vào xem hình ảnh các danh sách theo dõi của hàng.<br />
<br />
Trong MainActivity.java thêm các biến lớp sau:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private List&lt;Track&gt; mListItems;<br />
private SCTrackAdapter mAdapter;</code></div></div><br />
Tạo các thay đổi sau đây để onCreate(Bundle) và thêm các  phương pháp loadTracks(List)  hiển thị dưới đây.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_main);<br />
<br />
mListItems = new ArrayList&lt;Track&gt;();<br />
ListView listView = (ListView)findViewById(R.id.track_list_view);<br />
mAdapter = new SCTrackAdapter(this, mListItems);<br />
listView.setAdapter(mAdapter);<br />
<br />
SCService scService = SoundCloud.getService();<br />
scService.getRecentTracks(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()), new Callback&lt;List&lt;Track&gt;&gt;() {<br />
@Override<br />
public void success(List&lt;Track&gt; tracks, Response response) {<br />
loadTracks(tracks);<br />
}<br />
<br />
@Override<br />
public void failure(RetrofitError error) {<br />
Log.d(TAG, "Error: " + error);<br />
}<br />
});<br />
}<br />
<br />
...<br />
<br />
private void loadTracks(List&lt;Track&gt; tracks) {<br />
mListItems.clear();<br />
mListItems.addAll(tracks);<br />
mAdapter.notifyDataSetChanged();<br />
}</code></div></div>Trong đoạn mã trên, chúng tôi tạo ra một danh sách xem và một thể hiện của SCTrackAdapter và thiết lập nó như là bộ chuyển đổi giao diện của danh sách. Sau đó chúng tôi nhận được bài hát gần đây từ các API và gọi loadTracks(List) mà chúng ta thêm các bài hát vào danh sách mảng được sử dụng bởi các bộ chuyển đổi và thông báo cho các bộ chuyển đổi của sự thay đổi.<br />
<br />
Chạy các ứng dụng và danh sách sẽ được tải với các bài hát gần đây từ SoundCloud và các album ảnh nghệ thuật sẽ hiển thị bên trái của danh sách. Đối với bài nhạc với không có album ảnh nghệ thuật, bạn có thể chỉ định một hình ảnh sẽ được hiển thị bằng Picasso. Tham khảo tài liệu để xem những gì khác các thư viện cung cấp.<br />
<br />
Music Streaming Android 4<br />
<br />
Khi bạn chọn một mục trong danh sách, không có gì xảy ra. Chúng tôi muốn các ca khúc được lựa chọn để được chơi.<br />
<br />
Đầu tiên chúng ta sẽ thêm một thanh công cụ phía dưới cùng của màn hình mà sẽ hiển thị các bài hát được lựa chọn và kiểm soát để vui chơi và tạm dừng. Sửa đổi activity_main.xml như hình vẽ.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"<br />
android:orientation="vertical"<br />
tools:context=".MainActivity"&gt;<br />
<br />
&lt;ListView<br />
android:id="@+id/track_list_view"<br />
android:layout_weight="100"<br />
android:layout_width="match_parent"<br />
android:layout_height="0dp"/&gt;<br />
<br />
&lt;android.support.v7.widget.Toolbar<br />
android:background="#333333"<br />
android:theme="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar"<br />
android:layout_width="match_parent"<br />
android:layout_height="100dp"&gt;<br />
<br />
&lt;ImageView<br />
android:id="@+id/selected_track_image"<br />
android:layout_width="92dp"<br />
android:layout_height="92dp"/&gt;<br />
<br />
&lt;TextView<br />
android:id="@+id/selected_track_title"<br />
android:paddingLeft="8dp"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"/&gt;<br />
<br />
&lt;ImageView<br />
android:id="@+id/player_control"<br />
android:layout_gravity="right"<br />
android:layout_width="@dimen/image_size"<br />
android:layout_height="@dimen/image_size"/&gt;<br />
<br />
&lt;/android.support.v7.widget.Toolbar&gt;<br />
<br />
&lt;/LinearLayout&gt;</code></div></div>Ở đây chúng ta thêm một thanh công cụ để bố trí mà được đặt ở dưới cùng của màn hình. Các thanh công cụ có một ImageView đó sẽ hiển thị các album ảnh nghệ thuật theo dõi, một TextView sẽ hiển thị tiêu đề của các ca khúc và một ImageView đó sẽ hiển thị chơi và tạm dừng các biểu tượng.<br />
<br />
Trong MainActivity.java thêm các biến lớp sau.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private TextView mSelectedTrackTitle;<br />
private ImageView mSelectedTrackImage;<br />
Add the following into onCreate(Bundle) below the listView.setAdapter(mAdapter); statement.<br />
<br />
mSelectedTrackTitle = (TextView)findViewById(R.id.selected_track_title);<br />
mSelectedTrackImage = (ImageView)findViewById(R.id.selected_track_image);<br />
<br />
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {<br />
@Override<br />
public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) {<br />
Track track = mListItems.get(position);<br />
<br />
mSelectedTrackTitle.setText(track.getTitle());<br />
Picasso.with(MainActivity.this).load(track.getArtworkURL()).into(mSelectedTrackImage);<br />
<br />
}<br />
});</code></div></div>Điều này đặt ra nhìn hình ảnh của thanh công cụ và xem văn bản với dữ liệu theo dõi được lựa chọn. Chạy các ứng dụng và chọn một bản nhạc từ danh sách, các thanh công cụ sẽ cập nhật với các thông tin của bài hát.<br />
<br />
Music Streaming Android 5<br />
<br />
Bây giờ cho bước cuối cùng của việc chơi các bản nhạc được chọn. Thêm dòng sau vào lớp.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private MediaPlayer mMediaPlayer;<br />
private ImageView mPlayerControl;</code></div></div>Sau đó, thêm lệnh sau đây sau khi gán biến mSelectedTrackImage.<br />
<br />
m<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>PlayerControl = (ImageView)findViewById(R.id.player_control);<br />
Thêm dòng sau vào onCreate (Bundle) sau khi setContentView (R.layout.activity_main); câu&nbsp;&nbsp;lệnh :<br />
<br />
mMediaPlayer = new MediaPlayer();<br />
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);<br />
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {<br />
@Override<br />
public void onPrepared(MediaPlayer mp) {<br />
togglePlayPause();<br />
}<br />
});</code></div></div>Ở phía trên, chúng tôi nhanh chóng mMediaPlayer và thiết lập kiểu dòng âm thanh cho nó. Các lớp MediaPlayer có thể được sử dụng để kiểm soát phát lại audio/video. Sau đó chúng ta đăng ký một callback sẽ được gọi khi các nguồn phương tiện truyền thông đã sẵn sàng để phát lại. Việc gọi lại làm cho một cuộc gọi đến các chức năng dưới đây.<br />
<br />
Thêm các chức năng sau vào trong lớp.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private void togglePlayPause() {<br />
if (mMediaPlayer.isPlaying()) {<br />
mMediaPlayer.pause();<br />
mPlayerControl.setImageResource(R.drawable.ic_play);<br />
} else {<br />
mMediaPlayer.start();<br />
mPlayerControl.setImageResource(R.drawable.ic_pause);<br />
}</code></div></div>}<br />
Trên đây làm một kiểm tra xem nếu người chơi phương tiện truyền thông đang phát. Nếu vậy, dừng nó và thay đổi các biểu tượng điều khiển máy nghe nhạc vào biểu tượng Play. Nếu người chơi phương tiện truyền thông đã không được chơi, nó bắt đầu chơi và thay đổi các biểu tượng vào biểu tượng Pause.<br />
<br />
Để có được các biểu tượng được sử dụng, tải về các thư mục tài sản và dán các thư mục drawable vào thư mục res của dự án của bạn. Các biểu tượng từ vật liệu thiết kế biểu tượng lưu trữ của Google.<br />
<br />
Tiếp thêm phương pháp onItemClick(AdapterView, View, int, long) sau đây để xem danh sách của onItemClick sau khi tuyên bố rằng bộ ảnh của thanh công cụ sử dụng Picasso.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>if (mMediaPlayer.isPlaying()) {<br />
mMediaPlayer.stop();<br />
mMediaPlayer.reset();<br />
}<br />
<br />
try {<br />
mMediaPlayer.setDataSource(track.getStreamURL() + "?client_id=" + Config.CLIENT_ID);<br />
mMediaPlayer.prepareAsync();<br />
} catch (IOException e) {<br />
e.printStackTrace();<br />
}</code></div></div>Khi một mục được lựa chọn, kiểm tra được thực hiện để xem nếu các cầu thủ đang chơi. Nếu một ca khúc đã được chơi, nó dừng lại và các phương tiện truyền thông sẽ được reset trước các bản nhạc được chọn có thể được chơi. Tiếp theo chúng ta thiết lập nguồn dữ liệu các phương tiện truyền thông máy nghe nhạc, mà là URL đầy đủ của các tập tin âm thanh mà xem trực tiếp. Sau đó chúng tôi chuẩn bị các cầu thủ để phát lại không đồng bộ. Bạn có thể có thể gọi prepare() hoặc prepareAsync(), nhưng đối với dòng bạn nên gọi prepareAsync() trả về ngay lập tức, thay vì ngăn chặn cho đến khi đủ dữ liệu đệm. Đối với các tập tin, đó là OK để gọi prepare() mà khối cho đến khi MediaPlayer đã sẵn sàng để phát lại.<br />
<br />
Sau đó, thêm những điều sau đây sau khi tuyên bố rằng khởi mPlayerControl.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mPlayerControl.setOnClickListener(new View.OnClickListener() {<br />
@Override<br />
public void onClick(View v) {<br />
togglePlayPause();<br />
}<br />
});</code></div></div><br />
Các trên đặt một nhấp chuột vào nghe để xem hình ảnh người chơi điều khiển mà Toggles chơi của người choi play/pause. Chạy các ứng dụng và bạn sẽ có thể chơi một tập tin âm thanh được lựa chọn, chuyển sang theo dõi khác bằng cách làm cho một sự lựa chọn mới và tạm dừng phát lại bằng cách khai thác Pause trong thanh công cụ.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Music-Streaming-Android-6.png" loading="lazy"  alt="[Image: Music-Streaming-Android-6.png]" class="mycode_img" /><br />
<br />
Khi các tập tin âm thanh hoàn chơi, biểu tượng của thanh công cụ sẽ tiếp tục hiển thị biểu tượng Pause. Chúng tôi muốn biểu tượng của thanh công cụ để thay đổi để chơi khi một ca khúc hoàn thành chơi. Để làm được điều này, chúng tôi sẽ đặt vào hoàn nghe trên máy nghe nhạc phương tiện truyền thông để phát hiện khi nó được thực hiện và thay đổi biểu tượng của thanh công cụ.<br />
<br />
Thêm sau đây gọi để mMediaPlayer.setOnPreparedListener().<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {<br />
@Override<br />
public void onCompletion(MediaPlayer mp) {<br />
mPlayerControl.setImageResource(R.drawable.ic_play);<br />
}<br />
});</code></div></div>Chạy ứng dụng và bây giờ các biểu tượng trên thanh công cụ nên thay đổi một lần một ca khúc hoàn thành chơi.<br />
<br />
Cuối cùng, thêm phần sau đây để các tập tin. Giải thoát cho các phương tiện truyền thông khi hoạt động này bị phá hủy. Chúng tôi không muốn được nắm giữ bất kỳ tài nguyên khi họ không sử dụng.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>@Override<br />
protected void onDestroy() {<br />
super.onDestroy();<br />
<br />
if (mMediaPlayer != null) {<br />
if (mMediaPlayer.isPlaying()) {<br />
mMediaPlayer.stop();<br />
}<br />
mMediaPlayer.release();<br />
mMediaPlayer = null;<br />
}<br />
}</code></div></div>Điều đó mang lại cho chúng tôi đến cuối của hướng dẫn. Chúng tôi đã tạo ra một máy nghe nhạc âm thanh đơn giản và thấy được cách sử dụng lớp MediaPlayer chơi audio stream. Hãy nhớ để dán SoundCloud Client ID vào lớp Config.java.<br />
<br />
<br />
-------------------- || --------------------<br />
Nguồn: <a href="http://laptrinhandroid.net.vn/huong-da-phat-trien-ung-dung-da-phuong-tien-android.html" target="_blank" rel="noopener" class="mycode_url">Hướng dẫn phát triển một ứng dụng Music Streaming Android</a><br />
</h3></span>]]></description>
			<content:encoded><![CDATA[<span><h3><br />
Trong bài viết về cách sử dụng đa phương tiện trong ứng dụng Android này, chúng tôi sẽ xem xét hai loại chính trong khuôn khổ phương tiện truyền thông - MediaPlayer(API chính để chơi âm thanh và video) và AudioManager(Quản lý nguồn âm thanh và âm thanh đầu ra trên một thiết bị) và sử dụng chúng trong việc tạo ra một máy nghe nhạc đơn giản cho phép người sử dụng duyệt và chơi các nội dung từ SoundCloud.<br />
<br />
Trong Android, đa phương tiện được hỗ trợ chơi tốt cho nhiều loại phương diện truyền thông phổ biến, cho phép bạn tích hợp âm thanh, video và hình ảnh phù hợp vào ứng dụng khi bạn <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html" target="_blank" rel="noopener" class="mycode_url">học lập trình android</a>. Bạn có thể chơi nhạc bằng âm thanh hoặc từ video từ các tập tin đa phương tiện truyền thông lưu trữ trong tài nguyên ứng dụng, từ các tập tin độc lập trong hệ thống tập tin hoặc từ một dòng dữ liệu qua sự kết nối mạng.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Bắt đầu</span><br />
<br />
Như đã đề cập, các bạn sẽ được tạo ra một ứng dụng truy cập API SoundCloud, vì vậy đầu tiên bạn cần đăng ký một tài khoản trên cổng thông tin phát triển SoundCloud tại developers.soundcloud.com . Một khi bạn đã tạo một tài khoản hãy click vào Register và nó sẽ liên kết đến một trang mới.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Music-Streaming-Android-1.png" loading="lazy"  alt="[Image: Music-Streaming-Android-1.png]" class="mycode_img" /><br />
<br />
Trên màn hình sau, tên ứng dụng của bạn. Chúng tôi sẽ đặt tên SPPlayer ứng dụng của chúng tôi.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Music-Streaming-Android-2.png" loading="lazy"  alt="[Image: Music-Streaming-Android-2.png]" class="mycode_img" /><br />
<br />
Trên trang tiếp theo, bạn sẽ được hiển thị chi tiết của ứng dụng của bạn. Để lại các trang mở như bạn sẽ cần phải sao chép ID khách hàng hiển thị vào các ứng dụng Android.<br />
<br />
Với thiết lập, bây giờ chúng ta sẽ tạo ra các ứng dụng Android. Tạo một dự án Android mới (tôi đang sử dụng Android Studio. Nếu bạn đang sử dụng Eclipse, một số bước thực hiện trong hướng dẫn sẽ khác nhau, ví dụ thêm thư viện. Bạn có thể tìm sự giúp đỡ trực tuyến về cách sử dụng Eclipse.).<br />
<br />
Tạo một dự án mới và đặt tên cho SPPlayer ứng dụng. Đặt miền công ty của riêng bạn và nhấp vào Next. Trên màn hình tiếp theo, tôi rời SDK tối thiểu ở mặc định của API 15. Chọn mặc định Hoạt động Trống cài đặt trên màn hình tiếp theo và trên màn hình cuối cùng nhấn Finish.<br />
<br />
Tiếp theo mở file build.gradle của ứng dụng của bạn và thêm gson, trang bị thêm và thư viện picasso.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Music-Streaming-Android-3.png" loading="lazy"  alt="[Image: Music-Streaming-Android-3.png]" class="mycode_img" /><br />
<a href="http://laptrinhandroid.net.vn/" target="_blank" rel="noopener" class="mycode_url">laptrinhandroid.net.vn</a><br />
<br />
Thêm các phụ thuộc sau đây để các tập tin.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>compile 'com.google.code.gson:gson:2.3.1'<br />
compile 'com.squareup.retrofit:retrofit:1.8.0'<br />
compile 'com.squareup.picasso:picasso:2.4.0'</code></div></div>Tôi sẽ đi qua lý do tại sao chúng ta sử dụng ba thư viện như chúng ta tiến bộ thông qua các hướng dẫn.<br />
<br />
Khi bạn thay đổi các tập tin build.gradle, một thông báo sẽ cho bạn biết rằng một Sync là cần thiết cho các IDE để làm việc một cách chính xác. Nhấp chuột vào Sync Now ở bên phải của thông báo đó. Gradle sẽ lấy phụ thuộc thêm vào. Bạn sẽ cần một kết nối internet cho Gradle để lấy chúng.<br />
<br />
Để bắt đầu, đầu tiên tạo ra một class mà sẽ tổ chức một số dữ liệu cấu hình như ID của khách hàng và URL cơ sở cho các thiết bị đầu cuối SoundCloud. Tạo một lớp có tên Config và sửa đổi nó như hiển thị<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
/**<br />
* Created by echessa on 6/17/15.<br />
*/<br />
public class Config {<br />
<br />
public static final String CLIENT_ID = "YOUR_CLIENT_ID";<br />
public static final String API_URL = "https://api.soundcloud.com";<br />
}</code></div></div>Thay SoundCloud ID ứng dụng khách hàng của riêng bạn. Hằng API_URL giữ URL cơ sở cho thiết bị đầu cuối API như đã nêu trong SoundCloud HTTP API Reference này.<br />
<br />
Tiếp theo, tạo một đối tượng theo dõi mà sẽ giữ dữ liệu cho mỗi tập tin âm thanh lấy từ SoundCloud. Tạo một lớp được gọi là Track và thêm các lĩnh vực và phương thức getter sau.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
import com.google.gson.annotations.SerializedName;<br />
<br />
/**<br />
* Created by echessa on 6/17/15.<br />
*/<br />
public class Track {<br />
<br />
@SerializedName("title")<br />
private String mTitle;<br />
<br />
@SerializedName("id")<br />
private int mID;<br />
<br />
@SerializedName("stream_url")<br />
private String mStreamURL;<br />
<br />
@SerializedName("artwork_url")<br />
private String mArtworkURL;<br />
<br />
public String getTitle() {<br />
return mTitle;<br />
}<br />
<br />
public int getID() {<br />
return mID;<br />
}<br />
<br />
public String getStreamURL() {<br />
return mStreamURL;<br />
}<br />
<br />
public String getArtworkURL() {<br />
return mArtworkURL;<br />
}<br />
<br />
}</code></div></div>&gt;&gt; Khóa <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html" target="_blank" rel="noopener" class="mycode_url">học lập trình android</a> cơ bản tại hà nội !<br />
Trong đoạn mã trên, chúng tôi tạo ra bốn lĩnh vực mà sẽ giữ các dữ liệu theo dõi chúng ta quan tâm. Để biết liệu một cuộc gọi đến các API sẽ tiếp nhận, sử dụng các URL sau đó nạp dữ liệu một ca khúc duy nhất trong định dạng JSON.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>http://api.soundcloud.com/tracks/13158665.json?client_id=YOUR_CLIENT_ID</code></div></div>Chú ý các chú thích SerializedName trên từng lĩnh vực và việc nhập khẩu gson. Các thư viện Gson là một thư viện mã nguồn mở từ Google mà tuần tự và deserializes đối tượng Java (và từ) JSON. Ở trên, nó sẽ lấy JSON lấy và bản đồ cho các lĩnh vực của đối tượng, nếu không bạn sẽ phải viết rất nhiều mã để lấy dữ liệu từ JSON và tạo ra một đối tượng theo dõi với nó. Đây là lý do tại sao chúng ta không sử dụng bất kỳ setters trong lớp, Gson sẽ thiết lập các lĩnh vực tự động khi một đối tượng Track được tạo ra.<br />
<br />
Lưu ý: Tôi sẽ không được đề cập đến việc nhập khẩu cần thiết sau mỗi lần thêm mã. Nếu một nhập khẩu là cần thiết, các IDE sẽ nhắc bạn để thêm nó, và bạn cũng có thể thiết lập các IDE để nó giải quyết nhập khẩu tự động. Tôi sẽ chỉ đề cập đến nhập khẩu nếu có một cuộc xung đột nhập để cho bạn biết những lớp quyền sử dụng.<br />
<br />
Mở tập tin AndroidManifest.xml và thêm các phép sau đây.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;uses-permission android:name="android.permission.INTERNET"/&gt;</code></div></div>Tiếp theo, thêm một giao diện để các dự án được gọi là SCService. Sửa đổi nó như thể hiện.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
import java.util.List;<br />
<br />
import retrofit.Callback;<br />
import retrofit.http.GET;<br />
import retrofit.http.Query;<br />
<br />
/**<br />
* Created by echessa on 6/18/15.<br />
*/<br />
public interface SCService {<br />
<br />
@GET("/tracks?client_id=" + Config.CLIENT_ID)<br />
public void getRecentTracks(@Query("created_at[from]") String date, Callback&lt;List&lt;Track&gt;&gt; cb);<br />
<br />
}</code></div></div>Ở đây chúng ta sử dụng các thư viện Retrofit trong giao diện. Trang bị thêm một thư viện mã nguồn mở từ Square mà đơn giản hóa giao tiếp HTTP bằng cách chuyển các API từ xa vào khai báo, giao diện kiểu an. Phương pháp kê khai trên giao diện đại diện cho một điểm cuối API từ xa duy nhất. Chú thích mô tả cách thức các bản đồ vào một yêu cầu HTTP.<br />
<br />
Các thư viện giúp tải các JSON hay XML dữ liệu từ một API web đơn giản. Một khi dữ liệu được tải về, nó được phân tách thành một Object Plain Old Java (POJO) mà phải được xác định cho mỗi tài nguyên trong các phản ứng.<br />
<br />
Để kiểm tra điều này hoạt động diễn ra sau đây vào onCreate (Bundle) trong MainActivity.java sau khi cuộc gọi đến setContentView (R.layout.activity_main) ;.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(Config.API_URL).build();<br />
SCService scService = restAdapter.create(SCService.class);<br />
scService.getRecentTracks(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()), new Callback&lt;List&lt;Track&gt;&gt;() {<br />
@Override<br />
public void success(List&lt;Track&gt; tracks, Response response) {<br />
Log.d(TAG, "First track title: " + tracks.get(0).getTitle());<br />
}<br />
<br />
@Override<br />
public void failure(RetrofitError error) {<br />
Log.d(TAG, "Error: " + error);<br />
}<br />
});</code></div></div><br />
&gt;&gt; Khóa <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html" target="_blank" rel="noopener" class="mycode_url">học lập trình php </a>cơ bản tại hà nội !<br />
Thêm thuộc tính vào class<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private static final String TAG = "MainActivity";</code></div></div>Chạy ứng dụng và kiểm tra log. Bạn bên xem một dòng lệnh, nó sẽ hiện tiêu đề đầu tiên được lấy.<br />
<br />
Trong đoạn mã trên lớp RestAdapter tạo ra một thực hiện các giao diện SCService. Mỗi cuộc gọi trên SCService tạo ra làm cho một yêu cầu HTTP tới máy chủ web từ xa.<br />
<br />
Việc thực hiện ở trên không phải là cách tốt nhất để thực hiện các yêu cầu HTTP. Chúng tôi sẽ làm cho một số cuộc gọi đến máy chủ và sử dụng ở trên, chúng ta sẽ tạo ra một RestAdapter và SCService mỗi khi một yêu cầu được thực hiện và những người đang hoạt động đắt tiền, do đó hiệu suất tổng thể sẽ bị ảnh hưởng. Do đó chúng tôi sẽ sử dụng mẫu Singleton để các RestAdapter và SCService được tạo ra chỉ một lần và sử dụng bất cứ khi nào cần thiết. Thêm các lớp sau cho dự án.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
import retrofit.RestAdapter;<br />
<br />
/**<br />
* Created by echessa on 6/18/15.<br />
*/<br />
public class SoundCloud {<br />
<br />
private static final RestAdapter REST_ADAPTER = new RestAdapter.Builder().setEndpoint(Config.API_URL).build();<br />
private static final SCService SERVICE = REST_ADAPTER.create(SCService.class);<br />
<br />
public static SCService getService() {<br />
return SERVICE;<br />
}<br />
<br />
}</code></div></div>Điều này tạo ra các bộ chuyển đổi phần còn lại và dịch vụ như chúng tôi đã làm trước đó, sau đó nó có chức năng đó sẽ trở lại các dịch vụ. Kể từ REST_ADAPTER và SERVICE là final và static, họ sẽ chỉ được tạo ra một lần và tái sử dụng mỗi lần một đối tượng SoundCloud được tạo ra.<br />
<br />
Bây giờ bạn có thể sử dụng trong các đoạn mã chúng ta đặt trong onCreate(Bundle).<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>SCService scService = SoundCloud.getService();<br />
scService.getRecentTracks(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()), new Callback&lt;List&lt;Track&gt;&gt;() {<br />
@Override<br />
public void success(List&lt;Track&gt; tracks, Response response) {<br />
Log.d(TAG, "First track title: " + tracks.get(0).getTitle());<br />
}<br />
<br />
@Override<br />
public void failure(RetrofitError error) {<br />
Log.d(TAG, "Error: " + error);<br />
}<br />
});</code></div></div>Bây giờ chúng ta có thể nhận được dữ liệu từ máy chủ, chúng ta cần tạo một danh sách sẽ hiển thị dữ liệu.<br />
<br />
Thêm một tập tin bố trí bằng cách kích chuột phải vào thư mục Layout và chọn tập tin New -&gt; Layout. Đặt tên nó là track_list_row và thêm phần sau đây để các tập tin track_list_row.xml.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
android:orientation="vertical"<br />
android:paddingLeft="@dimen/activity_vertical_margin"<br />
android:paddingRight="@dimen/activity_vertical_margin"<br />
android:layout_width="match_parent"<br />
android:layout_height="@dimen/row_height"&gt;<br />
<br />
&lt;ImageView<br />
android:id="@+id/track_image"<br />
android:layout_centerVertical="true"<br />
android:padding="@dimen/image_padding"<br />
android:layout_width="@dimen/image_size"<br />
android:layout_height="@dimen/image_size"/&gt;<br />
&lt;TextView<br />
android:layout_centerVertical="true"<br />
android:id="@+id/track_title"<br />
android:layout_marginLeft="@dimen/activity_vertical_inner_margin"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:textAppearance="@style/TextAppearance.AppCompat.Body2"/&gt;<br />
<br />
&lt;/RelativeLayout&gt;</code></div></div>Trên đây tạo ra cách bố trí chúng tôi sẽ sử dụng cho mỗi hàng trong danh sách theo dõi. Chúng tôi sẽ đưa ra một hình ảnh của album art của theo dõi và tiêu đề của ca khúc.<br />
<br />
Sửa đổi activity_main.xml như hình vẽ.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"<br />
tools:context=".MainActivity"&gt;<br />
<br />
&lt;ListView<br />
android:id="@+id/track_list_view"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"/&gt;<br />
<br />
&lt;/RelativeLayout&gt;</code></div></div><br />
Thêm các dòng sau vào file dimen.xml. Không thay đổi bất kỳ giá trị nào trong file, chúng ta sẽ chit sử dụng chúng<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;dimen name="row_height"&gt;72dp&lt;/dimen&gt;<br />
&lt;dimen name="image_padding"&gt;4dp&lt;/dimen&gt;<br />
&lt;dimen name="image_size"&gt;48dp&lt;/dimen&gt;<br />
&lt;dimen name="activity_vertical_inner_margin"&gt;56dp&lt;/dimen&gt;</code></div></div><br />
Tiếp theo, tạo các bộ chuyển đổi tùy chỉnh sau đó sẽ được sử dụng để xem danh sách.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.echessa.spplayer;<br />
<br />
import android.content.Context;<br />
import android.view.LayoutInflater;<br />
import android.view.View;<br />
import android.view.ViewGroup;<br />
import android.widget.BaseAdapter;<br />
import android.widget.ImageView;<br />
import android.widget.TextView;<br />
import com.squareup.picasso.Picasso;<br />
import java.util.List;<br />
<br />
/**<br />
* Created by echessa on 6/18/15.<br />
*/<br />
public class SCTrackAdapter extends BaseAdapter {<br />
<br />
private Context mContext;<br />
private List&lt;Track&gt; mTracks;<br />
<br />
public SCTrackAdapter(Context context, List&lt;Track&gt; tracks) {<br />
mContext = context;<br />
mTracks = tracks;<br />
}<br />
<br />
@Override<br />
public int getCount() {<br />
return mTracks.size();<br />
}<br />
<br />
@Override<br />
public Track getItem(int position) {<br />
return mTracks.get(position);<br />
}<br />
<br />
@Override<br />
public long getItemId(int position) {<br />
return position;<br />
}<br />
<br />
@Override<br />
public View getView(int position, View convertView, ViewGroup parent) {<br />
<br />
Track track = getItem(position);<br />
<br />
ViewHolder holder;<br />
if (convertView == null) {<br />
convertView = LayoutInflater.from(mContext).inflate(R.layout.track_list_row, parent, false);<br />
holder = new ViewHolder();<br />
holder.trackImageView = (ImageView) convertView.findViewById(R.id.track_image);<br />
holder.titleTextView = (TextView) convertView.findViewById(R.id.track_title);<br />
convertView.setTag(holder);<br />
} else {<br />
holder = (ViewHolder) convertView.getTag();<br />
}<br />
<br />
holder.titleTextView.setText(track.getTitle());<br />
<br />
// Trigger the download of the URL asynchronously into the image view.<br />
Picasso.with(mContext).load(track.getArtworkURL()).into(holder.trackImageView);<br />
<br />
return convertView;<br />
}<br />
<br />
static class ViewHolder {<br />
ImageView trackImageView;<br />
TextView titleTextView;<br />
}<br />
<br />
}</code></div></div>Các bộ chuyển đổi trên sử dụng các mẫu thiết kế ViewHolder đó cải thiện hiệu suất của một danh sách xem.<br />
<br />
Khi di chuyển qua một ListView, mã của bạn có thể gọi findViewById() thường xuyên có thể làm chậm hiệu suất. Ngay cả khi Adapter trả về một view tăng cao để tái chế, bạn vẫn cần phải tìm các yếu tố và cập nhật chúng. Một cách khoảng sử dụng lặp lại findViewById() là sử dụng các mẫu thiết kế ViewHolder.<br />
<br />
Một đối tượng ViewHolder cửa hàng mỗi lần xem thành phần bên trong các lĩnh vực thẻ của Layout, vì vậy bạn có thể ngay lập tức truy cập chúng mà không cần phải tìm họ nhiều lần.<br />
<br />
Trong đoạn mã trên, chúng tôi tạo ra một lớp học để giữ tập hợp các quan điểm: static class ViewHolder. Sau đó, trong getView (int, View, ViewGroup) Chúng ta sẽ chuyển ViewHolder và lưu trữ nó bên trong bố trí. Sau này, mỗi lần xem bây giờ có thể được truy cập mà không cần nhìn lên, tiết kiệm chu kỳ bộ xử lý có giá trị.<br />
<br />
Chúng tôi thiết lập các văn bản của hàng danh sách theo dõi là tiêu đề của bài hát và lấy hình ảnh của ca khúc bằng cách sử dụng thư viện Picasso. Các thư viện Picasso, cũng từ Square, là một tải hình ảnh và thư viện bộ nhớ đệm cho Android. Khác hơn so với tải và bộ nhớ đệm hình ảnh, bạn có thể làm một số biến đổi trên một hình ảnh với nó, giống như thiết lập kích thước và cây trồng. Bạn cũng có thể sử dụng nó để thiết lập một hình ảnh giữ chỗ đó sẽ hiển thị trong khi hình ảnh tải và một 'lỗi' hình ảnh sẽ hiển thị nếu tải không thành công. Trong đoạn mã trên, chúng ta sử dụng nó để tải các hình ảnh từ các url và đặt nó vào xem hình ảnh các danh sách theo dõi của hàng.<br />
<br />
Trong MainActivity.java thêm các biến lớp sau:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private List&lt;Track&gt; mListItems;<br />
private SCTrackAdapter mAdapter;</code></div></div><br />
Tạo các thay đổi sau đây để onCreate(Bundle) và thêm các  phương pháp loadTracks(List)  hiển thị dưới đây.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_main);<br />
<br />
mListItems = new ArrayList&lt;Track&gt;();<br />
ListView listView = (ListView)findViewById(R.id.track_list_view);<br />
mAdapter = new SCTrackAdapter(this, mListItems);<br />
listView.setAdapter(mAdapter);<br />
<br />
SCService scService = SoundCloud.getService();<br />
scService.getRecentTracks(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()), new Callback&lt;List&lt;Track&gt;&gt;() {<br />
@Override<br />
public void success(List&lt;Track&gt; tracks, Response response) {<br />
loadTracks(tracks);<br />
}<br />
<br />
@Override<br />
public void failure(RetrofitError error) {<br />
Log.d(TAG, "Error: " + error);<br />
}<br />
});<br />
}<br />
<br />
...<br />
<br />
private void loadTracks(List&lt;Track&gt; tracks) {<br />
mListItems.clear();<br />
mListItems.addAll(tracks);<br />
mAdapter.notifyDataSetChanged();<br />
}</code></div></div>Trong đoạn mã trên, chúng tôi tạo ra một danh sách xem và một thể hiện của SCTrackAdapter và thiết lập nó như là bộ chuyển đổi giao diện của danh sách. Sau đó chúng tôi nhận được bài hát gần đây từ các API và gọi loadTracks(List) mà chúng ta thêm các bài hát vào danh sách mảng được sử dụng bởi các bộ chuyển đổi và thông báo cho các bộ chuyển đổi của sự thay đổi.<br />
<br />
Chạy các ứng dụng và danh sách sẽ được tải với các bài hát gần đây từ SoundCloud và các album ảnh nghệ thuật sẽ hiển thị bên trái của danh sách. Đối với bài nhạc với không có album ảnh nghệ thuật, bạn có thể chỉ định một hình ảnh sẽ được hiển thị bằng Picasso. Tham khảo tài liệu để xem những gì khác các thư viện cung cấp.<br />
<br />
Music Streaming Android 4<br />
<br />
Khi bạn chọn một mục trong danh sách, không có gì xảy ra. Chúng tôi muốn các ca khúc được lựa chọn để được chơi.<br />
<br />
Đầu tiên chúng ta sẽ thêm một thanh công cụ phía dưới cùng của màn hình mà sẽ hiển thị các bài hát được lựa chọn và kiểm soát để vui chơi và tạm dừng. Sửa đổi activity_main.xml như hình vẽ.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"<br />
android:orientation="vertical"<br />
tools:context=".MainActivity"&gt;<br />
<br />
&lt;ListView<br />
android:id="@+id/track_list_view"<br />
android:layout_weight="100"<br />
android:layout_width="match_parent"<br />
android:layout_height="0dp"/&gt;<br />
<br />
&lt;android.support.v7.widget.Toolbar<br />
android:background="#333333"<br />
android:theme="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar"<br />
android:layout_width="match_parent"<br />
android:layout_height="100dp"&gt;<br />
<br />
&lt;ImageView<br />
android:id="@+id/selected_track_image"<br />
android:layout_width="92dp"<br />
android:layout_height="92dp"/&gt;<br />
<br />
&lt;TextView<br />
android:id="@+id/selected_track_title"<br />
android:paddingLeft="8dp"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"/&gt;<br />
<br />
&lt;ImageView<br />
android:id="@+id/player_control"<br />
android:layout_gravity="right"<br />
android:layout_width="@dimen/image_size"<br />
android:layout_height="@dimen/image_size"/&gt;<br />
<br />
&lt;/android.support.v7.widget.Toolbar&gt;<br />
<br />
&lt;/LinearLayout&gt;</code></div></div>Ở đây chúng ta thêm một thanh công cụ để bố trí mà được đặt ở dưới cùng của màn hình. Các thanh công cụ có một ImageView đó sẽ hiển thị các album ảnh nghệ thuật theo dõi, một TextView sẽ hiển thị tiêu đề của các ca khúc và một ImageView đó sẽ hiển thị chơi và tạm dừng các biểu tượng.<br />
<br />
Trong MainActivity.java thêm các biến lớp sau.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private TextView mSelectedTrackTitle;<br />
private ImageView mSelectedTrackImage;<br />
Add the following into onCreate(Bundle) below the listView.setAdapter(mAdapter); statement.<br />
<br />
mSelectedTrackTitle = (TextView)findViewById(R.id.selected_track_title);<br />
mSelectedTrackImage = (ImageView)findViewById(R.id.selected_track_image);<br />
<br />
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {<br />
@Override<br />
public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) {<br />
Track track = mListItems.get(position);<br />
<br />
mSelectedTrackTitle.setText(track.getTitle());<br />
Picasso.with(MainActivity.this).load(track.getArtworkURL()).into(mSelectedTrackImage);<br />
<br />
}<br />
});</code></div></div>Điều này đặt ra nhìn hình ảnh của thanh công cụ và xem văn bản với dữ liệu theo dõi được lựa chọn. Chạy các ứng dụng và chọn một bản nhạc từ danh sách, các thanh công cụ sẽ cập nhật với các thông tin của bài hát.<br />
<br />
Music Streaming Android 5<br />
<br />
Bây giờ cho bước cuối cùng của việc chơi các bản nhạc được chọn. Thêm dòng sau vào lớp.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private MediaPlayer mMediaPlayer;<br />
private ImageView mPlayerControl;</code></div></div>Sau đó, thêm lệnh sau đây sau khi gán biến mSelectedTrackImage.<br />
<br />
m<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>PlayerControl = (ImageView)findViewById(R.id.player_control);<br />
Thêm dòng sau vào onCreate (Bundle) sau khi setContentView (R.layout.activity_main); câu&nbsp;&nbsp;lệnh :<br />
<br />
mMediaPlayer = new MediaPlayer();<br />
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);<br />
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {<br />
@Override<br />
public void onPrepared(MediaPlayer mp) {<br />
togglePlayPause();<br />
}<br />
});</code></div></div>Ở phía trên, chúng tôi nhanh chóng mMediaPlayer và thiết lập kiểu dòng âm thanh cho nó. Các lớp MediaPlayer có thể được sử dụng để kiểm soát phát lại audio/video. Sau đó chúng ta đăng ký một callback sẽ được gọi khi các nguồn phương tiện truyền thông đã sẵn sàng để phát lại. Việc gọi lại làm cho một cuộc gọi đến các chức năng dưới đây.<br />
<br />
Thêm các chức năng sau vào trong lớp.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>private void togglePlayPause() {<br />
if (mMediaPlayer.isPlaying()) {<br />
mMediaPlayer.pause();<br />
mPlayerControl.setImageResource(R.drawable.ic_play);<br />
} else {<br />
mMediaPlayer.start();<br />
mPlayerControl.setImageResource(R.drawable.ic_pause);<br />
}</code></div></div>}<br />
Trên đây làm một kiểm tra xem nếu người chơi phương tiện truyền thông đang phát. Nếu vậy, dừng nó và thay đổi các biểu tượng điều khiển máy nghe nhạc vào biểu tượng Play. Nếu người chơi phương tiện truyền thông đã không được chơi, nó bắt đầu chơi và thay đổi các biểu tượng vào biểu tượng Pause.<br />
<br />
Để có được các biểu tượng được sử dụng, tải về các thư mục tài sản và dán các thư mục drawable vào thư mục res của dự án của bạn. Các biểu tượng từ vật liệu thiết kế biểu tượng lưu trữ của Google.<br />
<br />
Tiếp thêm phương pháp onItemClick(AdapterView, View, int, long) sau đây để xem danh sách của onItemClick sau khi tuyên bố rằng bộ ảnh của thanh công cụ sử dụng Picasso.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>if (mMediaPlayer.isPlaying()) {<br />
mMediaPlayer.stop();<br />
mMediaPlayer.reset();<br />
}<br />
<br />
try {<br />
mMediaPlayer.setDataSource(track.getStreamURL() + "?client_id=" + Config.CLIENT_ID);<br />
mMediaPlayer.prepareAsync();<br />
} catch (IOException e) {<br />
e.printStackTrace();<br />
}</code></div></div>Khi một mục được lựa chọn, kiểm tra được thực hiện để xem nếu các cầu thủ đang chơi. Nếu một ca khúc đã được chơi, nó dừng lại và các phương tiện truyền thông sẽ được reset trước các bản nhạc được chọn có thể được chơi. Tiếp theo chúng ta thiết lập nguồn dữ liệu các phương tiện truyền thông máy nghe nhạc, mà là URL đầy đủ của các tập tin âm thanh mà xem trực tiếp. Sau đó chúng tôi chuẩn bị các cầu thủ để phát lại không đồng bộ. Bạn có thể có thể gọi prepare() hoặc prepareAsync(), nhưng đối với dòng bạn nên gọi prepareAsync() trả về ngay lập tức, thay vì ngăn chặn cho đến khi đủ dữ liệu đệm. Đối với các tập tin, đó là OK để gọi prepare() mà khối cho đến khi MediaPlayer đã sẵn sàng để phát lại.<br />
<br />
Sau đó, thêm những điều sau đây sau khi tuyên bố rằng khởi mPlayerControl.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mPlayerControl.setOnClickListener(new View.OnClickListener() {<br />
@Override<br />
public void onClick(View v) {<br />
togglePlayPause();<br />
}<br />
});</code></div></div><br />
Các trên đặt một nhấp chuột vào nghe để xem hình ảnh người chơi điều khiển mà Toggles chơi của người choi play/pause. Chạy các ứng dụng và bạn sẽ có thể chơi một tập tin âm thanh được lựa chọn, chuyển sang theo dõi khác bằng cách làm cho một sự lựa chọn mới và tạm dừng phát lại bằng cách khai thác Pause trong thanh công cụ.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Music-Streaming-Android-6.png" loading="lazy"  alt="[Image: Music-Streaming-Android-6.png]" class="mycode_img" /><br />
<br />
Khi các tập tin âm thanh hoàn chơi, biểu tượng của thanh công cụ sẽ tiếp tục hiển thị biểu tượng Pause. Chúng tôi muốn biểu tượng của thanh công cụ để thay đổi để chơi khi một ca khúc hoàn thành chơi. Để làm được điều này, chúng tôi sẽ đặt vào hoàn nghe trên máy nghe nhạc phương tiện truyền thông để phát hiện khi nó được thực hiện và thay đổi biểu tượng của thanh công cụ.<br />
<br />
Thêm sau đây gọi để mMediaPlayer.setOnPreparedListener().<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {<br />
@Override<br />
public void onCompletion(MediaPlayer mp) {<br />
mPlayerControl.setImageResource(R.drawable.ic_play);<br />
}<br />
});</code></div></div>Chạy ứng dụng và bây giờ các biểu tượng trên thanh công cụ nên thay đổi một lần một ca khúc hoàn thành chơi.<br />
<br />
Cuối cùng, thêm phần sau đây để các tập tin. Giải thoát cho các phương tiện truyền thông khi hoạt động này bị phá hủy. Chúng tôi không muốn được nắm giữ bất kỳ tài nguyên khi họ không sử dụng.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>@Override<br />
protected void onDestroy() {<br />
super.onDestroy();<br />
<br />
if (mMediaPlayer != null) {<br />
if (mMediaPlayer.isPlaying()) {<br />
mMediaPlayer.stop();<br />
}<br />
mMediaPlayer.release();<br />
mMediaPlayer = null;<br />
}<br />
}</code></div></div>Điều đó mang lại cho chúng tôi đến cuối của hướng dẫn. Chúng tôi đã tạo ra một máy nghe nhạc âm thanh đơn giản và thấy được cách sử dụng lớp MediaPlayer chơi audio stream. Hãy nhớ để dán SoundCloud Client ID vào lớp Config.java.<br />
<br />
<br />
-------------------- || --------------------<br />
Nguồn: <a href="http://laptrinhandroid.net.vn/huong-da-phat-trien-ung-dung-da-phuong-tien-android.html" target="_blank" rel="noopener" class="mycode_url">Hướng dẫn phát triển một ứng dụng Music Streaming Android</a><br />
</h3></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hướng dẫn bài học ProgressDialog trong Android]]></title>
			<link>https://uhm.vn/forum/Thread-H%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-b%C3%A0i-h%E1%BB%8Dc-ProgressDialog-trong-Android</link>
			<pubDate>Mon, 01 Feb 2016 15:18:29 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-H%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-b%C3%A0i-h%E1%BB%8Dc-ProgressDialog-trong-Android</guid>
			<description><![CDATA[<span style="font-size: 3pt;" class="mycode_size">Trong học <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">lap trinh android</a> có một lớp được gọi là ProgressDialog cho phép bạn tạo ra các thanh tiến trình. Để làm điều này, bạn cần phải khởi tạo một đối tượng của lớp này. Cú pháp của nó là.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ProgressDialog progress = new ProgressDialog(this);</code></div></div>Bây giờ bạn có thể thiết lập một số thuộc tính của dialog. Như dưới đây:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>progress.setMessage("Downloading Music :) ");<br />
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);<br />
progress.setIndeterminate(true);</code></div></div><br />
Ngoài những phương pháp này, có những phương pháp khác được cung cấp bởi lớp ProgressDialog.<br />
<br />
STTTitle và mô tả<br />
1getMax() Phương thức trả về giá trị lớn trong tiến trình<br />
2incrementProgressBy(int diff) Phương thức này gia tăng bar tiến trình bởi sự khác biệt giá trị như một tham số.<br />
3setIndeterminate(boolean indeterminate) Phương thức này thiết lập tiến trình như quyết định hoặc không xác định.<br />
4setMax(int max) Phương thức này thiết lập một giá trị lớn của tiến trình trong dialog.<br />
5setProgress(int value) Phương thức này được sử dụng để cập nhật tiến trình trong dialog với một số giá trị đặc biệt.<br />
6show(Context context, CharSequence title, CharSequence message) Đây là phương thức tĩnh, được sử dụng để hiển thị tiến trình trong dialog.<br />
Ví dụ: Ví dụ này cho thấy việc sử dụng theo chiều ngang của hộp thoại tiến trình mà thực chất là một thanh tiến trình. Nó hiển thị một thanh tiến trình trên nhấn nút. Để thử nghiệm với ví dụ này, bạn cần phải chạy trên một thiết bị thực tế sau khi phát triển các ứng dụng theo các bước dưới đây.<br />
<br />
Các bước Mô tả<br />
1Bạn sẽ sử dụng Android studio để tạo ra một ứng dụng Android dưới một gói com.example.sairamkrishna.myapplication. Trong khi tạo dự án này, chắc chắn bạn Target SDK và biên dịch với các phiên bản mới nhất của Android SDK sử dụng các cấp cao hơn của các API.<br />
2Sửa file src/MainActivity.java thêm mã tiến để hiển thị hộp thoại tiến triển.<br />
3Sửa file res/layout/activity_main.xml thêm mã XML tương ứng.<br />
4Chạy ứng dụng và chọn một thiết bị Android chạy và cài đặt các ứng dụng trên nó và kiểm tra kết quả.<br />
Sau đây là nội dung của các sửa đổi tập tin chính hoạt động src/MainActivity.java.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.example.sairamkrishna.myapplication;<br />
<br />
import android.app.ProgressDialog;<br />
import android.graphics.Bitmap;<br />
import android.graphics.Color;<br />
import android.graphics.drawable.BitmapDrawable;<br />
import android.support.v7.app.ActionBarActivity;<br />
import android.os.Bundle;<br />
import android.view.View;<br />
import android.widget.Button;<br />
import android.widget.EditText;<br />
import android.widget.ImageView;<br />
import android.widget.TextView;<br />
<br />
public class MainActivity extends ActionBarActivity {<br />
Button b1;<br />
private ProgressDialog progress;<br />
<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_main);<br />
b1 = (Button) findViewById(R.id.button2);<br />
}<br />
<br />
public void download(View view){<br />
progress=new ProgressDialog(this);<br />
progress.setMessage("Downloading Music");<br />
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);<br />
progress.setIndeterminate(true);<br />
progress.setProgress(0);<br />
progress.show();<br />
<br />
final int totalProgressTime = 100;<br />
final Thread t = new Thread() {<br />
@Override<br />
public void run() {<br />
int jumpTime = 0;<br />
<br />
while(jumpTime &lt; totalProgressTime) {<br />
try {<br />
sleep(200);<br />
jumpTime += 5;<br />
progress.setProgress(jumpTime);<br />
}<br />
catch (InterruptedException e) {<br />
// TODO Auto-generated catch block<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
};<br />
t.start();<br />
}<br />
}</code></div></div>&gt;&gt; <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">Khoa hoc lap trinh android</a> cơ bản nâng cao tại hà nội !<br />
<br />
  Nội dung của res/layout/activity_main.xml:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"<br />
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"<br />
android:paddingRight="@dimen/activity_horizontal_margin"<br />
android:paddingTop="@dimen/activity_vertical_margin"<br />
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"&gt;<br />
<br />
&lt;TextView<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:id="@+id/textView"<br />
android:layout_alignParentTop="true"<br />
android:layout_centerHorizontal="true"<br />
android:textSize="30dp"<br />
android:text="Progress bar" /&gt;<br />
<br />
&lt;TextView<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="Tutorials Point"<br />
android:id="@+id/textView2"<br />
android:layout_below="@+id/textView"<br />
android:layout_centerHorizontal="true"<br />
android:textSize="35dp"<br />
android:textColor="#ff16ff01" /&gt;<br />
<br />
&lt;Button<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="Download"<br />
android:onClick="download"<br />
android:id="@+id/button2"<br />
android:layout_marginLeft="125dp"<br />
android:layout_marginStart="125dp"<br />
android:layout_centerVertical="true" /&gt;<br />
<br />
&lt;/RelativeLayout&gt;</code></div></div><br />
  Nội dung mặc định AndroidManifest.xml−<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"<br />
package="com.example.sairamkrishna.myapplication" &gt;<br />
&lt;application<br />
android:allowBackup="true"<br />
android:icon="@mipmap/ic_launcher"<br />
android:label="@string/app_name"<br />
android:theme="@style/AppTheme" &gt;<br />
<br />
&lt;activity<br />
android:name=".MainActivity"<br />
android:label="@string/app_name" &gt;<br />
<br />
&lt;intent-filter&gt;<br />
&lt;action android:name="android.intent.action.MAIN" /&gt;<br />
&lt;category android:name="android.intent.category.LAUNCHER" /&gt;<br />
&lt;/intent-filter&gt;<br />
<br />
&lt;/activity&gt;<br />
<br />
&lt;/application&gt;<br />
&lt;/manifest&gt;</code></div></div>&gt;&gt; <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url">học lập trình php  cơ bản</a> nâng cao tại hà nội !<br />
Kết quả:<br />
<img src="http://hocthietkeweb.net.vn/wp-content/uploads/2015/08/ProgressDialog-1.png" loading="lazy"  alt="[Image: ProgressDialog-1.png]" class="mycode_img" /><br />
Chọn thiết bị di động của bạn như là một lựa chọn và sau đó kiểm tra thiết bị di động của bạn sẽ hiển thị màn hình sau<br />
<img src="http://hocthietkeweb.net.vn/wp-content/uploads/2015/08/ProgressDialog-2.png" loading="lazy"  alt="[Image: ProgressDialog-2.png]" class="mycode_img" /><br />
Chỉ cần nhấn nút để bắt đầu thanh tiến trình. Sau khi nhấn, màn hình sau sẽ xuất hiện<br />
<img src="http://hocthietkeweb.net.vn/wp-content/uploads/2015/08/ProgressDialog-3.png" loading="lazy"  alt="[Image: ProgressDialog-3.png]" class="mycode_img" /><br />
Nguồn: <a href="http://hocthietkeweb.net.vn/bai-58-xu-ly-mot-hoat-dong-voi-progressdialog-trong-lap-trinh-android.html" target="_blank" rel="noopener" class="mycode_url">Xử lý một hoạt động với ProgressDialog trong lập trình Android</a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: 3pt;" class="mycode_size">Trong học <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">lap trinh android</a> có một lớp được gọi là ProgressDialog cho phép bạn tạo ra các thanh tiến trình. Để làm điều này, bạn cần phải khởi tạo một đối tượng của lớp này. Cú pháp của nó là.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ProgressDialog progress = new ProgressDialog(this);</code></div></div>Bây giờ bạn có thể thiết lập một số thuộc tính của dialog. Như dưới đây:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>progress.setMessage("Downloading Music :) ");<br />
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);<br />
progress.setIndeterminate(true);</code></div></div><br />
Ngoài những phương pháp này, có những phương pháp khác được cung cấp bởi lớp ProgressDialog.<br />
<br />
STTTitle và mô tả<br />
1getMax() Phương thức trả về giá trị lớn trong tiến trình<br />
2incrementProgressBy(int diff) Phương thức này gia tăng bar tiến trình bởi sự khác biệt giá trị như một tham số.<br />
3setIndeterminate(boolean indeterminate) Phương thức này thiết lập tiến trình như quyết định hoặc không xác định.<br />
4setMax(int max) Phương thức này thiết lập một giá trị lớn của tiến trình trong dialog.<br />
5setProgress(int value) Phương thức này được sử dụng để cập nhật tiến trình trong dialog với một số giá trị đặc biệt.<br />
6show(Context context, CharSequence title, CharSequence message) Đây là phương thức tĩnh, được sử dụng để hiển thị tiến trình trong dialog.<br />
Ví dụ: Ví dụ này cho thấy việc sử dụng theo chiều ngang của hộp thoại tiến trình mà thực chất là một thanh tiến trình. Nó hiển thị một thanh tiến trình trên nhấn nút. Để thử nghiệm với ví dụ này, bạn cần phải chạy trên một thiết bị thực tế sau khi phát triển các ứng dụng theo các bước dưới đây.<br />
<br />
Các bước Mô tả<br />
1Bạn sẽ sử dụng Android studio để tạo ra một ứng dụng Android dưới một gói com.example.sairamkrishna.myapplication. Trong khi tạo dự án này, chắc chắn bạn Target SDK và biên dịch với các phiên bản mới nhất của Android SDK sử dụng các cấp cao hơn của các API.<br />
2Sửa file src/MainActivity.java thêm mã tiến để hiển thị hộp thoại tiến triển.<br />
3Sửa file res/layout/activity_main.xml thêm mã XML tương ứng.<br />
4Chạy ứng dụng và chọn một thiết bị Android chạy và cài đặt các ứng dụng trên nó và kiểm tra kết quả.<br />
Sau đây là nội dung của các sửa đổi tập tin chính hoạt động src/MainActivity.java.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.example.sairamkrishna.myapplication;<br />
<br />
import android.app.ProgressDialog;<br />
import android.graphics.Bitmap;<br />
import android.graphics.Color;<br />
import android.graphics.drawable.BitmapDrawable;<br />
import android.support.v7.app.ActionBarActivity;<br />
import android.os.Bundle;<br />
import android.view.View;<br />
import android.widget.Button;<br />
import android.widget.EditText;<br />
import android.widget.ImageView;<br />
import android.widget.TextView;<br />
<br />
public class MainActivity extends ActionBarActivity {<br />
Button b1;<br />
private ProgressDialog progress;<br />
<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_main);<br />
b1 = (Button) findViewById(R.id.button2);<br />
}<br />
<br />
public void download(View view){<br />
progress=new ProgressDialog(this);<br />
progress.setMessage("Downloading Music");<br />
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);<br />
progress.setIndeterminate(true);<br />
progress.setProgress(0);<br />
progress.show();<br />
<br />
final int totalProgressTime = 100;<br />
final Thread t = new Thread() {<br />
@Override<br />
public void run() {<br />
int jumpTime = 0;<br />
<br />
while(jumpTime &lt; totalProgressTime) {<br />
try {<br />
sleep(200);<br />
jumpTime += 5;<br />
progress.setProgress(jumpTime);<br />
}<br />
catch (InterruptedException e) {<br />
// TODO Auto-generated catch block<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
};<br />
t.start();<br />
}<br />
}</code></div></div>&gt;&gt; <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">Khoa hoc lap trinh android</a> cơ bản nâng cao tại hà nội !<br />
<br />
  Nội dung của res/layout/activity_main.xml:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"<br />
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"<br />
android:paddingRight="@dimen/activity_horizontal_margin"<br />
android:paddingTop="@dimen/activity_vertical_margin"<br />
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"&gt;<br />
<br />
&lt;TextView<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:id="@+id/textView"<br />
android:layout_alignParentTop="true"<br />
android:layout_centerHorizontal="true"<br />
android:textSize="30dp"<br />
android:text="Progress bar" /&gt;<br />
<br />
&lt;TextView<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="Tutorials Point"<br />
android:id="@+id/textView2"<br />
android:layout_below="@+id/textView"<br />
android:layout_centerHorizontal="true"<br />
android:textSize="35dp"<br />
android:textColor="#ff16ff01" /&gt;<br />
<br />
&lt;Button<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="Download"<br />
android:onClick="download"<br />
android:id="@+id/button2"<br />
android:layout_marginLeft="125dp"<br />
android:layout_marginStart="125dp"<br />
android:layout_centerVertical="true" /&gt;<br />
<br />
&lt;/RelativeLayout&gt;</code></div></div><br />
  Nội dung mặc định AndroidManifest.xml−<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"<br />
package="com.example.sairamkrishna.myapplication" &gt;<br />
&lt;application<br />
android:allowBackup="true"<br />
android:icon="@mipmap/ic_launcher"<br />
android:label="@string/app_name"<br />
android:theme="@style/AppTheme" &gt;<br />
<br />
&lt;activity<br />
android:name=".MainActivity"<br />
android:label="@string/app_name" &gt;<br />
<br />
&lt;intent-filter&gt;<br />
&lt;action android:name="android.intent.action.MAIN" /&gt;<br />
&lt;category android:name="android.intent.category.LAUNCHER" /&gt;<br />
&lt;/intent-filter&gt;<br />
<br />
&lt;/activity&gt;<br />
<br />
&lt;/application&gt;<br />
&lt;/manifest&gt;</code></div></div>&gt;&gt; <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url">học lập trình php  cơ bản</a> nâng cao tại hà nội !<br />
Kết quả:<br />
<img src="http://hocthietkeweb.net.vn/wp-content/uploads/2015/08/ProgressDialog-1.png" loading="lazy"  alt="[Image: ProgressDialog-1.png]" class="mycode_img" /><br />
Chọn thiết bị di động của bạn như là một lựa chọn và sau đó kiểm tra thiết bị di động của bạn sẽ hiển thị màn hình sau<br />
<img src="http://hocthietkeweb.net.vn/wp-content/uploads/2015/08/ProgressDialog-2.png" loading="lazy"  alt="[Image: ProgressDialog-2.png]" class="mycode_img" /><br />
Chỉ cần nhấn nút để bắt đầu thanh tiến trình. Sau khi nhấn, màn hình sau sẽ xuất hiện<br />
<img src="http://hocthietkeweb.net.vn/wp-content/uploads/2015/08/ProgressDialog-3.png" loading="lazy"  alt="[Image: ProgressDialog-3.png]" class="mycode_img" /><br />
Nguồn: <a href="http://hocthietkeweb.net.vn/bai-58-xu-ly-mot-hoat-dong-voi-progressdialog-trong-lap-trinh-android.html" target="_blank" rel="noopener" class="mycode_url">Xử lý một hoạt động với ProgressDialog trong lập trình Android</a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Android với Option Menu]]></title>
			<link>https://uhm.vn/forum/Thread-Android-v%E1%BB%9Bi-Option-Menu</link>
			<pubDate>Tue, 26 Jan 2016 15:33:13 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-Android-v%E1%BB%9Bi-Option-Menu</guid>
			<description><![CDATA[<span style="font-size: 3pt;" class="mycode_size"> Để thực hiện việc xử lý sự kiện trên các mục menu, bạn cần phải ghi đè <span style="font-style: italic;" class="mycode_i">onOptionsItemSelected</span>() của lớp Activity.<br />
<br />
Android Option Menu là các menu chính của <span style="font-weight: bold;" class="mycode_b">Android</span>. Chúng có thể được sử dụng để cài đặt, tìm kiếm, xóa mục, .... Ở đây, chúng ta sẽ xem xét hai ví dụ của các menu tùy chọn. Đầu tiên, các menu lựa chọn đơn giản nhất và thứ hai, tùy chọn menu bằng hình ảnh. Ở đây, chúng ta đang lạm phát thực đơn bằng cách gọi phương pháp inflate() của lớp MenuInflater .<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><br />
Ví dụ Android Option Menu</span><br />
<br />
Chúng ta hãy xem làm thế nào để tạo menu trong hoc  <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">lap trinh android</a>. Hãy xem ví dụ tùy chọn menu đơn giản có chứa ba mục trình đơn.<br />
<br />
activity_main.xml<br />
<br />
Chúng tôi chỉ có một TextView trong tập tin này.<br />
<br />
File: activity_main.xml<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android" <br />
xmlns:tools="http://schemas.android.com/tools" <br />
android:layout_width="match_parent" <br />
android:layout_height="match_parent" <br />
android:paddingBottom="@dimen/activity_vertical_margin" <br />
android:paddingLeft="@dimen/activity_horizontal_margin" <br />
android:paddingRight="@dimen/activity_horizontal_margin" <br />
android:paddingTop="@dimen/activity_vertical_margin" <br />
tools:context=".MainActivity" &gt; <br />
<br />
&lt;TextView <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:text="@string/hello_world" /&gt; <br />
<br />
&lt;/RelativeLayout&gt;</code></div></div>menu_main.xml. Nó chứa ba mục như hiển thị bên dưới. Nó được tạo ra tự động bên trong thư mục res/menu.<br />
<br />
File: menu_main.xml<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;menu xmlns:androclass="http://schemas.android.com/apk/res/android" &gt; <br />
&lt;item android:id="@+id/item1" <br />
android:title="Item 1"/&gt; <br />
&lt;item android:id="@+id/item2" <br />
android:title="Item 2"/&gt; <br />
&lt;item android:id="@+id/item3" <br />
android:title="Item 3"/&gt; <br />
&lt;/menu&gt;</code></div></div>[Khóa <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">hoc lap trinh android</a> cơ bản tại hà nội !'<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lớp Activity</span><br />
<br />
Lớp này sẽ hiển thị các nội dung của tập tin menu.xml và thực hiện xử lý sự kiện vào cách nhấp vào mục menu.<br />
<br />
File: MainActivity.java<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.javatpoint.optionmenu; <br />
import android.os.Bundle; <br />
import android.app.Activity; <br />
import android.view.Menu; <br />
import android.view.MenuItem; <br />
import android.widget.Toast; <br />
public class MainActivity extends Activity { <br />
@Override <br />
protected void onCreate(Bundle savedInstanceState) { <br />
super.onCreate(savedInstanceState); <br />
setContentView(R.layout.activity_main); <br />
} <br />
@Override <br />
public boolean onCreateOptionsMenu(Menu menu) { <br />
// Inflate the menu; this adds items to the action bar if it is present. <br />
getMenuInflater().inflate(R.menu.main, menu);//Menu Resource, Menu <br />
return true; <br />
} <br />
@Override <br />
public boolean onOptionsItemSelected(MenuItem item) { <br />
switch (item.getItemId()) { <br />
case R.id.item1: <br />
Toast.makeText(getApplicationContext(),"Item 1 Selected",Toast.LENGTH_LONG).show(); <br />
return true; <br />
case R.id.item2: <br />
Toast.makeText(getApplicationContext(),"Item 2 Selected",Toast.LENGTH_LONG).show(); <br />
return true; <br />
case R.id.item3: <br />
Toast.makeText(getApplicationContext(),"Item 3 Selected",Toast.LENGTH_LONG).show(); <br />
return true; <br />
default: <br />
return super.onOptionsItemSelected(item); <br />
} <br />
} <br />
}</code></div></div>Đầu ra:<br />
<br />
Sản lượng mà không cần nhấp vào nút menu.<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Option-Menu-android-1.png" loading="lazy"  alt="[Image: Option-Menu-android-1.png]" class="mycode_img" /><br />
<br />
Đầu ra sau khi nhấp vào nút menu.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Option-Menu-android-2.png" loading="lazy"  alt="[Image: Option-Menu-android-2.png]" class="mycode_img" /><br />
<br />
Đầu ra sau khi nhấp vào mục trình đơn thứ hai.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Option-Menu-android-3.png" loading="lazy"  alt="[Image: Option-Menu-android-3.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Option Menu với Icon</span><br />
<br />
Bạn cần phải có những hình ảnh biểu tượng bên trong thư mục res/drawable. Android:icon được sử dụng để hiển thị các biểu tượng trên menu tùy chọn. Bạn có thể viết các thông tin chuỗi trong file strings.xml. Nhưng chúng ta đã viết nó bên trong các tập tin menu_main.xml.<br />
<br />
<span style="font-style: italic;" class="mycode_i">File: menu_main.xml</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;menu xmlns:androclass="http://schemas.android.com/apk/res/android" &gt; <br />
&lt;item android:id="@+id/item1" <br />
android:icon="@drawable/add" <br />
android:title="Item 1"/&gt; <br />
&lt;item android:id="@+id/item2" <br />
android:icon="@drawable/minus" <br />
android:title="Item 2"/&gt; <br />
&lt;item android:id="@+id/item3" <br />
android:icon="@drawable/delete" <br />
android:title="Item 3"/&gt; <br />
&lt;/menu&gt;</code></div></div><br />
----------------- || -----------------<br />
Trung tâm Đào tạo học<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url"> lap trinh php</a> cơ bản tại hà nội !</span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: 3pt;" class="mycode_size"> Để thực hiện việc xử lý sự kiện trên các mục menu, bạn cần phải ghi đè <span style="font-style: italic;" class="mycode_i">onOptionsItemSelected</span>() của lớp Activity.<br />
<br />
Android Option Menu là các menu chính của <span style="font-weight: bold;" class="mycode_b">Android</span>. Chúng có thể được sử dụng để cài đặt, tìm kiếm, xóa mục, .... Ở đây, chúng ta sẽ xem xét hai ví dụ của các menu tùy chọn. Đầu tiên, các menu lựa chọn đơn giản nhất và thứ hai, tùy chọn menu bằng hình ảnh. Ở đây, chúng ta đang lạm phát thực đơn bằng cách gọi phương pháp inflate() của lớp MenuInflater .<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><br />
Ví dụ Android Option Menu</span><br />
<br />
Chúng ta hãy xem làm thế nào để tạo menu trong hoc  <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">lap trinh android</a>. Hãy xem ví dụ tùy chọn menu đơn giản có chứa ba mục trình đơn.<br />
<br />
activity_main.xml<br />
<br />
Chúng tôi chỉ có một TextView trong tập tin này.<br />
<br />
File: activity_main.xml<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android" <br />
xmlns:tools="http://schemas.android.com/tools" <br />
android:layout_width="match_parent" <br />
android:layout_height="match_parent" <br />
android:paddingBottom="@dimen/activity_vertical_margin" <br />
android:paddingLeft="@dimen/activity_horizontal_margin" <br />
android:paddingRight="@dimen/activity_horizontal_margin" <br />
android:paddingTop="@dimen/activity_vertical_margin" <br />
tools:context=".MainActivity" &gt; <br />
<br />
&lt;TextView <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:text="@string/hello_world" /&gt; <br />
<br />
&lt;/RelativeLayout&gt;</code></div></div>menu_main.xml. Nó chứa ba mục như hiển thị bên dưới. Nó được tạo ra tự động bên trong thư mục res/menu.<br />
<br />
File: menu_main.xml<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;menu xmlns:androclass="http://schemas.android.com/apk/res/android" &gt; <br />
&lt;item android:id="@+id/item1" <br />
android:title="Item 1"/&gt; <br />
&lt;item android:id="@+id/item2" <br />
android:title="Item 2"/&gt; <br />
&lt;item android:id="@+id/item3" <br />
android:title="Item 3"/&gt; <br />
&lt;/menu&gt;</code></div></div>[Khóa <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">hoc lap trinh android</a> cơ bản tại hà nội !'<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lớp Activity</span><br />
<br />
Lớp này sẽ hiển thị các nội dung của tập tin menu.xml và thực hiện xử lý sự kiện vào cách nhấp vào mục menu.<br />
<br />
File: MainActivity.java<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.javatpoint.optionmenu; <br />
import android.os.Bundle; <br />
import android.app.Activity; <br />
import android.view.Menu; <br />
import android.view.MenuItem; <br />
import android.widget.Toast; <br />
public class MainActivity extends Activity { <br />
@Override <br />
protected void onCreate(Bundle savedInstanceState) { <br />
super.onCreate(savedInstanceState); <br />
setContentView(R.layout.activity_main); <br />
} <br />
@Override <br />
public boolean onCreateOptionsMenu(Menu menu) { <br />
// Inflate the menu; this adds items to the action bar if it is present. <br />
getMenuInflater().inflate(R.menu.main, menu);//Menu Resource, Menu <br />
return true; <br />
} <br />
@Override <br />
public boolean onOptionsItemSelected(MenuItem item) { <br />
switch (item.getItemId()) { <br />
case R.id.item1: <br />
Toast.makeText(getApplicationContext(),"Item 1 Selected",Toast.LENGTH_LONG).show(); <br />
return true; <br />
case R.id.item2: <br />
Toast.makeText(getApplicationContext(),"Item 2 Selected",Toast.LENGTH_LONG).show(); <br />
return true; <br />
case R.id.item3: <br />
Toast.makeText(getApplicationContext(),"Item 3 Selected",Toast.LENGTH_LONG).show(); <br />
return true; <br />
default: <br />
return super.onOptionsItemSelected(item); <br />
} <br />
} <br />
}</code></div></div>Đầu ra:<br />
<br />
Sản lượng mà không cần nhấp vào nút menu.<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Option-Menu-android-1.png" loading="lazy"  alt="[Image: Option-Menu-android-1.png]" class="mycode_img" /><br />
<br />
Đầu ra sau khi nhấp vào nút menu.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Option-Menu-android-2.png" loading="lazy"  alt="[Image: Option-Menu-android-2.png]" class="mycode_img" /><br />
<br />
Đầu ra sau khi nhấp vào mục trình đơn thứ hai.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Option-Menu-android-3.png" loading="lazy"  alt="[Image: Option-Menu-android-3.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Option Menu với Icon</span><br />
<br />
Bạn cần phải có những hình ảnh biểu tượng bên trong thư mục res/drawable. Android:icon được sử dụng để hiển thị các biểu tượng trên menu tùy chọn. Bạn có thể viết các thông tin chuỗi trong file strings.xml. Nhưng chúng ta đã viết nó bên trong các tập tin menu_main.xml.<br />
<br />
<span style="font-style: italic;" class="mycode_i">File: menu_main.xml</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;menu xmlns:androclass="http://schemas.android.com/apk/res/android" &gt; <br />
&lt;item android:id="@+id/item1" <br />
android:icon="@drawable/add" <br />
android:title="Item 1"/&gt; <br />
&lt;item android:id="@+id/item2" <br />
android:icon="@drawable/minus" <br />
android:title="Item 2"/&gt; <br />
&lt;item android:id="@+id/item3" <br />
android:icon="@drawable/delete" <br />
android:title="Item 3"/&gt; <br />
&lt;/menu&gt;</code></div></div><br />
----------------- || -----------------<br />
Trung tâm Đào tạo học<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url"> lap trinh php</a> cơ bản tại hà nội !</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Android Context Menu]]></title>
			<link>https://uhm.vn/forum/Thread-Android-Context-Menu</link>
			<pubDate>Mon, 25 Jan 2016 17:14:57 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-Android-Context-Menu</guid>
			<description><![CDATA[<span><h3>Context Menu Android xuất hiện khi người dùng nhấn lâu click vào phần tử. Nó còn được gọi là trình đơn thả nổi. Nó không hỗ trợ phím tắt mục và các biểu tượng.<br />
<br />
Android Context Menu<br />
<br />
Hãy xem các ví dụ đơn giản của trình đơn ngữ cảnh trong android, activity_main.xml<br />
<br />
Kéo một listview từ pallete, bây giờ các tập tin xml sẽ giống như thế này:<br />
<br />
File: activity_main.xml<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"<br />
android:paddingBottom="@dimen/activity_vertical_margin"<br />
android:paddingLeft="@dimen/activity_horizontal_margin"<br />
android:paddingRight="@dimen/activity_horizontal_margin"<br />
android:paddingTop="@dimen/activity_vertical_margin"<br />
tools:context=".MainActivity" &gt;<br />
<br />
&lt;ListView<br />
android:id="@+id/listView1"<br />
android:layout_width="match_parent"<br />
android:layout_height="wrap_content"<br />
android:layout_alignParentLeft="true"<br />
android:layout_alignParentTop="true"<br />
android:layout_marginLeft="66dp"<br />
android:layout_marginTop="53dp" &gt;<br />
&lt;/ListView&gt;<br />
<br />
&lt;/RelativeLayout&gt;</code></div></div>&gt;&gt; Xem thêm: <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url">học lập trình php cơ bản</a> tại hà nội !<br />
<br />
Lớp Activity<br />
<br />
Chúng ta hãy viết code để hiển thị menu ngữ cảnh trên báo chí của listview.<br />
<br />
File: MainActivity.java<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.javatpoint.contextmenu;<br />
import android.os.Bundle;<br />
import android.app.Activity;<br />
import android.view.ContextMenu;<br />
import android.view.ContextMenu.ContextMenuInfo;<br />
import android.view.Menu;<br />
import android.view.MenuItem;<br />
import android.view.View;<br />
import android.widget.AdapterView;<br />
import android.widget.ArrayAdapter;<br />
import android.widget.ListView;<br />
import android.widget.Toast;<br />
public class MainActivity extends Activity {<br />
ListView listView1;<br />
String contacts[]={"Ajay","Sachin","Sumit","Tarun","Yogesh"};<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_main);<br />
listView1=(ListView)findViewById(R.id.listView1);<br />
ArrayAdapter&lt;String&gt; adapter=new ArrayAdapter&lt;String&gt;(this,android.R.layout.simple_list_item_1,contacts);<br />
listView1.setAdapter(adapter);<br />
// Register the ListView for Context menu<br />
registerForContextMenu(listView1);<br />
}<br />
@Override<br />
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)<br />
{<br />
super.onCreateContextMenu(menu, v, menuInfo);<br />
menu.setHeaderTitle("Select The Action");<br />
menu.add(0, v.getId(), 0, "Call");//groupId, itemId, order, title<br />
menu.add(0, v.getId(), 0, "SMS");<br />
}<br />
@Override<br />
public boolean onContextItemSelected(MenuItem item){<br />
if(item.getTitle()=="Call"){<br />
Toast.makeText(getApplicationContext(),"calling code",Toast.LENGTH_LONG).show();<br />
}<br />
else if(item.getTitle()=="SMS"){<br />
Toast.makeText(getApplicationContext(),"sending sms code",Toast.LENGTH_LONG).show();<br />
}else{<br />
return false;<br />
}<br />
return true;<br />
}<br />
}</code></div></div>[Xem thêm:<a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html" target="_blank" rel="noopener" class="mycode_url"> Khoa hoc photoshop </a>co ban tai ha noi !]<br />
<br />
Kết quả:<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Context-Menu-android-1.png" loading="lazy"  alt="[Image: Context-Menu-android-1.png]" class="mycode_img" /><br />
<br />
Đầu ra sau khi báo chí dài trên listview.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Context-Menu-android-2.png" loading="lazy"  alt="[Image: Context-Menu-android-2.png]" class="mycode_img" /><br />
<br />
Đầu ra sau khi nhấp vào trình đơn ngữ cảnh.<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Option-Menu-android-3.png" loading="lazy"  alt="[Image: Option-Menu-android-3.png]" class="mycode_img" /><br />
<br />
------------------ || ------------------<br />
Trung tâm Đào tạo lập trình Game Mobile với các Khóa <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html//" target="_blank" rel="noopener" class="mycode_url">học lập trình android cơ bản </a>đến Nâng cao tại Vietpro!</h3></span>]]></description>
			<content:encoded><![CDATA[<span><h3>Context Menu Android xuất hiện khi người dùng nhấn lâu click vào phần tử. Nó còn được gọi là trình đơn thả nổi. Nó không hỗ trợ phím tắt mục và các biểu tượng.<br />
<br />
Android Context Menu<br />
<br />
Hãy xem các ví dụ đơn giản của trình đơn ngữ cảnh trong android, activity_main.xml<br />
<br />
Kéo một listview từ pallete, bây giờ các tập tin xml sẽ giống như thế này:<br />
<br />
File: activity_main.xml<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"<br />
android:paddingBottom="@dimen/activity_vertical_margin"<br />
android:paddingLeft="@dimen/activity_horizontal_margin"<br />
android:paddingRight="@dimen/activity_horizontal_margin"<br />
android:paddingTop="@dimen/activity_vertical_margin"<br />
tools:context=".MainActivity" &gt;<br />
<br />
&lt;ListView<br />
android:id="@+id/listView1"<br />
android:layout_width="match_parent"<br />
android:layout_height="wrap_content"<br />
android:layout_alignParentLeft="true"<br />
android:layout_alignParentTop="true"<br />
android:layout_marginLeft="66dp"<br />
android:layout_marginTop="53dp" &gt;<br />
&lt;/ListView&gt;<br />
<br />
&lt;/RelativeLayout&gt;</code></div></div>&gt;&gt; Xem thêm: <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url">học lập trình php cơ bản</a> tại hà nội !<br />
<br />
Lớp Activity<br />
<br />
Chúng ta hãy viết code để hiển thị menu ngữ cảnh trên báo chí của listview.<br />
<br />
File: MainActivity.java<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.javatpoint.contextmenu;<br />
import android.os.Bundle;<br />
import android.app.Activity;<br />
import android.view.ContextMenu;<br />
import android.view.ContextMenu.ContextMenuInfo;<br />
import android.view.Menu;<br />
import android.view.MenuItem;<br />
import android.view.View;<br />
import android.widget.AdapterView;<br />
import android.widget.ArrayAdapter;<br />
import android.widget.ListView;<br />
import android.widget.Toast;<br />
public class MainActivity extends Activity {<br />
ListView listView1;<br />
String contacts[]={"Ajay","Sachin","Sumit","Tarun","Yogesh"};<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_main);<br />
listView1=(ListView)findViewById(R.id.listView1);<br />
ArrayAdapter&lt;String&gt; adapter=new ArrayAdapter&lt;String&gt;(this,android.R.layout.simple_list_item_1,contacts);<br />
listView1.setAdapter(adapter);<br />
// Register the ListView for Context menu<br />
registerForContextMenu(listView1);<br />
}<br />
@Override<br />
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)<br />
{<br />
super.onCreateContextMenu(menu, v, menuInfo);<br />
menu.setHeaderTitle("Select The Action");<br />
menu.add(0, v.getId(), 0, "Call");//groupId, itemId, order, title<br />
menu.add(0, v.getId(), 0, "SMS");<br />
}<br />
@Override<br />
public boolean onContextItemSelected(MenuItem item){<br />
if(item.getTitle()=="Call"){<br />
Toast.makeText(getApplicationContext(),"calling code",Toast.LENGTH_LONG).show();<br />
}<br />
else if(item.getTitle()=="SMS"){<br />
Toast.makeText(getApplicationContext(),"sending sms code",Toast.LENGTH_LONG).show();<br />
}else{<br />
return false;<br />
}<br />
return true;<br />
}<br />
}</code></div></div>[Xem thêm:<a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html" target="_blank" rel="noopener" class="mycode_url"> Khoa hoc photoshop </a>co ban tai ha noi !]<br />
<br />
Kết quả:<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Context-Menu-android-1.png" loading="lazy"  alt="[Image: Context-Menu-android-1.png]" class="mycode_img" /><br />
<br />
Đầu ra sau khi báo chí dài trên listview.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Context-Menu-android-2.png" loading="lazy"  alt="[Image: Context-Menu-android-2.png]" class="mycode_img" /><br />
<br />
Đầu ra sau khi nhấp vào trình đơn ngữ cảnh.<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/11/Option-Menu-android-3.png" loading="lazy"  alt="[Image: Option-Menu-android-3.png]" class="mycode_img" /><br />
<br />
------------------ || ------------------<br />
Trung tâm Đào tạo lập trình Game Mobile với các Khóa <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html//" target="_blank" rel="noopener" class="mycode_url">học lập trình android cơ bản </a>đến Nâng cao tại Vietpro!</h3></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hướng dẫ External Storage trong Android]]></title>
			<link>https://uhm.vn/forum/Thread-H%C6%B0%E1%BB%9Bng-d%E1%BA%AB-External-Storage-trong-Android</link>
			<pubDate>Thu, 21 Jan 2016 16:55:45 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-H%C6%B0%E1%BB%9Bng-d%E1%BA%AB-External-Storage-trong-Android</guid>
			<description><![CDATA[<span style="font-size: 3pt;" class="mycode_size">Chúng tôi có thể tiết kiệm hoặc đọc dữ liệu từ các thiết bị bộ nhớ trong. FileInputStream và FileOutputStream lớp học được sử dụng để đọc và ghi dữ liệu vào tập tin. Ở đây, chúng ta sẽ đọc và ghi dữ liệu vào bộ nhớ trong của thiết bị. Ví dụ của việc đọc và ghi dữ liệu vào bộ nhớ trong khi bạn <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">hoc lap trinh android</a>.<br />
<br />
Kéo hai thuộc tinhd edittexts, 2 textviews và 2 buttons từ pallete, bây giờ file activity_main.xml sẽ giống như dưới đây:<br />
<br />
File: activity_main.xml<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <br />
xmlns:tools="http://schemas.android.com/tools" <br />
android:layout_width="match_parent" <br />
android:layout_height="match_parent" <br />
tools:context=".MainActivity" &gt; <br />
<br />
&lt;EditText <br />
android:id="@+id/editText1" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignParentRight="true" <br />
android:layout_alignParentTop="true" <br />
android:layout_marginRight="20dp" <br />
android:layout_marginTop="24dp" <br />
android:ems="10" &gt; <br />
<br />
&lt;requestFocus /&gt; <br />
&lt;/EditText&gt; <br />
<br />
&lt;EditText <br />
android:id="@+id/editText2" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignRight="@+id/editText1" <br />
android:layout_below="@+id/editText1" <br />
android:layout_marginTop="24dp" <br />
android:ems="10" /&gt; <br />
<br />
&lt;TextView <br />
android:id="@+id/textView1" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignBaseline="@+id/editText1" <br />
android:layout_alignBottom="@+id/editText1" <br />
android:layout_alignParentLeft="true" <br />
android:text="File Name:" /&gt; <br />
<br />
&lt;TextView <br />
android:id="@+id/textView2" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignBaseline="@+id/editText2" <br />
android:layout_alignBottom="@+id/editText2" <br />
android:layout_alignParentLeft="true" <br />
android:text="Data:" /&gt; <br />
<br />
&lt;Button <br />
android:id="@+id/button1" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignLeft="@+id/editText2" <br />
android:layout_below="@+id/editText2" <br />
android:layout_marginLeft="70dp" <br />
android:layout_marginTop="16dp" <br />
android:text="save" /&gt; <br />
<br />
&lt;Button <br />
android:id="@+id/button2" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignBaseline="@+id/button1" <br />
android:layout_alignBottom="@+id/button1" <br />
android:layout_toRightOf="@+id/button1" <br />
android:text="read" /&gt; <br />
<br />
&lt;/RelativeLayout&gt;</code></div></div>&gt;&gt;<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" rel="nofollow"> khóa học lập trình android cơ bản  <br />
</a><br />
<span style="font-weight: bold;" class="mycode_b">Lớp Activity</span><br />
<br />
Chúng ta hãy viết code để viết và đọc dữ liệu từ bộ nhớ trong. Viết mã code và đọc chúng trong dữ liệu từ File: MainActivity.java<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.example.internalstorage; <br />
<br />
import java.io.BufferedReader; <br />
import java.io.FileInputStream; <br />
import java.io.FileNotFoundException; <br />
import java.io.FileOutputStream; <br />
import java.io.IOException; <br />
import java.io.InputStreamReader; <br />
<br />
import android.os.Bundle; <br />
import android.app.Activity; <br />
import android.content.Context; <br />
import android.view.Menu; <br />
import android.view.View; <br />
import android.view.View.OnClickListener; <br />
import android.widget.Button; <br />
import android.widget.EditText; <br />
import android.widget.Toast; <br />
<br />
public class MainActivity extends Activity { <br />
EditText editTextFileName,editTextData; <br />
Button saveButton,readButton; <br />
@Override <br />
protected void onCreate(Bundle savedInstanceState) { <br />
super.onCreate(savedInstanceState); <br />
setContentView(R.layout.activity_main); <br />
<br />
editTextFileName=(EditText)findViewById(R.id.editText1); <br />
editTextData=(EditText)findViewById(R.id.editText2); <br />
saveButton=(Button)findViewById(R.id.button1); <br />
readButton=(Button)findViewById(R.id.button2); <br />
<br />
//Performing Action on Read Button <br />
saveButton.setOnClickListener(new OnClickListener(){ <br />
<br />
@Override <br />
public void onClick(View arg0) { <br />
String filename=editTextFileName.getText().toString(); <br />
String data=editTextData.getText().toString(); <br />
<br />
FileOutputStream fos; <br />
try { <br />
fos = openFileOutput(filename, Context.MODE_PRIVATE); <br />
//default mode is PRIVATE, can be APPEND etc. <br />
fos.write(data.getBytes()); <br />
fos.close(); <br />
<br />
Toast.makeText(getApplicationContext(),filename + " saved", <br />
Toast.LENGTH_LONG).show(); <br />
<br />
<br />
} catch (FileNotFoundException e) {e.printStackTrace();} <br />
catch (IOException e) {e.printStackTrace();} <br />
<br />
} <br />
<br />
}); <br />
<br />
//Performing Action on Read Button <br />
readButton.setOnClickListener(new OnClickListener(){ <br />
<br />
@Override <br />
public void onClick(View arg0) { <br />
String filename=editTextFileName.getText().toString(); <br />
StringBuffer stringBuffer = new StringBuffer(); <br />
try { <br />
//Attaching BufferedReader to the FileInputStream by the help of InputStreamReader <br />
BufferedReader inputReader = new BufferedReader(new InputStreamReader( <br />
openFileInput(filename))); <br />
String inputString; <br />
//Reading data line by line and storing it into the stringbuffer <br />
while ((inputString = inputReader.readLine()) != null) { <br />
stringBuffer.append(inputString + "&#92;n"); <br />
} <br />
<br />
} catch (IOException e) { <br />
e.printStackTrace(); <br />
} <br />
//Displaying data on the toast <br />
Toast.makeText(getApplicationContext(),stringBuffer.toString(), <br />
Toast.LENGTH_LONG).show(); <br />
<br />
} <br />
<br />
}); <br />
} <br />
<br />
@Override <br />
public boolean onCreateOptionsMenu(Menu menu) { <br />
// Inflate the menu; this adds items to the action bar if it is present. <br />
getMenuInflater().inflate(R.menu.activity_main, menu); <br />
return true; <br />
} <br />
<br />
}</code></div></div><br />
<br />
----------------------- || -----------------------<br />
Trung tâm Đào tạo <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url"> học photoshop tại hà nội </a> cơ bản nâng cao tại Hà Nội !</span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: 3pt;" class="mycode_size">Chúng tôi có thể tiết kiệm hoặc đọc dữ liệu từ các thiết bị bộ nhớ trong. FileInputStream và FileOutputStream lớp học được sử dụng để đọc và ghi dữ liệu vào tập tin. Ở đây, chúng ta sẽ đọc và ghi dữ liệu vào bộ nhớ trong của thiết bị. Ví dụ của việc đọc và ghi dữ liệu vào bộ nhớ trong khi bạn <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">hoc lap trinh android</a>.<br />
<br />
Kéo hai thuộc tinhd edittexts, 2 textviews và 2 buttons từ pallete, bây giờ file activity_main.xml sẽ giống như dưới đây:<br />
<br />
File: activity_main.xml<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <br />
xmlns:tools="http://schemas.android.com/tools" <br />
android:layout_width="match_parent" <br />
android:layout_height="match_parent" <br />
tools:context=".MainActivity" &gt; <br />
<br />
&lt;EditText <br />
android:id="@+id/editText1" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignParentRight="true" <br />
android:layout_alignParentTop="true" <br />
android:layout_marginRight="20dp" <br />
android:layout_marginTop="24dp" <br />
android:ems="10" &gt; <br />
<br />
&lt;requestFocus /&gt; <br />
&lt;/EditText&gt; <br />
<br />
&lt;EditText <br />
android:id="@+id/editText2" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignRight="@+id/editText1" <br />
android:layout_below="@+id/editText1" <br />
android:layout_marginTop="24dp" <br />
android:ems="10" /&gt; <br />
<br />
&lt;TextView <br />
android:id="@+id/textView1" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignBaseline="@+id/editText1" <br />
android:layout_alignBottom="@+id/editText1" <br />
android:layout_alignParentLeft="true" <br />
android:text="File Name:" /&gt; <br />
<br />
&lt;TextView <br />
android:id="@+id/textView2" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignBaseline="@+id/editText2" <br />
android:layout_alignBottom="@+id/editText2" <br />
android:layout_alignParentLeft="true" <br />
android:text="Data:" /&gt; <br />
<br />
&lt;Button <br />
android:id="@+id/button1" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignLeft="@+id/editText2" <br />
android:layout_below="@+id/editText2" <br />
android:layout_marginLeft="70dp" <br />
android:layout_marginTop="16dp" <br />
android:text="save" /&gt; <br />
<br />
&lt;Button <br />
android:id="@+id/button2" <br />
android:layout_width="wrap_content" <br />
android:layout_height="wrap_content" <br />
android:layout_alignBaseline="@+id/button1" <br />
android:layout_alignBottom="@+id/button1" <br />
android:layout_toRightOf="@+id/button1" <br />
android:text="read" /&gt; <br />
<br />
&lt;/RelativeLayout&gt;</code></div></div>&gt;&gt;<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" rel="nofollow"> khóa học lập trình android cơ bản  <br />
</a><br />
<span style="font-weight: bold;" class="mycode_b">Lớp Activity</span><br />
<br />
Chúng ta hãy viết code để viết và đọc dữ liệu từ bộ nhớ trong. Viết mã code và đọc chúng trong dữ liệu từ File: MainActivity.java<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>package com.example.internalstorage; <br />
<br />
import java.io.BufferedReader; <br />
import java.io.FileInputStream; <br />
import java.io.FileNotFoundException; <br />
import java.io.FileOutputStream; <br />
import java.io.IOException; <br />
import java.io.InputStreamReader; <br />
<br />
import android.os.Bundle; <br />
import android.app.Activity; <br />
import android.content.Context; <br />
import android.view.Menu; <br />
import android.view.View; <br />
import android.view.View.OnClickListener; <br />
import android.widget.Button; <br />
import android.widget.EditText; <br />
import android.widget.Toast; <br />
<br />
public class MainActivity extends Activity { <br />
EditText editTextFileName,editTextData; <br />
Button saveButton,readButton; <br />
@Override <br />
protected void onCreate(Bundle savedInstanceState) { <br />
super.onCreate(savedInstanceState); <br />
setContentView(R.layout.activity_main); <br />
<br />
editTextFileName=(EditText)findViewById(R.id.editText1); <br />
editTextData=(EditText)findViewById(R.id.editText2); <br />
saveButton=(Button)findViewById(R.id.button1); <br />
readButton=(Button)findViewById(R.id.button2); <br />
<br />
//Performing Action on Read Button <br />
saveButton.setOnClickListener(new OnClickListener(){ <br />
<br />
@Override <br />
public void onClick(View arg0) { <br />
String filename=editTextFileName.getText().toString(); <br />
String data=editTextData.getText().toString(); <br />
<br />
FileOutputStream fos; <br />
try { <br />
fos = openFileOutput(filename, Context.MODE_PRIVATE); <br />
//default mode is PRIVATE, can be APPEND etc. <br />
fos.write(data.getBytes()); <br />
fos.close(); <br />
<br />
Toast.makeText(getApplicationContext(),filename + " saved", <br />
Toast.LENGTH_LONG).show(); <br />
<br />
<br />
} catch (FileNotFoundException e) {e.printStackTrace();} <br />
catch (IOException e) {e.printStackTrace();} <br />
<br />
} <br />
<br />
}); <br />
<br />
//Performing Action on Read Button <br />
readButton.setOnClickListener(new OnClickListener(){ <br />
<br />
@Override <br />
public void onClick(View arg0) { <br />
String filename=editTextFileName.getText().toString(); <br />
StringBuffer stringBuffer = new StringBuffer(); <br />
try { <br />
//Attaching BufferedReader to the FileInputStream by the help of InputStreamReader <br />
BufferedReader inputReader = new BufferedReader(new InputStreamReader( <br />
openFileInput(filename))); <br />
String inputString; <br />
//Reading data line by line and storing it into the stringbuffer <br />
while ((inputString = inputReader.readLine()) != null) { <br />
stringBuffer.append(inputString + "&#92;n"); <br />
} <br />
<br />
} catch (IOException e) { <br />
e.printStackTrace(); <br />
} <br />
//Displaying data on the toast <br />
Toast.makeText(getApplicationContext(),stringBuffer.toString(), <br />
Toast.LENGTH_LONG).show(); <br />
<br />
} <br />
<br />
}); <br />
} <br />
<br />
@Override <br />
public boolean onCreateOptionsMenu(Menu menu) { <br />
// Inflate the menu; this adds items to the action bar if it is present. <br />
getMenuInflater().inflate(R.menu.activity_main, menu); <br />
return true; <br />
} <br />
<br />
}</code></div></div><br />
<br />
----------------------- || -----------------------<br />
Trung tâm Đào tạo <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url"> học photoshop tại hà nội </a> cơ bản nâng cao tại Hà Nội !</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Cách thay đổi định dạng chữ trong Android]]></title>
			<link>https://uhm.vn/forum/Thread-C%C3%A1ch-thay-%C4%91%E1%BB%95i-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-ch%E1%BB%AF-trong-Android</link>
			<pubDate>Tue, 19 Jan 2016 17:21:36 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-C%C3%A1ch-thay-%C4%91%E1%BB%95i-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-ch%E1%BB%AF-trong-Android</guid>
			<description><![CDATA[<span style="font-size: 3pt;" class="mycode_size"><br />
<br />
Code dưới đây bắt đầu bằng cách liệt kê một số các định dạng xuất hiện văn bản được xây dựng trong. Android chủ yếu sử dụng các định dạng để kiểm soát kích thước và màu sắc của văn bản. Ở đây, Small, Medium và định dạng lớn có thể được thêm vào định dạng TextAppearance để thay đổi kích thước của văn bản. Hoặc, định dạng Inverse có thể được áp dụng cho các định dạng TextAppearance sử dụng sơ đồ màu nghịch đảo.<br />
<br />
Android sử dụng một loạt các định đạng xây dựng trong để kiểm soát sự xuất hiện của các văn bản cho một chủ đề. Kết quả là, nếu bạn muốn thay đổi sự xuất hiện văn bản cho tất cả các vật dụng trên một chủ đề, bạn có thể muốn thay đổi định dạng xuất hiện văn bản trong <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">hoc lap trinh android </a><br />
<br />
Các tập tin styles.xml trong hình này hoạt động giống như các tập tin styles.xml trong hình trước. Tuy nhiên, nó sử dụng các định dạng TextAppearance thay vì định dạng cho các loại khác nhau của các vật dụng. Ở đây, các mã đè TextAppearance. định dạng Small và TextAppearance.Small.Inverse và đặt thuộc tính để 20sp textSize.<br />
<br />
Bạn có thể sử dụng trình soạn thảo đồ họa Giao diện để xác định hình định dạng văn bản mặc định được sử dụng cho mỗi widget trong ứng dụng của bạn. Để làm điều đó, hiển thị hoạt động của bạn trong trình soạn thảo đồ họa Layout, nhấn vào widget, mở rộng Text Appearance trong khung nhìn Properties, và kiểm tra giá trị của các thuộc tính Text Appearance. Sau đó, nếu cần thiết, bạn có thể ghi đè lên rằng tài sản để thay đổi kích thước văn bản của mình hoặc phối màu.<br />
<br />
tên 	Mô tả<br />
TextAppearance 	Hiển xuất hiện văn bản tiêu chuẩn và phối màu.<br />
TextAppearance. Inverse	Hiển thị Inverse xuất hiện văn bản tiêu chuẩn với màu sắc nghịch đảo.<br />
TextAppearance. Small	Hiển thị nhỏ cỡ chữ nhỏ.<br />
TextAppearance. Small. Inverse	 Hiển thị Inverse kích cỡ nhỏ và màu sắc nghịch đảo.<br />
TextAppearance.Medium 	Hiển thị kích thước phông chữ vừa.<br />
TextAppearance.Large 	Hiển thị kích thước chữ lớn<br />
---------------- || ----------------<br />
Trung tâm Đào tạo khóa <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">hoc photoshop tai ha noi</a> !</span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: 3pt;" class="mycode_size"><br />
<br />
Code dưới đây bắt đầu bằng cách liệt kê một số các định dạng xuất hiện văn bản được xây dựng trong. Android chủ yếu sử dụng các định dạng để kiểm soát kích thước và màu sắc của văn bản. Ở đây, Small, Medium và định dạng lớn có thể được thêm vào định dạng TextAppearance để thay đổi kích thước của văn bản. Hoặc, định dạng Inverse có thể được áp dụng cho các định dạng TextAppearance sử dụng sơ đồ màu nghịch đảo.<br />
<br />
Android sử dụng một loạt các định đạng xây dựng trong để kiểm soát sự xuất hiện của các văn bản cho một chủ đề. Kết quả là, nếu bạn muốn thay đổi sự xuất hiện văn bản cho tất cả các vật dụng trên một chủ đề, bạn có thể muốn thay đổi định dạng xuất hiện văn bản trong <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">hoc lap trinh android </a><br />
<br />
Các tập tin styles.xml trong hình này hoạt động giống như các tập tin styles.xml trong hình trước. Tuy nhiên, nó sử dụng các định dạng TextAppearance thay vì định dạng cho các loại khác nhau của các vật dụng. Ở đây, các mã đè TextAppearance. định dạng Small và TextAppearance.Small.Inverse và đặt thuộc tính để 20sp textSize.<br />
<br />
Bạn có thể sử dụng trình soạn thảo đồ họa Giao diện để xác định hình định dạng văn bản mặc định được sử dụng cho mỗi widget trong ứng dụng của bạn. Để làm điều đó, hiển thị hoạt động của bạn trong trình soạn thảo đồ họa Layout, nhấn vào widget, mở rộng Text Appearance trong khung nhìn Properties, và kiểm tra giá trị của các thuộc tính Text Appearance. Sau đó, nếu cần thiết, bạn có thể ghi đè lên rằng tài sản để thay đổi kích thước văn bản của mình hoặc phối màu.<br />
<br />
tên 	Mô tả<br />
TextAppearance 	Hiển xuất hiện văn bản tiêu chuẩn và phối màu.<br />
TextAppearance. Inverse	Hiển thị Inverse xuất hiện văn bản tiêu chuẩn với màu sắc nghịch đảo.<br />
TextAppearance. Small	Hiển thị nhỏ cỡ chữ nhỏ.<br />
TextAppearance. Small. Inverse	 Hiển thị Inverse kích cỡ nhỏ và màu sắc nghịch đảo.<br />
TextAppearance.Medium 	Hiển thị kích thước phông chữ vừa.<br />
TextAppearance.Large 	Hiển thị kích thước chữ lớn<br />
---------------- || ----------------<br />
Trung tâm Đào tạo khóa <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">hoc photoshop tai ha noi</a> !</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hướng dẫn bài học Public trang web]]></title>
			<link>https://uhm.vn/forum/Thread-H%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-b%C3%A0i-h%E1%BB%8Dc-Public-trang-web</link>
			<pubDate>Tue, 19 Jan 2016 14:46:01 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-H%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-b%C3%A0i-h%E1%BB%8Dc-Public-trang-web</guid>
			<description><![CDATA[<span><h3>Nhưng nếu bạn thiết lập những kỳ vọng của bạn ở mức hợp lý và sử dụng các kỹ thuật khác nhau để có được mọi người đến với trang web của bạn, bạn có khả năng để đáp ứng các mục tiêu của bạn khi<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url"> hoc lap trinh php</a> .<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Playing the name game</span><br />
<br />
Một trong những cách tốt nhất để có được mọi người nhớ trang web của bạn là để có được tên miền riêng của bạn. Một tên miền là phần đầu tiên của một địa chỉ web, thường không bao gồm các www. lúc đầu. Ví dụ, yahoo.com và whitehouse.gov là tên miền. Địa chỉ web hoặc URL (Uniform Resource Locator), mà chỉ là một tiêu chuẩn hóa, hoặc đồng phục, cách để tìm nguồn tài nguyên như máy chủ Web và các tập tin trên Internet những gì người sử dụng đối với bạn là.<br />
<br />
Một URL như <a href="http://www.smithtires.com" target="_blank" rel="noopener" class="mycode_url">http://www.smithtires.com</a> là dễ dàng hơn nhiều để nhớ - và nhiều ấn tượng hơn - hơnwww.geocities.com/smithtires. Trong trường hợp đầu tiên, tên miền là smithtires.com; trong trường hợp thứ hai, đó là geocities.com. Rõ ràng, một cá nhân plausibly có thể sở hữu tên miền đầu tiên; thứ hai là thuộc sở hữu của Yahoo !.<br />
<br />
Bạn có thể có được một tên miền trong một trong nhiều cách, nhưng cách phổ biến nhất là để đi đến trang web của Network Solutions tại <a href="http://www.networksolutions.com" target="_blank" rel="noopener" class="mycode_url">http://www.networksolutions.com</a>. Network Solutions phí một khoản phí nhỏ hàng năm cho một giấy phép cho một cái tên. Các trang web Giải pháp mạng Web làm cho nó dễ dàng để thử tên miền khác nhau để xem những gì có sẵn. (Nó cũng cung cấp cho bạn khả năng để xây dựng một trang web được lưu trữ bởi Network Solutions cho hợp lý, nhưng không đáng kể, lệ phí). Bạn cũng có thể mua tên miền của bạn, thường xuyên cho một khoản phí cao hơn, thông qua một công ty lưu trữ web, hoặc một trang web như GeoCities.<br />
<br />
Hãy tạo cho mình một ngày hoặc lâu hơn để suy nghĩ về tên miền ưa thích của bạn cuối cùng trước khi mua một tên. Bắt một tên là dễ dàng như vậy mà nó là tất cả quá dễ dàng để kết thúc việc mua một số tên trước khi bạn cuối cùng đã kết thúc với một trong những bạn thực sự muốn.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công khai các trang web của bạn</span><br />
<br />
Sau khi trang web của bạn lên và thử nghiệm, công bố công khai nó. Số lượng và loại công khai bạn cần phụ thuộc vào các mục tiêu của bạn cho trang web. Nếu bạn đang cố gắng để gây ấn tượng với báo chí và các nhà phân tích, phát hành một thông cáo báo chí. Nếu bạn đang công bố một trang web cá nhân, bạn có thể thấy rằng với bạn bè và gia đình về nó là đủ. Nếu bạn đang cố gắng để cung cấp cho khách hàng một con đường khác để giao tiếp với bạn, địa chỉ web lên văn phòng phẩm, danh thiếp, và quảng cáo. Nếu bạn đang cố gắng bán trên Web, đặt quảng cáo trên các trang web khác để thu hút khách hàng tiềm năng của bạn. Chỉnh chiến lược công khai của bạn đến mục tiêu của bạn.<br />
<br />
Đừng mong đợi để kiếm tiền từ trang web của bạn, trừ khi bạn sẵn sàng chi tiêu tiền - hoặc một lượng lớn thời gian, luôn nhớ rằng "thời gian là tiền bạc" - tạo, tiếp thị, và cập nhật nó.<br />
&gt;&gt; Xem thêm: <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">Khoa hoc photoshop</a> cơ bản nâng cao tại hà nội !<br />
<br />
Nơi đầu tiên và quan trọng nhất để công bố trang web của bạn là vào trang web đó. Mục tiêu cơ bản của bạn là để có được càng nhiều link càng tốt để trang web của bạn từ danh sách mới là gì, danh sách Cool, và đặc biệt là các thư mục hoặc các trang cụ thể đối với các lợi ích địa chỉ trang web của bạn là gì. Tìm trang có một mục đích và thương mại tương tự như con trỏ từ trang web của họ để bạn và từ trang web của bạn đến họ.<br />
<br />
Những hình ảnh công khai Web thay đổi tất cả các thời gian, do đó, các địa điểm tốt nhất để đi cho thông tin là bất kỳ của một vài trang web với thông tin công khai và các con trỏ. Kiểm tra:<a href="http://www.cyberwave.com/ppoint2.html" target="_blank" rel="noopener" class="mycode_url">http://www.cyberwave.com/ppoint2.html</a>, Web xã hội, và kinh doanh Microsoft Small Trung ương.<br />
<br />
Những trang web này cung cấp cho bạn thông tin về làm thế nào để có được các trang của bạn công bố công khai trên các trang web như trang New Yahoo! gì. Bạn có thể tìm thấy trang này tạidir.yahoo.com/new.<br />
<br />
Bạn cũng nên sử dụng các phương tiện không công khai Web site của bạn. Đưa ra một thông cáo báo chí - nhưng chắc chắn để chờ đợi cho đến khi trang web của bạn thực sự sẵn sàng, không đầy đủ các dấu hiệu Dưới Xây dựng. Nhiều công ty tự hào bao gồm các URL trang web của họ trên danh thiếp, văn phòng phẩm, in ấn quảng cáo, và thậm chí các quảng cáo truyền hình. Bạn đã đầu tư rất nhiều trong trang web của bạn - bây giờ là thời gian để được hưởng lợi từ những nỗ lực của bạn.<br />
<br />
&gt;&gt; Xem thêm:<a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html//" target="_blank" rel="noopener" class="mycode_url"> Khoa hoc lap trinh android</a> cơ bản nâng cao tại hà nội !</h3></span>]]></description>
			<content:encoded><![CDATA[<span><h3>Nhưng nếu bạn thiết lập những kỳ vọng của bạn ở mức hợp lý và sử dụng các kỹ thuật khác nhau để có được mọi người đến với trang web của bạn, bạn có khả năng để đáp ứng các mục tiêu của bạn khi<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url"> hoc lap trinh php</a> .<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Playing the name game</span><br />
<br />
Một trong những cách tốt nhất để có được mọi người nhớ trang web của bạn là để có được tên miền riêng của bạn. Một tên miền là phần đầu tiên của một địa chỉ web, thường không bao gồm các www. lúc đầu. Ví dụ, yahoo.com và whitehouse.gov là tên miền. Địa chỉ web hoặc URL (Uniform Resource Locator), mà chỉ là một tiêu chuẩn hóa, hoặc đồng phục, cách để tìm nguồn tài nguyên như máy chủ Web và các tập tin trên Internet những gì người sử dụng đối với bạn là.<br />
<br />
Một URL như <a href="http://www.smithtires.com" target="_blank" rel="noopener" class="mycode_url">http://www.smithtires.com</a> là dễ dàng hơn nhiều để nhớ - và nhiều ấn tượng hơn - hơnwww.geocities.com/smithtires. Trong trường hợp đầu tiên, tên miền là smithtires.com; trong trường hợp thứ hai, đó là geocities.com. Rõ ràng, một cá nhân plausibly có thể sở hữu tên miền đầu tiên; thứ hai là thuộc sở hữu của Yahoo !.<br />
<br />
Bạn có thể có được một tên miền trong một trong nhiều cách, nhưng cách phổ biến nhất là để đi đến trang web của Network Solutions tại <a href="http://www.networksolutions.com" target="_blank" rel="noopener" class="mycode_url">http://www.networksolutions.com</a>. Network Solutions phí một khoản phí nhỏ hàng năm cho một giấy phép cho một cái tên. Các trang web Giải pháp mạng Web làm cho nó dễ dàng để thử tên miền khác nhau để xem những gì có sẵn. (Nó cũng cung cấp cho bạn khả năng để xây dựng một trang web được lưu trữ bởi Network Solutions cho hợp lý, nhưng không đáng kể, lệ phí). Bạn cũng có thể mua tên miền của bạn, thường xuyên cho một khoản phí cao hơn, thông qua một công ty lưu trữ web, hoặc một trang web như GeoCities.<br />
<br />
Hãy tạo cho mình một ngày hoặc lâu hơn để suy nghĩ về tên miền ưa thích của bạn cuối cùng trước khi mua một tên. Bắt một tên là dễ dàng như vậy mà nó là tất cả quá dễ dàng để kết thúc việc mua một số tên trước khi bạn cuối cùng đã kết thúc với một trong những bạn thực sự muốn.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công khai các trang web của bạn</span><br />
<br />
Sau khi trang web của bạn lên và thử nghiệm, công bố công khai nó. Số lượng và loại công khai bạn cần phụ thuộc vào các mục tiêu của bạn cho trang web. Nếu bạn đang cố gắng để gây ấn tượng với báo chí và các nhà phân tích, phát hành một thông cáo báo chí. Nếu bạn đang công bố một trang web cá nhân, bạn có thể thấy rằng với bạn bè và gia đình về nó là đủ. Nếu bạn đang cố gắng để cung cấp cho khách hàng một con đường khác để giao tiếp với bạn, địa chỉ web lên văn phòng phẩm, danh thiếp, và quảng cáo. Nếu bạn đang cố gắng bán trên Web, đặt quảng cáo trên các trang web khác để thu hút khách hàng tiềm năng của bạn. Chỉnh chiến lược công khai của bạn đến mục tiêu của bạn.<br />
<br />
Đừng mong đợi để kiếm tiền từ trang web của bạn, trừ khi bạn sẵn sàng chi tiêu tiền - hoặc một lượng lớn thời gian, luôn nhớ rằng "thời gian là tiền bạc" - tạo, tiếp thị, và cập nhật nó.<br />
&gt;&gt; Xem thêm: <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">Khoa hoc photoshop</a> cơ bản nâng cao tại hà nội !<br />
<br />
Nơi đầu tiên và quan trọng nhất để công bố trang web của bạn là vào trang web đó. Mục tiêu cơ bản của bạn là để có được càng nhiều link càng tốt để trang web của bạn từ danh sách mới là gì, danh sách Cool, và đặc biệt là các thư mục hoặc các trang cụ thể đối với các lợi ích địa chỉ trang web của bạn là gì. Tìm trang có một mục đích và thương mại tương tự như con trỏ từ trang web của họ để bạn và từ trang web của bạn đến họ.<br />
<br />
Những hình ảnh công khai Web thay đổi tất cả các thời gian, do đó, các địa điểm tốt nhất để đi cho thông tin là bất kỳ của một vài trang web với thông tin công khai và các con trỏ. Kiểm tra:<a href="http://www.cyberwave.com/ppoint2.html" target="_blank" rel="noopener" class="mycode_url">http://www.cyberwave.com/ppoint2.html</a>, Web xã hội, và kinh doanh Microsoft Small Trung ương.<br />
<br />
Những trang web này cung cấp cho bạn thông tin về làm thế nào để có được các trang của bạn công bố công khai trên các trang web như trang New Yahoo! gì. Bạn có thể tìm thấy trang này tạidir.yahoo.com/new.<br />
<br />
Bạn cũng nên sử dụng các phương tiện không công khai Web site của bạn. Đưa ra một thông cáo báo chí - nhưng chắc chắn để chờ đợi cho đến khi trang web của bạn thực sự sẵn sàng, không đầy đủ các dấu hiệu Dưới Xây dựng. Nhiều công ty tự hào bao gồm các URL trang web của họ trên danh thiếp, văn phòng phẩm, in ấn quảng cáo, và thậm chí các quảng cáo truyền hình. Bạn đã đầu tư rất nhiều trong trang web của bạn - bây giờ là thời gian để được hưởng lợi từ những nỗ lực của bạn.<br />
<br />
&gt;&gt; Xem thêm:<a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html//" target="_blank" rel="noopener" class="mycode_url"> Khoa hoc lap trinh android</a> cơ bản nâng cao tại hà nội !</h3></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Pixel hoàn hảo với layer vector]]></title>
			<link>https://uhm.vn/forum/Thread-Pixel-ho%C3%A0n-h%E1%BA%A3o-v%E1%BB%9Bi-layer-vector</link>
			<pubDate>Tue, 12 Jan 2016 16:14:20 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-Pixel-ho%C3%A0n-h%E1%BA%A3o-v%E1%BB%9Bi-layer-vector</guid>
			<description><![CDATA[<span><h3>Khi chuyển layer điểm vector, Photoshop thể hiện một số hành vi kỳ lạ, liên quan thế nào đến nay bạn tôi hiện đang thu nhỏ. Tại 100%, thúc bằng cách sử dụng các phím mũi tên sẽ di chuyển điểm vector của bạn chính xác 1 pixel. Tại 200%, thúc di chuyển con một nửa pixel. Ở 300%, nó sẽ di chuyển một phần ba của một pixel khi <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">hoc photoshop</a> .<br />
<br />
Các hành vi dường như cố ý, nhưng nó không phải thường gì tôi sau khi. Hầu hết thời gian tôi muốn di chuyển toàn bộ số gia pixel. Đây là cách bạn có thể làm điều đó, mà không cần phóng to ra đến 100%.<br />
Mở tài liệu của bạn, sau đó tạo ra cửa sổ thứ hai bằng cách chọn Window&gt; Arrange&gt; New Window. Sau đó bạn có thể thay đổi kích thước cửa sổ mới và đặt nó ở đâu đó trên đường đi.<br />
<br />
[Xem thêm: Khóa học<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url"> lập trình php</a> tại hà nội !]<br />
<br />
Chỉnh sửa trong cửa sổ khác như bình thường, phóng to như xa như bạn muốn. Bây giờ bạn sẽ có thể nhấn Command-`để chuyển về cửa sổ đó là zoom 100%, di chuyển bằng cách sử dụng các phím mũi tên, sau đó nhấn Command- \` để chuyển đổi qua lại một lần nữa. Bởi vì các cửa sổ khác được phóng to đến 100%, thúc sẽ di chuyển các điểm vector được chọn chính xác 1 pixel.<br />
<br />
<br />
Xin lưu ý rằng giữ shift trong khi sử dụng các phím mũi tên để di chuyển luôn luôn di chuyển 10 pixel, không có vấn đề như thế nào đến nay tại bạn đang thu nhỏ. Ngoài ra, kéo điểm với con chuột dính vào điểm ảnh trong hầu hết các tình huống. Hầu hết, nhưng không phải tất cả.<br />
<br />
Trong khi không phải hoàn hảo, kỹ thuật này đã giúp loại bỏ một số thất vọng với vector chi tiết chỉnh sửa đường dẫn trong Photoshop. Hoặc có thể nó chỉ là một lý do hình dạng phức tạp nên được vẽ trong Illustrator đầu tiên, sau đó dán như các lớp hình dạng?<br />
Nếu bất cứ ai từ đội Photoshop Adobe đang đọc này, xin vui lòng xem xét thêm một tùy chọn Snap Để Pixel toàn cầu có thể thay thế tất cả các tùy chọn tương tự khác được rải khắp các UI. Chỉ cần một chuyển đổi toàn cầu có thể được bật hoặc tắt có nghĩa là mỗi hành động duy nhất có thể được điểm ảnh bị gãy hay không.<br />
Tham khảo: <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">khóa học lâp trình android</a> cơ bản tại hà nội !</h3></span>]]></description>
			<content:encoded><![CDATA[<span><h3>Khi chuyển layer điểm vector, Photoshop thể hiện một số hành vi kỳ lạ, liên quan thế nào đến nay bạn tôi hiện đang thu nhỏ. Tại 100%, thúc bằng cách sử dụng các phím mũi tên sẽ di chuyển điểm vector của bạn chính xác 1 pixel. Tại 200%, thúc di chuyển con một nửa pixel. Ở 300%, nó sẽ di chuyển một phần ba của một pixel khi <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">hoc photoshop</a> .<br />
<br />
Các hành vi dường như cố ý, nhưng nó không phải thường gì tôi sau khi. Hầu hết thời gian tôi muốn di chuyển toàn bộ số gia pixel. Đây là cách bạn có thể làm điều đó, mà không cần phóng to ra đến 100%.<br />
Mở tài liệu của bạn, sau đó tạo ra cửa sổ thứ hai bằng cách chọn Window&gt; Arrange&gt; New Window. Sau đó bạn có thể thay đổi kích thước cửa sổ mới và đặt nó ở đâu đó trên đường đi.<br />
<br />
[Xem thêm: Khóa học<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url"> lập trình php</a> tại hà nội !]<br />
<br />
Chỉnh sửa trong cửa sổ khác như bình thường, phóng to như xa như bạn muốn. Bây giờ bạn sẽ có thể nhấn Command-`để chuyển về cửa sổ đó là zoom 100%, di chuyển bằng cách sử dụng các phím mũi tên, sau đó nhấn Command- \` để chuyển đổi qua lại một lần nữa. Bởi vì các cửa sổ khác được phóng to đến 100%, thúc sẽ di chuyển các điểm vector được chọn chính xác 1 pixel.<br />
<br />
<br />
Xin lưu ý rằng giữ shift trong khi sử dụng các phím mũi tên để di chuyển luôn luôn di chuyển 10 pixel, không có vấn đề như thế nào đến nay tại bạn đang thu nhỏ. Ngoài ra, kéo điểm với con chuột dính vào điểm ảnh trong hầu hết các tình huống. Hầu hết, nhưng không phải tất cả.<br />
<br />
Trong khi không phải hoàn hảo, kỹ thuật này đã giúp loại bỏ một số thất vọng với vector chi tiết chỉnh sửa đường dẫn trong Photoshop. Hoặc có thể nó chỉ là một lý do hình dạng phức tạp nên được vẽ trong Illustrator đầu tiên, sau đó dán như các lớp hình dạng?<br />
Nếu bất cứ ai từ đội Photoshop Adobe đang đọc này, xin vui lòng xem xét thêm một tùy chọn Snap Để Pixel toàn cầu có thể thay thế tất cả các tùy chọn tương tự khác được rải khắp các UI. Chỉ cần một chuyển đổi toàn cầu có thể được bật hoặc tắt có nghĩa là mỗi hành động duy nhất có thể được điểm ảnh bị gãy hay không.<br />
Tham khảo: <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">khóa học lâp trình android</a> cơ bản tại hà nội !</h3></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CheckBox trong UI Control với lập trình Android]]></title>
			<link>https://uhm.vn/forum/Thread-CheckBox-trong-UI-Control-v%E1%BB%9Bi-l%E1%BA%ADp-tr%C3%ACnh-Android</link>
			<pubDate>Thu, 07 Jan 2016 15:48:01 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-CheckBox-trong-UI-Control-v%E1%BB%9Bi-l%E1%BA%ADp-tr%C3%ACnh-Android</guid>
			<description><![CDATA[<span style="font-size: 3pt;" class="mycode_size">CheckBox là một loại hình cụ thể của two-states mà có thể là kiểm tra hoặc kiểm soát, với một on/off có thể được chuyển bằng cách cho người dùng. Bạn nên sử dụng hộp kiểm tra khi trình bày cho người dùng với một nhóm các tùy chọn lựa chọn mà không phải là loại trừ lẫn nhau khi học <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">lập trình android</a>. <br />
<br />
Một ví dụ về cách sử dụng một checkbox bên trong hoạt động ứng dụng bạn khi lập trình android sẽ được như sau:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>public class MyActivity extends Activity {<br />
protected void onCreate(Bundle icicle) {<br />
super.onCreate(icicle);<br />
<br />
setContentView(R.layout.content_layout_id);<br />
<br />
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);<br />
if (checkBox.isChecked()) {<br />
checkBox.setChecked(false);<br />
}<br />
}<br />
}</code></div></div>&gt;&gt;<a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url"> Khóa học lập trình android</a> cơ bản nâng cao tại hà nội !<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Thuộc tính CheckBox</span><br />
<br />
Sau đây là những thuộc tính quan trọng liên quan đến kiểm soát CheckBox. Bạn có thể kiểm tra tài liệu chính thức Android cho danh sách đầy đủ các thuộc tính và phương pháp liên quan mà bạn có thể sử dụng để thay đổi các thuộc tính được thời gian chạy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kế thừa từ lớp android.widget.TextView:</span><br />
<br />
Thuộc tính	 Mô tả<br />
android:autoText	Xác định rằng TextView này có một phương pháp đầu vào văn bản và tự động chỉnh sửa một số lỗi chính tả phổ biến.<br />
android:drawableBottom 	Đây là drawable được rút ra dưới văn bản.<br />
android:drawableRight 	Đây là drawable được rút ra ở bên phải của văn bản.<br />
android:editable 	Xác định rằng TextView này có một phương pháp đầu vào.<br />
android:text 	văn bản để hiển thị.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kế thừa từ lớp android.view.View:</span><br />
<br />
Thuộc tính 	Mô tả<br />
android:background 	Đây là một drawable để sử dụng như là background.<br />
android:contentDescription 	văn bản mô tả tóm tắt nội dung của khung nhìn.<br />
android:id 	cung cấp một tên định danh cho quan điểm này,<br />
android:onClick	Đây là tên của phương pháp trong bối cảnh của View này để gọi khi xem được nhấp vào.<br />
android:visibility	 điều khiển tầm nhìn ban đầu của khung nhìn.<br />
<br />
<br />
<br />
------------------- || -------------------<br />
Trung tâm Đào tạo<a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url"> khoa hoc photoshop</a>  cơ bản nâng cao tại VietPro!</span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: 3pt;" class="mycode_size">CheckBox là một loại hình cụ thể của two-states mà có thể là kiểm tra hoặc kiểm soát, với một on/off có thể được chuyển bằng cách cho người dùng. Bạn nên sử dụng hộp kiểm tra khi trình bày cho người dùng với một nhóm các tùy chọn lựa chọn mà không phải là loại trừ lẫn nhau khi học <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">lập trình android</a>. <br />
<br />
Một ví dụ về cách sử dụng một checkbox bên trong hoạt động ứng dụng bạn khi lập trình android sẽ được như sau:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>public class MyActivity extends Activity {<br />
protected void onCreate(Bundle icicle) {<br />
super.onCreate(icicle);<br />
<br />
setContentView(R.layout.content_layout_id);<br />
<br />
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);<br />
if (checkBox.isChecked()) {<br />
checkBox.setChecked(false);<br />
}<br />
}<br />
}</code></div></div>&gt;&gt;<a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url"> Khóa học lập trình android</a> cơ bản nâng cao tại hà nội !<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Thuộc tính CheckBox</span><br />
<br />
Sau đây là những thuộc tính quan trọng liên quan đến kiểm soát CheckBox. Bạn có thể kiểm tra tài liệu chính thức Android cho danh sách đầy đủ các thuộc tính và phương pháp liên quan mà bạn có thể sử dụng để thay đổi các thuộc tính được thời gian chạy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kế thừa từ lớp android.widget.TextView:</span><br />
<br />
Thuộc tính	 Mô tả<br />
android:autoText	Xác định rằng TextView này có một phương pháp đầu vào văn bản và tự động chỉnh sửa một số lỗi chính tả phổ biến.<br />
android:drawableBottom 	Đây là drawable được rút ra dưới văn bản.<br />
android:drawableRight 	Đây là drawable được rút ra ở bên phải của văn bản.<br />
android:editable 	Xác định rằng TextView này có một phương pháp đầu vào.<br />
android:text 	văn bản để hiển thị.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kế thừa từ lớp android.view.View:</span><br />
<br />
Thuộc tính 	Mô tả<br />
android:background 	Đây là một drawable để sử dụng như là background.<br />
android:contentDescription 	văn bản mô tả tóm tắt nội dung của khung nhìn.<br />
android:id 	cung cấp một tên định danh cho quan điểm này,<br />
android:onClick	Đây là tên của phương pháp trong bối cảnh của View này để gọi khi xem được nhấp vào.<br />
android:visibility	 điều khiển tầm nhìn ban đầu của khung nhìn.<br />
<br />
<br />
<br />
------------------- || -------------------<br />
Trung tâm Đào tạo<a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url"> khoa hoc photoshop</a>  cơ bản nâng cao tại VietPro!</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Thuộc tính AutoCompleteTextView trong lập trình Android]]></title>
			<link>https://uhm.vn/forum/Thread-Thu%E1%BB%99c-t%C3%ADnh-AutoCompleteTextView-trong-l%E1%BA%ADp-tr%C3%ACnh-Android</link>
			<pubDate>Tue, 05 Jan 2016 11:31:09 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-Thu%E1%BB%99c-t%C3%ADnh-AutoCompleteTextView-trong-l%E1%BA%ADp-tr%C3%ACnh-Android</guid>
			<description><![CDATA[<span><h3>Người dùng có thể chọn một mục từ đó thay thế nội dung của hộp chỉnh sửa.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Thuộc tính AutoCompleteTextView</span><br />
<br />
Sau đây là những thuộc tính quan trọng liên quan đến Control AutoCompleteTextView. Bạn có thể kiểm tra tài liệu chính thức khi học <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">lập trình android cơ bản </a>cho danh sách đầy đủ các thuộc tính và phương pháp liên quan mà bạn có thể sử dụng để thay đổi các thuộc tính được thời gian chạy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Thuộc tính 	Mô tả</span><br />
android:completionHint	Điều này xác định những hint được hiển thị trong trình đơn thả xuống.<br />
android:completionHintView	Điều này xác định xem hint được hiển thị trong trình đơn thả xuống.<br />
android:completionThreshold	Điều này xác định số ký tự mà người dùng phải gõ trước khi đề nghị hoàn công được hiển thị trong một trình đơn thả xuống.<br />
android:dropDownAnchor	Đây là xem để neo thả xuống tự động hoàn tất.<br />
android:dropDownHeight	Đây chỉ định chiều cao cơ bản của thả xuống.<br />
android:dropDownHorizontalOffset	Số lượng điểm ảnh mà thả xuống phải được bù đắp theo chiều ngang.<br />
android:dropDownSelector	Đây là bộ chọn trong một danh sách thả xuống.<br />
android:dropDownVerticalOffset	Số lượng điểm ảnh mà thả xuống phải được bù đắp theo chiều dọc.<br />
android:dropDownWidth	Điều này xác định chiều rộng cơ bản của thả xuống.<br />
android:popupBackground	Điều này đặt background.<br />
<br />
<br />
<br />
----------------- || -----------------<br />
Trung tâm Đào tạo <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">khóa học photoshop</a> cơ bản tại Hà Nội !</h3></span>]]></description>
			<content:encoded><![CDATA[<span><h3>Người dùng có thể chọn một mục từ đó thay thế nội dung của hộp chỉnh sửa.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Thuộc tính AutoCompleteTextView</span><br />
<br />
Sau đây là những thuộc tính quan trọng liên quan đến Control AutoCompleteTextView. Bạn có thể kiểm tra tài liệu chính thức khi học <a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">lập trình android cơ bản </a>cho danh sách đầy đủ các thuộc tính và phương pháp liên quan mà bạn có thể sử dụng để thay đổi các thuộc tính được thời gian chạy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Thuộc tính 	Mô tả</span><br />
android:completionHint	Điều này xác định những hint được hiển thị trong trình đơn thả xuống.<br />
android:completionHintView	Điều này xác định xem hint được hiển thị trong trình đơn thả xuống.<br />
android:completionThreshold	Điều này xác định số ký tự mà người dùng phải gõ trước khi đề nghị hoàn công được hiển thị trong một trình đơn thả xuống.<br />
android:dropDownAnchor	Đây là xem để neo thả xuống tự động hoàn tất.<br />
android:dropDownHeight	Đây chỉ định chiều cao cơ bản của thả xuống.<br />
android:dropDownHorizontalOffset	Số lượng điểm ảnh mà thả xuống phải được bù đắp theo chiều ngang.<br />
android:dropDownSelector	Đây là bộ chọn trong một danh sách thả xuống.<br />
android:dropDownVerticalOffset	Số lượng điểm ảnh mà thả xuống phải được bù đắp theo chiều dọc.<br />
android:dropDownWidth	Điều này xác định chiều rộng cơ bản của thả xuống.<br />
android:popupBackground	Điều này đặt background.<br />
<br />
<br />
<br />
----------------- || -----------------<br />
Trung tâm Đào tạo <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">khóa học photoshop</a> cơ bản tại Hà Nội !</h3></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Cách nhận biết vị trí được chạm bản đồ với màn hình cảm ứng trong Android]]></title>
			<link>https://uhm.vn/forum/Thread-C%C3%A1ch-nh%E1%BA%ADn-bi%E1%BA%BFt-v%E1%BB%8B-tr%C3%AD-%C4%91%C6%B0%E1%BB%A3c-ch%E1%BA%A1m-b%E1%BA%A3n-%C4%91%E1%BB%93-v%E1%BB%9Bi-m%C3%A0n-h%C3%ACnh-c%E1%BA%A3m-%E1%BB%A9ng-trong-Android</link>
			<pubDate>Mon, 04 Jan 2016 17:13:22 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-C%C3%A1ch-nh%E1%BA%ADn-bi%E1%BA%BFt-v%E1%BB%8B-tr%C3%AD-%C4%91%C6%B0%E1%BB%A3c-ch%E1%BA%A1m-b%E1%BA%A3n-%C4%91%E1%BB%93-v%E1%BB%9Bi-m%C3%A0n-h%C3%ACnh-c%E1%BA%A3m-%E1%BB%A9ng-trong-Android</guid>
			<description><![CDATA[<span><h3><br />
Nếu bạn đã thêm một lớp phủ lên bản đồ, bạn có thể ghi đè lên các phương pháp onTouchEvent() trong lớp MapOverlay. Phương pháp này được bắn mỗi khi người dùng chạm vào bản đồ. Phương pháp này có hai tham số: MotionEvent và MapView. Sử dụng tham số MotionEvent, bạn có thể xác định xem người dùng đã nâng lên ngón tay của mình từ màn hình bằng cách sử dụng phương pháp getAction(). Trong đoạn mã sau khi<a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url"> lap trinh android</a> đây, nếu người dùng đã cảm động và sau đó nhấc ngón tay, bạn sẽ hiển thị độ và vĩ độ của địa điểm xúc động:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>import android.view.MotionEvent;<br />
import android.widget.Toast;<br />
//...<br />
class MapOverlay extends com.google.android.maps.Overlay<br />
{<br />
@Override<br />
public boolean draw(Canvas canvas,MapView mapView,<br />
boolean shadow,long when)<br />
{<br />
super.draw(canvas,mapView,shadow);<br />
//---translatetheGeoPointtoscreenpixels---<br />
Pointscreen Pts=new Point();<br />
mapView.getProjection().toPixels(p,screenPts);<br />
//---addthemarker---<br />
Bitmap bmp=BitmapFactory.decodeResource(<br />
getResources(),R.drawable.pushpin);<br />
canvas.drawBitmap(bmp,screenPts.x,screenPts.y-50,null);<br />
returntrue;<br />
}<br />
@Override<br />
public boolean onTouchEvent(MotionEvent event, MapView mapView)<br />
{<br />
//---when user lifts his finger---<br />
if(event.getAction() == 1) {<br />
GeoPoint p = mapView.getProjection().fromPixels(<br />
(int) event.getX(),<br />
(int) event.getY());<br />
Toast.makeText(getBaseContext(),<br />
“Location: “+<br />
p.getLatitudeE6() / 1E6 + “,”+<br />
p.getLongitudeE6() /1E6 ,<br />
Toast.LENGTH_SHORT).show();<br />
}<br />
return false;<br />
}<br />
}</code></div></div>Phương pháp getProjection() trả về một chiếu để chuyển đổi giữa các màn hình tọa độ điểm ảnh và tọa độ vĩ độ / kinh độ. Phương pháp fromPixels() sau đó chuyển đổi màn hình độ vào một đối tượng GeoPoint.<br />
<br />
Hình dưới đây cho thấy bản đồ hiển thị một tập hợp các tọa độ khi người dùng nhấp chuột vào một vị trí trên bản đồ.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/10/nhan-biet-vi-tri-khi-cham-tren-ban-do-android.png" loading="lazy"  alt="[Image: nhan-biet-vi-tri-khi-cham-tren-ban-do-android.png]" class="mycode_img" /><br />
<br />
<br />
------------------- || -------------------<br />
Trung tâm đào tạo <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url">hoc php </a>cơ bản nâng cao tại VietPro!</h3></span>]]></description>
			<content:encoded><![CDATA[<span><h3><br />
Nếu bạn đã thêm một lớp phủ lên bản đồ, bạn có thể ghi đè lên các phương pháp onTouchEvent() trong lớp MapOverlay. Phương pháp này được bắn mỗi khi người dùng chạm vào bản đồ. Phương pháp này có hai tham số: MotionEvent và MapView. Sử dụng tham số MotionEvent, bạn có thể xác định xem người dùng đã nâng lên ngón tay của mình từ màn hình bằng cách sử dụng phương pháp getAction(). Trong đoạn mã sau khi<a href="http://laptrinhandroid.net.vn/khoa-hoc-android-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url"> lap trinh android</a> đây, nếu người dùng đã cảm động và sau đó nhấc ngón tay, bạn sẽ hiển thị độ và vĩ độ của địa điểm xúc động:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>import android.view.MotionEvent;<br />
import android.widget.Toast;<br />
//...<br />
class MapOverlay extends com.google.android.maps.Overlay<br />
{<br />
@Override<br />
public boolean draw(Canvas canvas,MapView mapView,<br />
boolean shadow,long when)<br />
{<br />
super.draw(canvas,mapView,shadow);<br />
//---translatetheGeoPointtoscreenpixels---<br />
Pointscreen Pts=new Point();<br />
mapView.getProjection().toPixels(p,screenPts);<br />
//---addthemarker---<br />
Bitmap bmp=BitmapFactory.decodeResource(<br />
getResources(),R.drawable.pushpin);<br />
canvas.drawBitmap(bmp,screenPts.x,screenPts.y-50,null);<br />
returntrue;<br />
}<br />
@Override<br />
public boolean onTouchEvent(MotionEvent event, MapView mapView)<br />
{<br />
//---when user lifts his finger---<br />
if(event.getAction() == 1) {<br />
GeoPoint p = mapView.getProjection().fromPixels(<br />
(int) event.getX(),<br />
(int) event.getY());<br />
Toast.makeText(getBaseContext(),<br />
“Location: “+<br />
p.getLatitudeE6() / 1E6 + “,”+<br />
p.getLongitudeE6() /1E6 ,<br />
Toast.LENGTH_SHORT).show();<br />
}<br />
return false;<br />
}<br />
}</code></div></div>Phương pháp getProjection() trả về một chiếu để chuyển đổi giữa các màn hình tọa độ điểm ảnh và tọa độ vĩ độ / kinh độ. Phương pháp fromPixels() sau đó chuyển đổi màn hình độ vào một đối tượng GeoPoint.<br />
<br />
Hình dưới đây cho thấy bản đồ hiển thị một tập hợp các tọa độ khi người dùng nhấp chuột vào một vị trí trên bản đồ.<br />
<br />
<img src="http://laptrinhandroid.net.vn/wp-content/uploads/2015/10/nhan-biet-vi-tri-khi-cham-tren-ban-do-android.png" loading="lazy"  alt="[Image: nhan-biet-vi-tri-khi-cham-tren-ban-do-android.png]" class="mycode_img" /><br />
<br />
<br />
------------------- || -------------------<br />
Trung tâm đào tạo <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url">hoc php </a>cơ bản nâng cao tại VietPro!</h3></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Đối tượng Math trong lập trình Javascript]]></title>
			<link>https://uhm.vn/forum/Thread-%C4%90%E1%BB%91i-t%C6%B0%E1%BB%A3ng-Math-trong-l%E1%BA%ADp-tr%C3%ACnh-Javascript</link>
			<pubDate>Wed, 30 Dec 2015 15:18:26 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-%C4%90%E1%BB%91i-t%C6%B0%E1%BB%A3ng-Math-trong-l%E1%BA%ADp-tr%C3%ACnh-Javascript</guid>
			<description><![CDATA[<span style="font-size: 3pt;" class="mycode_size">Chúng ta sẽ tiếp tục xây dựng đối tượng trong Javascript với đối tượng Math. Bạn đã được xem cách xử lý Math trong bài 7m sử dụng hàm ngẫu nhiên random() để tạo ra một số ngẫu nhiên giữa 0 và 1 và phương pháp floor() để làm tròn kết quả. Các đối tượng Math cho phép bạn viết kịch bản thực hiện nhiệm vụ toán học phức tạp trong chớp mắt. Trong bài học này, bạn sẽ sử dụng:<br />
<br />
- Math.PI để tính chu vi của một vòng tròn;<br />
<br />
- Math.sqrt() để tính toán một giá trị căn bậc hai.<br />
<br />
Trong quá trình học javascript và học php cơ bản tại hà nội này, bạn sẽ tìm hiểu làm thế nào để sử dụng:<br />
<br />
- parseInt()/parseFloat() để chuyển đổi các chuỗi số;<br />
<br />
- isNaN() để kiểm tra xem một giá trị hay không là một con số;<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Math.PI</span><br />
<br />
 Thuộc tính này lưu giữ giá trị của PI, một hằng số toán học mà số tiền khoảng 3,14159.Hãy nhanh chóng làm mới các phép toán học. Dưới đây là một số định nghĩa:<br />
<br />
- Circle: là hình dáng mà tất cả các điểm có cùng khoảng cách với trung tâm<br />
<img src="http://hocthietkeweb.net.vn/wp-content/uploads/2015/08/%C4%90%E1%BB%91i-t%C6%B0%E1%BB%A3ng-Math-1.gif" loading="lazy"  alt="[Image: %C4%90%E1%BB%91i-t%C6%B0%E1%BB%A3ng-Math-1.gif]" class="mycode_img" /><br />
<br />
+) bao quanh vòng quanh hình (màu xanh màu như trong hình trên), là chu vi vòng tròn;<br />
<br />
+) đường cắt vòng tròn theo chiều ngang trong một nửa (màu đỏ trong hình trên) là đường kính vòng tròn;<br />
<br />
+) mỗi một nửa đường kính đại diện cho một bán kính. PI là tỷ số giữa chu vi của một vòng tròn và đường kính. Nếu bạn cần giá trị này trong chương trình JavaScript của bạn, sử dụng Math.PI. Chỉ cần cố gắng này ra giữa bao<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;script&gt; của trang HTML:<br />
//store and display the value of PI:<br />
<br />
var pi = Math.PI;<br />
<br />
document.write(pi);</code></div></div>Ví dụ: sử dụng Math.PI để tìm ra chu vi của một vòng tròn Trước tiên: chuẩn bị một tài liệu HTML như thế này:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Lesson 12: JavaScript Objects - Math Object&lt;/title&gt;<br />
&lt;script type="text/javascript" src="lesson12_tryout1.js"&gt;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;Lesson 12: Circumference calculator&lt;/h1&gt;<br />
<br />
&lt;p&gt;Enter length of radius: &lt;input type="text" id="txtRadius" /&gt;&lt;/p&gt;<br />
<br />
&lt;p&gt;&lt;input type="button" id="btnSubmit" value="Calculate circumference" /&gt;&lt;/p&gt;<br />
<br />
&lt;p id="result"&gt;&lt;/p&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div>  Bây giờ, tạo một tài liệu JavaScript và đặt tên cho nó lesson12_tryout1.js. Tập tin này sẽ chứa 3 chức năng:<br />
<br />
- init() khởi tạo các kịch bản bằng cách liên kết các processAnswer() để sự kiện thích hợp của nó, có nghĩa là, các sự kiện onclick btnSubmit;<br />
<br />
- processAnswer() kiểm tra các câu trả lời được gửi bởi người sử dụng, gọi hàm đó thực hiện các phép tính, và hiển thị kết quả;<br />
<br />
- getCircumference(rad) được thông qua giá trị bán kính như là đối số, thực hiện các tính toán thực tế, và trả về chu vi.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//init() function binds the processAnswer() function<br />
<br />
//to the onclick event of the button<br />
<br />
function init()<br />
<br />
{<br />
<br />
var myButton = document.getElementById("btnSubmit");<br />
<br />
myButton.onclick = processAnswer;<br />
<br />
}<br />
/*********************************************/<br />
//Bind the init function to the onload event<br />
<br />
onload = init;<br />
/*********************************************/<br />
//This function checks the user's input,<br />
//calls the function that performs the calculation,<br />
//and displays the result<br />
function processAnswer()<br />
{<br />
<br />
//store a reference to the inputbox<br />
var inputBox = document.getElementById("txtRadius");<br />
//get the radius value entered in the inputbox<br />
//make sure to convert the string (text) to a number:<br />
//calculations can only be performed with numbers,<br />
//and the value in the inputbox is processed as string.<br />
//parseInt(string) and parseFloat(string)<br />
//take a string as input and return an integer<br />
//or a floating point number respectively.<br />
var radius = parseInt(inputBox.value);<br />
//get a reference to the paragraph to display result<br />
var result = document.getElementById("result");<br />
//create and initialize a var to store the result<br />
var resultString = "";<br />
//Perform some validation on the user's input:<br />
//if the value entered by the user is not a number<br />
//alert the user. isNaN(value) takes<br />
//a value as input and returns true if the value is not a number,<br />
//it returns false if the value is a number.<br />
//the expression below is short for:<br />
//if (isNaN(radius) == true)<br />
if (isNaN(radius))<br />
{<br />
alert("Please, enter a number");<br />
}<br />
else<br />
{<br />
//if the user has correctly entered a number,<br />
//call the function that performs the calculation<br />
//and display the result on the page<br />
var circ = getCircumference(radius);<br />
resultString = "Circumference is: " + circ;<br />
result.innerHTML = resultString;<br />
}<br />
}<br />
/*********************************************/<br />
//This is the function that performs the calculation:<br />
//it takes the radius as input and returns the circumference<br />
function getCircumference(rad)<br />
{<br />
var circumference = 2 * (Math.PI * rad);<br />
return circumference;<br />
}</code></div></div><br />
&gt;&gt; Khóa học <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">lap trinh android</a> cơ bản nâng cao tại hà nội !<br />
<span style="font-weight: bold;" class="mycode_b">2. Math.sqrt()</span><br />
<br />
Math.sqrt(number) có một số như là đối số và trả về căn bậc hai của số đó. Nếu một số âm được nhập như là đối số, ví dụ Math.sqrt(-5), hàm trả về NaN, đó là một giá trị mà JavaScript không đối xử như một con số. Căn bậc hai của 25, ví dụ, đó là con số đó nhân với chính nó mang lại kết quả là 25, đó là, 5. Công thức là: hình vuông của n = n * n. JavaScript thực hiện tính toán này tự động. Dưới đây là một bản demo nhanh: gõ đoạn mã sau giữa bao &lt;script&gt; của trang HTML:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>var squareRoot = Math.sqrt(25);<br />
<br />
document.write("The square root of 25 is: " + squareRoot);<br />
<br />
//This should print:<br />
<br />
//The square root of 25 is: 5</code></div></div>  Ví dụ: Tính căn bậc hai Bạn sẽ xây dựng một máy tính căn bậc hai đơn giản. Dưới đây là những yêu cầu cho các ứng dụng nhỏ này: - người sử dụng sẽ có thể nhập vào một giá trị số vào một inputbox; - người sử dụng sẽ có thể bấm vào một nút cho phép tính căn bậc hai của số nhập vào inputbox; - kết quả sẽ được hiển thị trên trang web. Tạo một trang HTML tươi với một inputbox, 1 nút, và một đoạn văn mà kết quả sẽ được hiển thị. Những yếu tố HTML chứa các thuộc tính id mà sẽ cung cấp một cái móc tiện dụng cho các mã JavaScript của chúng tôi.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Lesson 12: JavaScript Objects - Math Object&lt;/title&gt;<br />
&lt;script type="text/javascript" src="lesson12_tryout2.js"&gt;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;Lesson 12: Square root calculator&lt;/h1&gt;<br />
<br />
&lt;p&gt;Enter a number: &lt;input type="text" id="txtNumber" /&gt;&lt;/p&gt;<br />
<br />
&lt;p&gt;&lt;input type="button" id="btnSubmit" value="Calculate square root" /&gt;&lt;/p&gt;<br />
<br />
&lt;p id="result"&gt;&lt;/p&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div>  Bây giờ tạo ra các tập tin lesson12_tryout2.js. Tập tin này sẽ chứa 3 chức năng: - init() khởi tạo các kịch bản bằng cách liên kết các displaySquare() để sự kiện thích hợp của nó, có nghĩa là, các sự kiện onclick btnSubmit; - displaySquare() kiểm tra các câu trả lời được gửi bởi người sử dụng, gọi hàm đó thực hiện các phép tính, và hiển thị kết quả; - calculateSquare(input) được thông qua các giá trị số được nhập vào bởi người sử dụng như là đối số, thực hiện các tính toán thực tế, và trả về căn bậc hai.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//write the function to initialize the script<br />
<br />
function init()<br />
<br />
{<br />
<br />
//Bind function that processes the result to<br />
<br />
//the onclick event of the button<br />
<br />
var myButton = document.getElementById("btnSubmit");<br />
<br />
myButton.onclick = displaySquare;<br />
<br />
}<br />
<br />
/**************************************************/<br />
<br />
//Bind the init() function to the onload event<br />
<br />
onload = init;<br />
<br />
/**************************************************/<br />
<br />
//Here we call the function that performs<br />
//the square root calculation, then we format and<br />
//display the result<br />
function displaySquare()<br />
{<br />
<br />
//we store the value from the inputbox into a var.<br />
<br />
//Notice how we concatenate several methods<br />
<br />
//in one statement (be careful with those brackets).<br />
<br />
//If you find it a bit confusing, store a reference to the inputbox<br />
<br />
//in its own var and then use it to extract its value property<br />
<br />
//and finally pass it as argument of parseInt(), like so:<br />
<br />
//var inputBox = document.getElementById("txtNumber");<br />
<br />
//var inputVal = parseInt(inputBox.value);<br />
<br />
var inputVal = parseInt(document.getElementById("txtNumber").value);<br />
<br />
//we store a reference to the paragraph<br />
<br />
//where the result will be displayed<br />
<br />
var result = document.getElementById("result");<br />
<br />
//we create the var that stores the result message<br />
<br />
var resultMessage = "";<br />
<br />
//we ensure the input value is a number:<br />
<br />
//if the user did not enter a number, we send an alert<br />
<br />
if (isNaN(inputVal))<br />
<br />
{<br />
alert("Please, enter a number");<br />
}<br />
else<br />
{<br />
//If the input is in correct format, we call<br />
<br />
//the function that performs the calculation<br />
<br />
var squareVal = calculateSquare(inputVal);<br />
//this is a nested if statement: it's inside another<br />
//if statement to perform further checks:<br />
//if squareVal stores a value (if the calculation was successful) -<br />
//- this is short for: if (squareVal == true)<br />
if (squareVal)<br />
<br />
{<br />
//we build this message to the user:<br />
resultMessage = "Square root of " + inputVal + " is " + squareVal;<br />
}<br />
//else, that is, if the calculation was not successful<br />
else<br />
{<br />
//we build a different message to the user:<br />
<br />
resultMessage = "Sorry, an error occurred";<br />
<br />
}<br />
<br />
}<br />
<br />
//finally, we display the message using innerHTML<br />
<br />
result.innerHTML = resultMessage;<br />
<br />
}<br />
<br />
/**************************************************/<br />
<br />
//This function calculates the square root:<br />
//it takes in the number entered by the user<br />
//and returns the result of the calculation<br />
function calculateSquare(input)<br />
{<br />
var squareVal = Math.sqrt(input);<br />
<br />
return squareVal;<br />
<br />
}</code></div></div>  Lưu file và chạy ứng dụng trên trình duyệt.<br />
<br />
Trung tâm đào tạo học lập trình android với đội ngũ giáo viên nhiệt tình, chuyên nghiệp và <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">khóa học photoshop </a>cơ bản nâng cao tại VietPro!</span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: 3pt;" class="mycode_size">Chúng ta sẽ tiếp tục xây dựng đối tượng trong Javascript với đối tượng Math. Bạn đã được xem cách xử lý Math trong bài 7m sử dụng hàm ngẫu nhiên random() để tạo ra một số ngẫu nhiên giữa 0 và 1 và phương pháp floor() để làm tròn kết quả. Các đối tượng Math cho phép bạn viết kịch bản thực hiện nhiệm vụ toán học phức tạp trong chớp mắt. Trong bài học này, bạn sẽ sử dụng:<br />
<br />
- Math.PI để tính chu vi của một vòng tròn;<br />
<br />
- Math.sqrt() để tính toán một giá trị căn bậc hai.<br />
<br />
Trong quá trình học javascript và học php cơ bản tại hà nội này, bạn sẽ tìm hiểu làm thế nào để sử dụng:<br />
<br />
- parseInt()/parseFloat() để chuyển đổi các chuỗi số;<br />
<br />
- isNaN() để kiểm tra xem một giá trị hay không là một con số;<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Math.PI</span><br />
<br />
 Thuộc tính này lưu giữ giá trị của PI, một hằng số toán học mà số tiền khoảng 3,14159.Hãy nhanh chóng làm mới các phép toán học. Dưới đây là một số định nghĩa:<br />
<br />
- Circle: là hình dáng mà tất cả các điểm có cùng khoảng cách với trung tâm<br />
<img src="http://hocthietkeweb.net.vn/wp-content/uploads/2015/08/%C4%90%E1%BB%91i-t%C6%B0%E1%BB%A3ng-Math-1.gif" loading="lazy"  alt="[Image: %C4%90%E1%BB%91i-t%C6%B0%E1%BB%A3ng-Math-1.gif]" class="mycode_img" /><br />
<br />
+) bao quanh vòng quanh hình (màu xanh màu như trong hình trên), là chu vi vòng tròn;<br />
<br />
+) đường cắt vòng tròn theo chiều ngang trong một nửa (màu đỏ trong hình trên) là đường kính vòng tròn;<br />
<br />
+) mỗi một nửa đường kính đại diện cho một bán kính. PI là tỷ số giữa chu vi của một vòng tròn và đường kính. Nếu bạn cần giá trị này trong chương trình JavaScript của bạn, sử dụng Math.PI. Chỉ cần cố gắng này ra giữa bao<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;script&gt; của trang HTML:<br />
//store and display the value of PI:<br />
<br />
var pi = Math.PI;<br />
<br />
document.write(pi);</code></div></div>Ví dụ: sử dụng Math.PI để tìm ra chu vi của một vòng tròn Trước tiên: chuẩn bị một tài liệu HTML như thế này:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Lesson 12: JavaScript Objects - Math Object&lt;/title&gt;<br />
&lt;script type="text/javascript" src="lesson12_tryout1.js"&gt;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;Lesson 12: Circumference calculator&lt;/h1&gt;<br />
<br />
&lt;p&gt;Enter length of radius: &lt;input type="text" id="txtRadius" /&gt;&lt;/p&gt;<br />
<br />
&lt;p&gt;&lt;input type="button" id="btnSubmit" value="Calculate circumference" /&gt;&lt;/p&gt;<br />
<br />
&lt;p id="result"&gt;&lt;/p&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div>  Bây giờ, tạo một tài liệu JavaScript và đặt tên cho nó lesson12_tryout1.js. Tập tin này sẽ chứa 3 chức năng:<br />
<br />
- init() khởi tạo các kịch bản bằng cách liên kết các processAnswer() để sự kiện thích hợp của nó, có nghĩa là, các sự kiện onclick btnSubmit;<br />
<br />
- processAnswer() kiểm tra các câu trả lời được gửi bởi người sử dụng, gọi hàm đó thực hiện các phép tính, và hiển thị kết quả;<br />
<br />
- getCircumference(rad) được thông qua giá trị bán kính như là đối số, thực hiện các tính toán thực tế, và trả về chu vi.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//init() function binds the processAnswer() function<br />
<br />
//to the onclick event of the button<br />
<br />
function init()<br />
<br />
{<br />
<br />
var myButton = document.getElementById("btnSubmit");<br />
<br />
myButton.onclick = processAnswer;<br />
<br />
}<br />
/*********************************************/<br />
//Bind the init function to the onload event<br />
<br />
onload = init;<br />
/*********************************************/<br />
//This function checks the user's input,<br />
//calls the function that performs the calculation,<br />
//and displays the result<br />
function processAnswer()<br />
{<br />
<br />
//store a reference to the inputbox<br />
var inputBox = document.getElementById("txtRadius");<br />
//get the radius value entered in the inputbox<br />
//make sure to convert the string (text) to a number:<br />
//calculations can only be performed with numbers,<br />
//and the value in the inputbox is processed as string.<br />
//parseInt(string) and parseFloat(string)<br />
//take a string as input and return an integer<br />
//or a floating point number respectively.<br />
var radius = parseInt(inputBox.value);<br />
//get a reference to the paragraph to display result<br />
var result = document.getElementById("result");<br />
//create and initialize a var to store the result<br />
var resultString = "";<br />
//Perform some validation on the user's input:<br />
//if the value entered by the user is not a number<br />
//alert the user. isNaN(value) takes<br />
//a value as input and returns true if the value is not a number,<br />
//it returns false if the value is a number.<br />
//the expression below is short for:<br />
//if (isNaN(radius) == true)<br />
if (isNaN(radius))<br />
{<br />
alert("Please, enter a number");<br />
}<br />
else<br />
{<br />
//if the user has correctly entered a number,<br />
//call the function that performs the calculation<br />
//and display the result on the page<br />
var circ = getCircumference(radius);<br />
resultString = "Circumference is: " + circ;<br />
result.innerHTML = resultString;<br />
}<br />
}<br />
/*********************************************/<br />
//This is the function that performs the calculation:<br />
//it takes the radius as input and returns the circumference<br />
function getCircumference(rad)<br />
{<br />
var circumference = 2 * (Math.PI * rad);<br />
return circumference;<br />
}</code></div></div><br />
&gt;&gt; Khóa học <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html/" target="_blank" rel="noopener" class="mycode_url">lap trinh android</a> cơ bản nâng cao tại hà nội !<br />
<span style="font-weight: bold;" class="mycode_b">2. Math.sqrt()</span><br />
<br />
Math.sqrt(number) có một số như là đối số và trả về căn bậc hai của số đó. Nếu một số âm được nhập như là đối số, ví dụ Math.sqrt(-5), hàm trả về NaN, đó là một giá trị mà JavaScript không đối xử như một con số. Căn bậc hai của 25, ví dụ, đó là con số đó nhân với chính nó mang lại kết quả là 25, đó là, 5. Công thức là: hình vuông của n = n * n. JavaScript thực hiện tính toán này tự động. Dưới đây là một bản demo nhanh: gõ đoạn mã sau giữa bao &lt;script&gt; của trang HTML:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>var squareRoot = Math.sqrt(25);<br />
<br />
document.write("The square root of 25 is: " + squareRoot);<br />
<br />
//This should print:<br />
<br />
//The square root of 25 is: 5</code></div></div>  Ví dụ: Tính căn bậc hai Bạn sẽ xây dựng một máy tính căn bậc hai đơn giản. Dưới đây là những yêu cầu cho các ứng dụng nhỏ này: - người sử dụng sẽ có thể nhập vào một giá trị số vào một inputbox; - người sử dụng sẽ có thể bấm vào một nút cho phép tính căn bậc hai của số nhập vào inputbox; - kết quả sẽ được hiển thị trên trang web. Tạo một trang HTML tươi với một inputbox, 1 nút, và một đoạn văn mà kết quả sẽ được hiển thị. Những yếu tố HTML chứa các thuộc tính id mà sẽ cung cấp một cái móc tiện dụng cho các mã JavaScript của chúng tôi.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Lesson 12: JavaScript Objects - Math Object&lt;/title&gt;<br />
&lt;script type="text/javascript" src="lesson12_tryout2.js"&gt;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;Lesson 12: Square root calculator&lt;/h1&gt;<br />
<br />
&lt;p&gt;Enter a number: &lt;input type="text" id="txtNumber" /&gt;&lt;/p&gt;<br />
<br />
&lt;p&gt;&lt;input type="button" id="btnSubmit" value="Calculate square root" /&gt;&lt;/p&gt;<br />
<br />
&lt;p id="result"&gt;&lt;/p&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div>  Bây giờ tạo ra các tập tin lesson12_tryout2.js. Tập tin này sẽ chứa 3 chức năng: - init() khởi tạo các kịch bản bằng cách liên kết các displaySquare() để sự kiện thích hợp của nó, có nghĩa là, các sự kiện onclick btnSubmit; - displaySquare() kiểm tra các câu trả lời được gửi bởi người sử dụng, gọi hàm đó thực hiện các phép tính, và hiển thị kết quả; - calculateSquare(input) được thông qua các giá trị số được nhập vào bởi người sử dụng như là đối số, thực hiện các tính toán thực tế, và trả về căn bậc hai.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//write the function to initialize the script<br />
<br />
function init()<br />
<br />
{<br />
<br />
//Bind function that processes the result to<br />
<br />
//the onclick event of the button<br />
<br />
var myButton = document.getElementById("btnSubmit");<br />
<br />
myButton.onclick = displaySquare;<br />
<br />
}<br />
<br />
/**************************************************/<br />
<br />
//Bind the init() function to the onload event<br />
<br />
onload = init;<br />
<br />
/**************************************************/<br />
<br />
//Here we call the function that performs<br />
//the square root calculation, then we format and<br />
//display the result<br />
function displaySquare()<br />
{<br />
<br />
//we store the value from the inputbox into a var.<br />
<br />
//Notice how we concatenate several methods<br />
<br />
//in one statement (be careful with those brackets).<br />
<br />
//If you find it a bit confusing, store a reference to the inputbox<br />
<br />
//in its own var and then use it to extract its value property<br />
<br />
//and finally pass it as argument of parseInt(), like so:<br />
<br />
//var inputBox = document.getElementById("txtNumber");<br />
<br />
//var inputVal = parseInt(inputBox.value);<br />
<br />
var inputVal = parseInt(document.getElementById("txtNumber").value);<br />
<br />
//we store a reference to the paragraph<br />
<br />
//where the result will be displayed<br />
<br />
var result = document.getElementById("result");<br />
<br />
//we create the var that stores the result message<br />
<br />
var resultMessage = "";<br />
<br />
//we ensure the input value is a number:<br />
<br />
//if the user did not enter a number, we send an alert<br />
<br />
if (isNaN(inputVal))<br />
<br />
{<br />
alert("Please, enter a number");<br />
}<br />
else<br />
{<br />
//If the input is in correct format, we call<br />
<br />
//the function that performs the calculation<br />
<br />
var squareVal = calculateSquare(inputVal);<br />
//this is a nested if statement: it's inside another<br />
//if statement to perform further checks:<br />
//if squareVal stores a value (if the calculation was successful) -<br />
//- this is short for: if (squareVal == true)<br />
if (squareVal)<br />
<br />
{<br />
//we build this message to the user:<br />
resultMessage = "Square root of " + inputVal + " is " + squareVal;<br />
}<br />
//else, that is, if the calculation was not successful<br />
else<br />
{<br />
//we build a different message to the user:<br />
<br />
resultMessage = "Sorry, an error occurred";<br />
<br />
}<br />
<br />
}<br />
<br />
//finally, we display the message using innerHTML<br />
<br />
result.innerHTML = resultMessage;<br />
<br />
}<br />
<br />
/**************************************************/<br />
<br />
//This function calculates the square root:<br />
//it takes in the number entered by the user<br />
//and returns the result of the calculation<br />
function calculateSquare(input)<br />
{<br />
var squareVal = Math.sqrt(input);<br />
<br />
return squareVal;<br />
<br />
}</code></div></div>  Lưu file và chạy ứng dụng trên trình duyệt.<br />
<br />
Trung tâm đào tạo học lập trình android với đội ngũ giáo viên nhiệt tình, chuyên nghiệp và <a href="http://hocphotoshop.vn/khoa-hoc-photoshop-co-ban-nang-cao-o-ha-noi.html/" target="_blank" rel="noopener" class="mycode_url">khóa học photoshop </a>cơ bản nâng cao tại VietPro!</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hàm trong PHP]]></title>
			<link>https://uhm.vn/forum/Thread-H%C3%A0m-trong-PHP</link>
			<pubDate>Mon, 28 Dec 2015 14:49:57 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://uhm.vn/forum/member.php?action=profile&uid=169513">n_erudite</a>]]></dc:creator>
			<guid isPermaLink="false">https://uhm.vn/forum/Thread-H%C3%A0m-trong-PHP</guid>
			<description><![CDATA[<span><h3> <br />
1. Hàm Eval()<br />
Eval() được sử dụng để đọc các giá trị chuỗi đầu vào như mã PHP. Thay vì đọc như là một chuỗi như chức năng Echo() thay vì đọc các đầu ra như là mã PHP được thực thi. Một lý do để sử dụng này là để lưu trữ mã trong cơ sở dữ liệu MySQL của bạn để kéo ra ngoài và thực hiện sau.<br />
Cũng được biết đến như: Đánh giá chuỗi.<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php[/size]<br />
[size=4]&#36;name = 'Mary';[/size]<br />
[size=4]&#36;name2 = 'Ana';[/size]<br />
[size=4]&#36;a = 'Bạn bè của tôi gọi là &#36; name và &#36; name2';[/size]<br />
[size=4]print &#36;a .[/size]<br />
[size=4]"&lt;br&gt;";[/size]<br />
[size=4]eval("&#92;&#36;a = &#92;"&#36;a&#92;";");[/size]<br />
[size=4]print &#36;a . "&lt;br&gt;";[/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
"Bạn bè của tôi gọi là &#36; name và &#36; name2" khi lần đầu tiên được gọi với các lệnh in<br />
nhưng kết quả sẽ là "Bạn tôi là Mary và Ana" khi được gọi lần thứ hai sau khi chạy eval().<br />
<br />
2. Atan2() trong PHP<br />
Chúng tôi có thể sử dụng các chức năng Atan() để tìm ra các tiếp tuyến vòng cung của một số. Chúng tôi cũng có thể sử dụng các atan2 () chức năng để tìm ra các tiếp tuyến vòng cung của một điểm cho trước hai tọa độ. Nó được viết như atan(Y, X) và tính toán các ốp vòng cung của Y / X. Kết quả sẽ luôn luôn được giữa -PI và PI radian.<br />
Cũng được biết đến như: Arc Tangent, arctangent<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]echo(atan2(5,5) . "&lt;br /&gt;");[/size]<br />
[size=4]echo(atan2(-3,4)) [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]0.78539816339745[/size]<br />
[size=4]-0.64350110879328[/size]</code></div></div><br />
3. Goto trong PHP<br />
Bạn có thể sử dụng GoTo để bỏ qua một phần của mã và đi đến vị trí quy định. Điều này chỉ trở thành có sẵn trong PHP 5.3 vì vậy nếu nó không làm việc cho bạn, xin vui lòng kiểm tra phiên bản PHP của bạn. Vì đây không phải là một chức năng mà bạn không cần ngoặc đơn ().<br />
Cũng được biết đến như: Go To<br />
Ví dụ;<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]goto a;[/size]<br />
[size=4]echo 'Hello'; [/size]<br />
[size=4]a: echo 'Goodbye'; [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]Goodbye.[/size]</code></div></div><br />
4. Abs() trong PHP<br />
Giá trị tuyệt đối của một số là khoảng cách giữa số lượng và 0, và luôn luôn là một số dương. Trong toán học thì nó thường được mô tả như hai đường thẳng đứng như thế này: | X | (giá trị tuyệt đối của X.) Trong PHP, chúng tôi sử dụng các Abs() để có được giá trị này.<br />
Cũng được biết đến như: Hàm giá trị tuyệt đối<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php[/size]<br />
[size=4]abs (-6) ; [/size]<br />
[size=4]//returns a value of 6 abs (12.4) ;[/size]<br />
[size=4]//returns a value of 12.4 abs (-456.2) ;[/size]<br />
[size=4]// returns a value of 456.2 [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
5. Acos() trong PHP<br />
Các chức năng acos() được sử dụng trong PHP để tìm arccosine của một số. Trong acos(x) giá trị của x nên được giữa -1 và 1, với -1 trả về giá trị của PI. Các acos() trả về arccosine của một số như là một giá trị giá trị số giữa 0 và PI radian.<br />
Cũng được biết đến như: Arccosine<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]echo(acos(-0.5) . "&lt;br /&gt;");[/size]<br />
[size=4]echo(acos(-1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(acos(0) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(acos(1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(acos(2))[/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]2.0943951023932[/size]<br />
[size=4]3.1415926535898[/size]<br />
[size=4]1.5707963267949[/size]<br />
[size=4]0[/size]<br />
[size=4]NAN[/size]</code></div></div><br />
6. Addslashes() trong PHP<br />
Các chức năng addslashes được sử dụng để thêm vào trong dấu gạch chéo ngược [\] để dữ liệu được gửi từ hình thức của bạn. Điều này khiến cho MySQL đầu vào (và các ngôn ngữ mã hóa khác) thân thiện. Điều này có nghĩa là addslashes sẽ thay đổi "I'm hungry into I\'m hungry ".<br />
Nó như: addslashes (&#36; string_data)<br />
Cũng được biết đến như: Thêm Slashes<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]&#36;greeting = "Hello, I'm Billy"; [/size]<br />
[size=4]print addslashes(&#36;greeting); [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]Hello, I&#92;'m Billy[/size]<br />
<br />
[size=4]&lt;?php[/size]<br />
[size=4]&#36;said = 'Who said "Live long and prosper"?'; [/size]<br />
[size=4]print addslashes(&#36;said); [/size]<br />
[size=4]?&gt;[/size]</code></div></div>Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]Who said &#92;"Live long and prosper&#92;"?[/size]</code></div></div><br />
7. Asin() trong PHP<br />
Các chức năng asin() được sử dụng trong PHP để tìm arcsine của một số. Trong asin (x) giá trị của x nên được giữa -1 và 1. asin () trả về arcsine của một số như là một giá trị giá trị số giữa -PI/2 và PI/2 radian.<br />
Cũng được biết đến như: arcsine<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]echo(asin(-0.5) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(asin(-1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(asin(0) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(asin(1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(asin(2)) [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]-0.5235987755983[/size]<br />
[size=4]-1.5707963267949[/size]<br />
[size=4]0[/size]<br />
[size=4]1.5707963267949[/size]<br />
[size=4]NAN[/size]</code></div></div><br />
8. Atan() trong PHP<br />
Các Chức năng Atan() tìm thấy arctangent của một số. Trong Atan (X), giá trị của X có thể là bất kỳ số tích cực hay tiêu cực, và kết quả sẽ là giữa PI/2 và -PI/2. Các chức năng sẽ trả về góc bày bằng radian, mà là tiếp tuyến X.<br />
Cũng được biết đến như: arctangent, Arc tangent<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php echo(atan(-0.5) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(atan(-1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(atan(0) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(atan(1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(atan(2)) [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]-0.46364760900081[/size]<br />
[size=4]-0.78539816339745[/size]<br />
[size=4]0[/size]<br />
[size=4]0.78539816339745[/size]<br />
[size=4]1.1071487177941[/size]</code></div></div><br />
9. Base_convert() trong PHP<br />
Các cơ sở chúng tôi là quen thuộc nhất với (hệ thống số thường xuyên của chúng tôi) là cơ sở 10. Điều này có nghĩa là, mỗi 'slot' có 10 khả năng trước một chữ số thứ hai là cần thiết. Ví dụ chúng ta có thể có các chữ số 0-9 trước khi cần thêm một chữ số thứ hai. Trong nhị phân, chỉ có hai khả năng (0 hoặc 1) trước khi thêm chữ số khác. Vì vậy, bằng không là 0 và một là 1, nhưng hai được viết như là 10, và ba là 11.<br />
Trong PHP, chúng tôi có thể chuyển đổi cơ sở chỉ đơn giản bằng cách sử dụng chức năng base_convert(). Chúng ta cần phải xác định số lượng, cơ sở hiện tại của nó, và cơ sở chúng tôi muốn chuyển đổi sang. Ví dụ, chuyển đổi 100 từ 10 cơ sở căn 2 sẽ là: base_convert (100, 10, 2).<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]//Converting from base 2 and base 16 to base 10 [/size]<br />
[size=4]&#36;bi= '101101'; [/size]<br />
[size=4]echo base_convert(&#36;bi, 2, 10) ; [/size]<br />
[size=4]&#36;hex= 'A37443'; [/size]<br />
[size=4]echo base_convert(&#36;hex, 16, 10) ; [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
10. Bindec() trong PHP<br />
Các chức năng Bindec() trong PHP được sử dụng để chuyển đổi một chuỗi nhị phân thành một số thập phân. Trong Bindec(x) với đầu vào x sẽ là chuỗi nhị phân. Nếu bạn không chắc chắn nếu một chuỗi là một số nhị phân bạn có thể kiểm tra nó bằng cách sử dụng chức năng Isbinary().<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?php<br />
echo(bindec(10) . "&lt;br /&gt;");<br />
echo(bindec(1001010) . "&lt;br /&gt;");<br />
echo(bindec(111) . "&lt;br /&gt;");<br />
echo(-bindec(1011101) . "&lt;br /&gt;");<br />
?&gt;</code></div></div>Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]2[/size]<br />
[size=4]74[/size]<br />
[size=4]7[/size]<br />
[size=4]-93[/size]</code></div></div><br />
--------- || ---------<br />
Trung tâm đào tạo <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html" target="_blank" rel="noopener" class="mycode_url">hoc lap trinh android</a> với đội ngũ giáo viên trẻ, nhiệt tình và đào tạo hoc<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url"> lap trinh php</a> cơ bản nâng cao tại VietPro!</h3></span>]]></description>
			<content:encoded><![CDATA[<span><h3> <br />
1. Hàm Eval()<br />
Eval() được sử dụng để đọc các giá trị chuỗi đầu vào như mã PHP. Thay vì đọc như là một chuỗi như chức năng Echo() thay vì đọc các đầu ra như là mã PHP được thực thi. Một lý do để sử dụng này là để lưu trữ mã trong cơ sở dữ liệu MySQL của bạn để kéo ra ngoài và thực hiện sau.<br />
Cũng được biết đến như: Đánh giá chuỗi.<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php[/size]<br />
[size=4]&#36;name = 'Mary';[/size]<br />
[size=4]&#36;name2 = 'Ana';[/size]<br />
[size=4]&#36;a = 'Bạn bè của tôi gọi là &#36; name và &#36; name2';[/size]<br />
[size=4]print &#36;a .[/size]<br />
[size=4]"&lt;br&gt;";[/size]<br />
[size=4]eval("&#92;&#36;a = &#92;"&#36;a&#92;";");[/size]<br />
[size=4]print &#36;a . "&lt;br&gt;";[/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
"Bạn bè của tôi gọi là &#36; name và &#36; name2" khi lần đầu tiên được gọi với các lệnh in<br />
nhưng kết quả sẽ là "Bạn tôi là Mary và Ana" khi được gọi lần thứ hai sau khi chạy eval().<br />
<br />
2. Atan2() trong PHP<br />
Chúng tôi có thể sử dụng các chức năng Atan() để tìm ra các tiếp tuyến vòng cung của một số. Chúng tôi cũng có thể sử dụng các atan2 () chức năng để tìm ra các tiếp tuyến vòng cung của một điểm cho trước hai tọa độ. Nó được viết như atan(Y, X) và tính toán các ốp vòng cung của Y / X. Kết quả sẽ luôn luôn được giữa -PI và PI radian.<br />
Cũng được biết đến như: Arc Tangent, arctangent<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]echo(atan2(5,5) . "&lt;br /&gt;");[/size]<br />
[size=4]echo(atan2(-3,4)) [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]0.78539816339745[/size]<br />
[size=4]-0.64350110879328[/size]</code></div></div><br />
3. Goto trong PHP<br />
Bạn có thể sử dụng GoTo để bỏ qua một phần của mã và đi đến vị trí quy định. Điều này chỉ trở thành có sẵn trong PHP 5.3 vì vậy nếu nó không làm việc cho bạn, xin vui lòng kiểm tra phiên bản PHP của bạn. Vì đây không phải là một chức năng mà bạn không cần ngoặc đơn ().<br />
Cũng được biết đến như: Go To<br />
Ví dụ;<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]goto a;[/size]<br />
[size=4]echo 'Hello'; [/size]<br />
[size=4]a: echo 'Goodbye'; [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]Goodbye.[/size]</code></div></div><br />
4. Abs() trong PHP<br />
Giá trị tuyệt đối của một số là khoảng cách giữa số lượng và 0, và luôn luôn là một số dương. Trong toán học thì nó thường được mô tả như hai đường thẳng đứng như thế này: | X | (giá trị tuyệt đối của X.) Trong PHP, chúng tôi sử dụng các Abs() để có được giá trị này.<br />
Cũng được biết đến như: Hàm giá trị tuyệt đối<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php[/size]<br />
[size=4]abs (-6) ; [/size]<br />
[size=4]//returns a value of 6 abs (12.4) ;[/size]<br />
[size=4]//returns a value of 12.4 abs (-456.2) ;[/size]<br />
[size=4]// returns a value of 456.2 [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
5. Acos() trong PHP<br />
Các chức năng acos() được sử dụng trong PHP để tìm arccosine của một số. Trong acos(x) giá trị của x nên được giữa -1 và 1, với -1 trả về giá trị của PI. Các acos() trả về arccosine của một số như là một giá trị giá trị số giữa 0 và PI radian.<br />
Cũng được biết đến như: Arccosine<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]echo(acos(-0.5) . "&lt;br /&gt;");[/size]<br />
[size=4]echo(acos(-1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(acos(0) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(acos(1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(acos(2))[/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]2.0943951023932[/size]<br />
[size=4]3.1415926535898[/size]<br />
[size=4]1.5707963267949[/size]<br />
[size=4]0[/size]<br />
[size=4]NAN[/size]</code></div></div><br />
6. Addslashes() trong PHP<br />
Các chức năng addslashes được sử dụng để thêm vào trong dấu gạch chéo ngược [\] để dữ liệu được gửi từ hình thức của bạn. Điều này khiến cho MySQL đầu vào (và các ngôn ngữ mã hóa khác) thân thiện. Điều này có nghĩa là addslashes sẽ thay đổi "I'm hungry into I\'m hungry ".<br />
Nó như: addslashes (&#36; string_data)<br />
Cũng được biết đến như: Thêm Slashes<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]&#36;greeting = "Hello, I'm Billy"; [/size]<br />
[size=4]print addslashes(&#36;greeting); [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]Hello, I&#92;'m Billy[/size]<br />
<br />
[size=4]&lt;?php[/size]<br />
[size=4]&#36;said = 'Who said "Live long and prosper"?'; [/size]<br />
[size=4]print addslashes(&#36;said); [/size]<br />
[size=4]?&gt;[/size]</code></div></div>Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]Who said &#92;"Live long and prosper&#92;"?[/size]</code></div></div><br />
7. Asin() trong PHP<br />
Các chức năng asin() được sử dụng trong PHP để tìm arcsine của một số. Trong asin (x) giá trị của x nên được giữa -1 và 1. asin () trả về arcsine của một số như là một giá trị giá trị số giữa -PI/2 và PI/2 radian.<br />
Cũng được biết đến như: arcsine<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]echo(asin(-0.5) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(asin(-1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(asin(0) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(asin(1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(asin(2)) [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]-0.5235987755983[/size]<br />
[size=4]-1.5707963267949[/size]<br />
[size=4]0[/size]<br />
[size=4]1.5707963267949[/size]<br />
[size=4]NAN[/size]</code></div></div><br />
8. Atan() trong PHP<br />
Các Chức năng Atan() tìm thấy arctangent của một số. Trong Atan (X), giá trị của X có thể là bất kỳ số tích cực hay tiêu cực, và kết quả sẽ là giữa PI/2 và -PI/2. Các chức năng sẽ trả về góc bày bằng radian, mà là tiếp tuyến X.<br />
Cũng được biết đến như: arctangent, Arc tangent<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php echo(atan(-0.5) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(atan(-1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(atan(0) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(atan(1) . "&lt;br /&gt;"); [/size]<br />
[size=4]echo(atan(2)) [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
Kết quả:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]-0.46364760900081[/size]<br />
[size=4]-0.78539816339745[/size]<br />
[size=4]0[/size]<br />
[size=4]0.78539816339745[/size]<br />
[size=4]1.1071487177941[/size]</code></div></div><br />
9. Base_convert() trong PHP<br />
Các cơ sở chúng tôi là quen thuộc nhất với (hệ thống số thường xuyên của chúng tôi) là cơ sở 10. Điều này có nghĩa là, mỗi 'slot' có 10 khả năng trước một chữ số thứ hai là cần thiết. Ví dụ chúng ta có thể có các chữ số 0-9 trước khi cần thêm một chữ số thứ hai. Trong nhị phân, chỉ có hai khả năng (0 hoặc 1) trước khi thêm chữ số khác. Vì vậy, bằng không là 0 và một là 1, nhưng hai được viết như là 10, và ba là 11.<br />
Trong PHP, chúng tôi có thể chuyển đổi cơ sở chỉ đơn giản bằng cách sử dụng chức năng base_convert(). Chúng ta cần phải xác định số lượng, cơ sở hiện tại của nó, và cơ sở chúng tôi muốn chuyển đổi sang. Ví dụ, chuyển đổi 100 từ 10 cơ sở căn 2 sẽ là: base_convert (100, 10, 2).<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]&lt;?php [/size]<br />
[size=4]//Converting from base 2 and base 16 to base 10 [/size]<br />
[size=4]&#36;bi= '101101'; [/size]<br />
[size=4]echo base_convert(&#36;bi, 2, 10) ; [/size]<br />
[size=4]&#36;hex= 'A37443'; [/size]<br />
[size=4]echo base_convert(&#36;hex, 16, 10) ; [/size]<br />
[size=4]?&gt;[/size]</code></div></div><br />
10. Bindec() trong PHP<br />
Các chức năng Bindec() trong PHP được sử dụng để chuyển đổi một chuỗi nhị phân thành một số thập phân. Trong Bindec(x) với đầu vào x sẽ là chuỗi nhị phân. Nếu bạn không chắc chắn nếu một chuỗi là một số nhị phân bạn có thể kiểm tra nó bằng cách sử dụng chức năng Isbinary().<br />
Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?php<br />
echo(bindec(10) . "&lt;br /&gt;");<br />
echo(bindec(1001010) . "&lt;br /&gt;");<br />
echo(bindec(111) . "&lt;br /&gt;");<br />
echo(-bindec(1011101) . "&lt;br /&gt;");<br />
?&gt;</code></div></div>Ví dụ:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[size=4]2[/size]<br />
[size=4]74[/size]<br />
[size=4]7[/size]<br />
[size=4]-93[/size]</code></div></div><br />
--------- || ---------<br />
Trung tâm đào tạo <a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-game-android-co-ban.html" target="_blank" rel="noopener" class="mycode_url">hoc lap trinh android</a> với đội ngũ giáo viên trẻ, nhiệt tình và đào tạo hoc<a href="http://hocthietkeweb.net.vn/khoa-hoc-lap-trinh-web-php-va-mysql.html/" target="_blank" rel="noopener" class="mycode_url"> lap trinh php</a> cơ bản nâng cao tại VietPro!</h3></span>]]></content:encoded>
		</item>
	</channel>
</rss>