• Android应用之《宋词三百首》(二)


     接上回,上回我们讲到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应用之《宋词三百首》


  • 相关阅读:
    高燕师姐博客
    2015.1.12
    功能连接分析论文
    半结构化面试
    各大银行
    独立思考者模型:用专家的思维思考问题
    独立思考者模型:避开思维误区的沼泽
    独立思考者模型:寻找潜藏在表象背后的真相
    独立思考者模型:如何分辨信息的真伪
    独立思考者模型:你相信灵魂转世假说吗?
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3777685.html
Copyright © 2020-2023  润新知