接上回,上回我们讲到MainActivity里面将所有的宋词标题和作者显示到界面的ListView中去,我们接下来的工作是通过点击ListView的Item跳转到ContentActivity里面去显示单个宋词的所有内容,跳转代码例如以下:

// 为ListView的Item设置点击监听器
mListView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 将当前被点击的item所代表的诗词对象的引用赋给currentSongCi
Global.currentSongCi = scList.get(position);
// 进行界面跳转
Intent intent = new Intent(MainActivity.this,
ContentActivity.class);
startActivity(intent);
}
});

在这里,我用一个静态变量将所点击的ListView Item所代表的宋词记录下来,然后跳转到ContentActivity。

我们在来首先看一下ContentActivity的布局文件activity_content.xml的内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/ll_parent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg4"
android:orientation="vertical" > <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="46.0dip"
android:background="@drawable/toolbar" > <TextView
android:id="@id/tv_app_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/app_name"
android:textAppearance="?android:textAppearanceLarge"
android:textColor="#ffffffff" /> <Button
android:id="@id/btn_back"
android:layout_width="72.0dip"
android:layout_height="46.0dip"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@drawable/btn_left"
android:paddingLeft="6.0dip"
android:text="@string/back"
android:textColor="#ffffffff"
android:textSize="14.0sp" /> <ImageView
android:id="@id/iv_font_small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/font_small" /> <ImageView
android:id="@id/iv_font_big"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/iv_font_small"
android:src="@drawable/font_big" />
</RelativeLayout> <ScrollView
android:id="@id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="0.0dip"
android:layout_margin="8.0dip"
android:layout_weight="1.0"
android:background="@drawable/item_bg2" > <LinearLayout
android:id="@id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <TextView
android:id="@id/tv_title"
style="@style/black_normal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5.0dip"
android:text="标题"
android:textAppearance="?android:textAppearanceMedium" /> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="1.0px"
android:layout_marginLeft="5.0dip"
android:layout_marginRight="5.0dip"
android:background="#ff666666" /> <TextView
android:id="@id/tv_author"
style="@style/black_normal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5.0dip"
android:text="作者"
android:textAppearance="?android:textAppearanceSmall" /> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="1.0px"
android:layout_marginLeft="5.0dip"
android:layout_marginRight="5.0dip"
android:background="#ff666666" /> <TextView
android:id="@id/tv_desc"
style="@style/black_normal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="5.0dip"
android:lineSpacingMultiplier="1.3"
android:text="注解"
android:textAppearance="?android:textAppearanceSmall" />
</LinearLayout>
</ScrollView> </LinearLayout>

这里,我们能够发现,一首宋词的标题、作者、内容分别相应三个TextView控件。

接着我们再来看一下ContentActivity的内容:

package com.example.songcidemo.ui;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.Spanned;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView; import com.example.songcidemo.R;
import com.example.songcidemo.bean.SongCi;
import com.example.songcidemo.util.Global; public class ContentActivity extends Activity { private SongCi sc; //字体变小button
private ImageView fontSmallImageView;
//字体变大button
private ImageView fontBigImageView; //代表作者TextView和主体TextView的文本文字大小默认值
private float defaultTextSize;
//代表当前标题TextView的文本文字大小
private float currentTitleTextSize;
//代表当前作者TextView和主体TextView的文本文字大小
private float currentTextSize; //代表标题TextView
private TextView titleTextView;
//代表作者TextView
private TextView authTextView;
//代表主要内容TextView
private TextView descTextView; //代表返回button
private Button backBtn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_content); setupViews();
} /**
* 初始化界面
*/
private void setupViews() { //通过findviewbyid()方法获取三个TextView控件
titleTextView = (TextView) findViewById(R.id.tv_title);
authTextView = (TextView) findViewById(R.id.tv_author);
descTextView = (TextView) findViewById(R.id.tv_desc); //将currentSongCi赋给类变量sc
sc = Global.currentSongCi;
//通过get()方法获取标题、作者、内容的值
String title = sc.getTitle();
String auth = sc.getAuth();
String desc = sc.getDesc(); //将宋词的内容显示到三个TextView控件
titleTextView.setText(title);
authTextView.setText(auth);
//对字符串进行HTML格式化
Spanned sp = Html.fromHtml(desc);
descTextView.setText(sp);
// descWebView.loadDataWithBaseURL("fake://not/needed", desc, "text/html",
// "utf-8", ""); Log.v("ContentActivity", "" + titleTextView.getTextSize());
Log.v("ContentActivity", "" + authTextView.getTextSize());
Log.v("ContentActivity", "" + descTextView.getTextSize()); //初始化字体大小变量
defaultTextSize = 14;
currentTitleTextSize = 20;
currentTextSize = 14; fontBigImageView = (ImageView) findViewById(R.id.iv_font_big);
fontSmallImageView = (ImageView) findViewById(R.id.iv_font_small); //为fontBigImageView设置监听器
fontBigImageView.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
currentTitleTextSize++;
currentTextSize++;
if((currentTextSize-defaultTextSize) > 5){
currentTitleTextSize--;
currentTextSize--;
}else{
setFont();
}
}
}); //为fontSmallImageView设置监听器
fontSmallImageView.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
currentTitleTextSize--;
currentTextSize--;
if((defaultTextSize-currentTextSize) > 5){
currentTitleTextSize++;
currentTextSize++;
}else{
setFont();
}
}
}); backBtn = (Button) findViewById(R.id.btn_back); //为backBtn设置监听器
backBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
//返回到主界面
Intent intent = new Intent(ContentActivity.this, MainActivity.class);
startActivity(intent);
}
}); } /**
* 设置界面字体大小
*/
private void setFont(){
titleTextView.setTextSize(currentTitleTextSize);
authTextView.setTextSize(currentTextSize);
descTextView.setTextSize(currentTextSize);
} }

为了将desc里面的诸如<p><br>这写HTML元素体现出来,这里须要一点小小的转换,就是这句

Spanned sp = Html.fromHtml(desc);

这个Activity中还实现了一个功能就是能够改变界面文字的大小。

界面截图例如以下:

最后我们再来实现一个主界面的搜索功能,我的思想是这种定义一个ArrayList<SongCi> resultList这种链表,由于已经有了scList里面存储的是所有的宋词,用for循环遍历scList,将满足搜索条件的结果增加到resultList其中去,搜索完毕后就将ListView显示resultList里面的内容,关键代码例如以下:

//为searchDialogBtn设置点击监听器
searchDialogBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
switch (currentSearchRadioButtonId) {
case R.id.radio0:
searchSongCi(SEARCH_TYPE_TITLE);
break;
case R.id.radio1:
searchSongCi(SEARCH_TYPE_AUTHOR);
break;
case R.id.radio2:
searchSongCi(SEARCH_TYPE_CONTENT); default:
break;
}
//将搜索对话框消失掉
if (searchDialog.isShowing()) {
searchDialog.dismiss();
} //初始化结果列表适配器resultSongCiAdapter
if (resultSongCiAdapter == null) {
resultSongCiAdapter = new MainListViewAdapter(
MainActivity.this, resultList);
}else{
//通知适配器,源数据已改变
resultSongCiAdapter.notifyDataSetChanged();
} mListView.setAdapter(resultSongCiAdapter); }
});

自己定义方法的内容是:

/**
* 通过传递过来的參数来搜索宋词结果
*
* @param searchType 按哪种条件(标题、词人、内容)进行搜索
*/
private void searchSongCi(int searchType) { //初始化resultList
if (resultList == null) {
resultList = new ArrayList<SongCi>();
}else{
resultList.clear();
} //获取搜索关键词
String searchWords = searchEditText.getText().toString().trim();
if (searchWords == null || searchWords.equals("")) {
return;
} for (SongCi sc : scList) {
switch (searchType) {
case SEARCH_TYPE_TITLE:
String title = sc.getTitle();
//假设标题中包括关键词,就将当前的宋词对象增加到结果链表中
if (title.contains(searchWords)) {
resultList.add(sc);
}
break;
case SEARCH_TYPE_AUTHOR:
String auth = sc.getAuth();
//假设作者名中包括关键词,就将当前的宋词对象增加到结果链表中
if (auth.contains(searchWords)) {
resultList.add(sc);
}
break;
case SEARCH_TYPE_CONTENT:
String desc = sc.getDesc();
//假设内容中包括关键词,就将当前宋词对象增加到结果链表中
if (desc.contains(searchWords)) {
resultList.add(sc);
}
break; default:
break;
}
} }

搜索界面截图例如以下:

最后附上整个项目的源代码:

Android应用之《宋词三百首》

最新文章

  1. Hadoop各商业发行版之比较
  2. 函数图象(N=x+y*i)
  3. python 正则使用笔记
  4. zepto源码注解
  5. JS所谓的享元模式--&gt;
  6. [DataTable]控件排序事件中用DataView及DataTable排序
  7. CSAPP(2):程序的汇编表示(Linux版)
  8. eclipse 导入项目时候java版本不一致问题
  9. SQL Server 获取服务器信息
  10. js的严格模式
  11. Spring 框架理论基础
  12. sql查询百分号的方法
  13. JS常用方法【私房菜-笔记】-持续整理中
  14. bzoj:1941: [Sdoi2010]Hide and Seek
  15. opencv利用hough概率变换拟合得到直线后,利用DDA算法得到直线上的像素点坐标
  16. 安装 SIP 服务器
  17. 树形插件zTree与组织插件jOrgChart交互
  18. 关于破解visualsvn 我这里是版本是5.2.1
  19. Kotlin入门(22)适配器的简单优化
  20. LeetCode算法题-Sum of Left Leaves(Java实现)

热门文章

  1. 【多媒体封装格式详解】---MP4【4】
  2. ASP.NET 经典60道面试题
  3. ecshop 二次开发及模板标签
  4. rpm 命令参数使用详解
  5. mysql explain中key_len的计算
  6. golang学习遭遇duang...duang...duang
  7. C# Code for Downloading Stock Symbols z
  8. codeforces 691D Swaps in Permutation DFS
  9. CSS书写规范、顺序
  10. maltab几个常见的问题