編輯:關於Android編程
我們看到,在Activity啟動以後,就會在其下面生成8個ImageView的對象,並且這幾張圖片是可以在垂直方向上滾動的。
二、通過ScrollView實現從服務器端獲取一條新聞,顯示在界面上
接下來咱們通過ScrollView來做一個稍微實際一點的例子,我們經常會用手機來看新聞,當然一篇新聞是從服務器端獲取過來的數據,而且可能一篇新聞裡面有很多的內容,因此我們需要使用一個可以滾動的布局來顯示我們的新聞內容,而TextView本身是可以實現文本的滾動顯示的,但是結合ScrollView和TextView可以有更好的效果。
我們服務器端就很簡單,讓我們的應用程序訪問服務器端的一個Html的文件,我們知道Html的文件裡面會有許多的Html標簽,那麼我們如果想在Android上也能夠顯示標簽的樣式,就不能單單的只是將獲取到的文本內容展示出來而已,這裡就需要用的Android提供的一個 Html 的類,用它來處理我們從服務器端獲得的Html的字符串內容:
我們的布局文件還是使用的剛才那一個:
復制代碼
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="false">
<LinearLayout
android:id="@+id/layout"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:orientation="vertical"/>
</ScrollView>
復制代碼
因為要訪問網絡,所以這裡需要新建一個HttpUtils的工具類,來獲得服務器端的文本內容:
復制代碼
public class HttpUtils
{
/**
* 訪問服務器端的內容
* @param path 訪問的url地址
* @param encode 編碼方式
* @return 返回String類型的值
*/
public static String getDataFromServer(String path, String encode)
{
String result = "";
HttpClient httpClient = new DefaultHttpClient();
try
{
HttpPost httpPost = new HttpPost(path);
HttpResponse httpResponse = httpClient.execute(httpPost);
if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
result = EntityUtils.toString(httpResponse.getEntity(), "utf-8");
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
httpClient.getConnectionManager().shutdown();
}
return result;
}
}
復制代碼
我們還是用之前那個Activity:
復制代碼
public class ScrollViewActivity extends Activity
{
private LinearLayout layout;
private ProgressDialog dialog;
private TextView textView;
private final String PATH = "http://172.25.152.34:8080/httptest/news.html";
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_scrollview);
dialog = new ProgressDialog(this);
dialog.setTitle("提示信息");
dialog.setMessage("loading......");
dialog.setCancelable(false);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
layout = (LinearLayout) findViewById(R.id.layout);
textView = new TextView(this);
layout.addView(textView);
new MyTask().execute(PATH);
}
public class MyTask extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
dialog.show();
}
@Override
protected String doInBackground(String... params)
{
String result = HttpUtils.getDataFromServer(params[0], "utf-8");
return result;
}
@Override
protected void onPostExecute(String s)
{
// Html類的fromHtml方法可以處理一個Html的字符串文本,這樣就可以根據Html的標簽在手機上展示其樣式
Spanned spanned = Html.fromHtml(s);
textView.setText(spanned);
// 給TextView設置一個方法,傳一個LinkMovementMethod對象進去,這樣當文本中如果有href鏈接時,系統會自動打開浏覽器跳轉到該href上
textView.setMovementMethod(new LinkMovementMethod());
dialog.dismiss();
}
}
}
復制代碼
因為要訪問網絡數據,所以我們需要開啟一個AsyncTask的一部任務,我們來看看onPostExecute方法,在獲取到服務器端的Html文本內容後,我們通過Android提供的Html.fromHtml方法可以處理我們的Html文本,將Html的標簽轉化為我們需要的樣式顯示,但是這裡要注意一點,這裡並不會處理所有的Html的表情,例如<img>我們來看看Android官方API對這個方法的描述:
public static Spanned fromHtml (String source)
Returns displayable styled text from the provided HTML string. Any <img> tags in the HTML will display as a generic replacement image which your program can then go through and replace with real images.
This uses TagSoup to handle real HTML, including all of the brokenness found in the wild.
如果文本當中有<img>標簽,那麼這個方法就會用一個默認的圖片來代替我們的<img>標簽中的圖片,我們可以自己寫一個Html.ImageGetter來加載我們自己想要的圖片。
同時,因為文本內容中可能有href鏈接,因此我們可以通過 textView.setMovementMethod(new LinkMovementMethod()); 來綁定一個LinkMovementMethod,這樣在點擊鏈接的時候,就會調用浏覽器跳轉到該鏈接上。
Android IPC機制(四):細說Binder連接池
一、 前言 在上一篇文章 Android IPC機制(三):淺談Binder的使用中,筆者淺談了Binder的使用及其工作機制,利用AIDL方式能很方便地進行客戶端和服務
android4.3 按鍵消息處理分析
Android4.3按鍵消息處理與之前的版本有稍微的區別,基本原理還是一樣的,這裡主要從兩個階段來分析: 1.前期的准備工作,即開機時啟動相應的的線程,靜候按鍵事件的來臨
Android組件TabHost實現頁面中多個選項卡切換效果
TabHost組件可以在界面中存放多個選項卡, 很多軟件都使用了改組件進行設計。一、基礎知識TabWidget : 該組件就是TabHost標簽頁中上部 或者 下部的按鈕
讓時間成為你的保險 鎖屏密碼不怕被窺
現在的移動支付越來越便捷,為了防止被他人隨意使用,很多人都開始使用鎖屏功能。但是傳統的鎖屏功能都是使用的單一密碼,這樣被他人破解的可能性又大大的增加。那麼有