单词本设计与实现文档格式.docx
- 文档编号:19358536
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:19
- 大小:639.41KB
单词本设计与实现文档格式.docx
《单词本设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《单词本设计与实现文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
对应功能:
2)资源文件
包括:
Asset下的本地词库文件
背景定义文件
各个Activity和Fragment的Layout
对话框界面
各个List的Item定义
不同的菜单文件
数组、边界值、颜色值等
2.功能实现分析:
主界面:
侧滑:
主界面采用三个Fragment利用FragmentManager进行切换管理,默认的单词本Fragment是一个经过扩展的RecyclerView,可以实现左滑删除编辑,并且通过对Adapter的修改可以实现隐藏解释达到背单词的效果,也可以通过对数据加载的管理实现按字母或者按新旧排序。
搜索Fragment:
在App第一次进入时会对本地的txt进行加载,并放到Sqlite数据库中,在获取搜索的关键字后对数据库进行搜索并返回给ListView,点击ListViewde的item后根据单词链接有道API进行查询,并返回其读音和解释,点击添加则可以添加到单词列表。
翻译Fragment:
翻译功能利用有道Api提供的翻译接口进行翻译,可以实现中文和任意语言的互相转化。
新闻名言打开今日一句和BBC新闻
今日一句和BBC新闻两个都是获取Json解析得到,并放入对应的数据中。
3.核心代码:
1)修改对话框:
privatevoidInsertDialog(){
finalTableLayouttableLayout=(TableLayout)getActivity().getLayoutInflater().inflate(R.layout.insert,null);
newAlertDialog.Builder(context)
.setTitle("
新增单词"
)//标题
.setView(tableLayout)//设置视图
//确定按钮及其动作
.setPositiveButton("
确定"
newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialogInterface,inti){
StringstrWord=((EditText)tableLayout.findViewById(R.id.txtWord)).getText().toString();
StringstrMeaning=((EditText)tableLayout.findViewById(R.id.txtMeaning)).getText().toString();
//既可以使用Sql语句插入,也可以使用使用insert方法插入
operate.Insert(strWord,strMeaning);
refreshList();
}
})
//取消按钮及其动作
.setNegativeButton("
取消"
.create()//创建对话框
.show();
//显示对话框
}
2)Frgament切换:
privatevoidsetSelect(inti){
clearImageView();
manager=getSupportFragmentManager();
transaction=manager.beginTransaction();
hideFragment(transaction);
switch(i){
case0:
System.out.println("
searchpressed"
);
search.setImageResource(R.mipmap.search_button_pressed);
if(search_fragment==null){
search_fragment=newSearchWord();
transaction.add(R.id.fragment_ui,search_fragment);
}else{
transaction.show(search_fragment);
break;
case1:
listpressed"
main.setImageResource(R.mipmap.list_button_pressed);
if(main_fragment==null){
main_fragment=newWordList();
transaction.add(R.id.fragment_ui,main_fragment);
transaction.show(main_fragment);
case2:
bookpressed"
settings.setImageResource(R.mipmap.book_pressed);
if(setting_fragment==null){
setting_fragment=newTranslateFragment();
transaction.add(R.id.fragment_ui,setting_fragment);
transaction.show(setting_fragment);
default:
mit();
privatevoidhideFragment(FragmentTransactiontransaction2){
//TODOAuto-generatedmethodstub
if(search_fragment!
=null){
transaction2.hide(search_fragment);
if(main_fragment!
transaction2.hide(main_fragment);
if(setting_fragment!
transaction2.hide(setting_fragment);
3)JSON解析:
JSONObjectobject=newJSONObject(String.valueOf(jsonText));
JSONArrayrootArray=(JSONArray)object.get("
data"
for(inti=0;
i<
7;
i++){
Newsnews=newNews();
JSONObjectnow=rootArray.getJSONObject(i);
news.setTime(now.getString("
publishDateStr"
));
news.setContent(now.getString("
content"
news.setUrl(now.getString("
url"
news.setTitle(now.getString("
title"
if(now.getString("
imageUrls"
)!
JSONArraypicarray=now.getJSONArray("
List<
String>
piclist=newArrayList<
();
for(intj=0;
j<
1;
j++){
Stringpic=(String)picarray.get(j);
Stringb="
http:
//ichef.bbci.co.uk/news/500/"
;
pic=b+pic.substring(50,pic.length());
piclist.add(pic);
news.setPic_s((String)picarray.get(0));
news.setPics_url(piclist);
第"
+i+"
条新闻:
"
+news.getTitle());
list.add(news);
4)获取JSON字符串:
Threadthread=newThread(newRunnable(){
publicvoidrun(){
BufferedReaderreader=null;
StringBuffersbf=newStringBuffer();
try{
SSLContextcontext=SSLContext.getInstance("
SSL"
TrustManager[]trustManager={newmyX509TrustManager()};
context.init(null,trustManager,newSecureRandom());
SSLSocketFactoryssf=context.getSocketFactory();
URLurl=newURL(String.valueOf(urlstring));
HttpsURLConnectionconnection=(HttpsURLConnection)url.openConnection();
connection.setHostnameVerifier(newTrustAnyHostNameVerifier());
connection.setSSLSocketFactory(ssf);
connection.setRequestMethod("
GET"
connection.connect();
InputStreamis=connection.getInputStream();
reader=newBufferedReader(newInputStreamReader(is,"
UTF-8"
StringstrRead=null;
while((strRead=reader.readLine())!
=null){
sbf.append(strRead);
sbf.append("
\r\n"
reader.close();
result=sbf.toString();
}catch(Exceptione){
e.printStackTrace();
});
thread.start();
//等待上述线程完成执行后再返回jsonText。
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
5)Worlist的侧滑功能
privateSwipeMenuCreatorswipeMenuCreator=newSwipeMenuCreator(){
publicvoidonCreateMenu(SwipeMenuswipeLeftMenu,SwipeMenuswipeRightMenu,intviewType){
intwidth=getResources().getDimensionPixelSize(R.dimen.dp_70);
//1.MATCH_PARENT自适应高度,保持和Item一样高;
//2.指定具体的高,比如80;
//3.WRAP_CONTENT,自身高度,不推荐;
intheight=ViewGroup.LayoutParams.MATCH_PARENT;
//根据ViewType来决定哪一个item该如何添加菜单。
//这里模拟业务,实际开发根据自己的业务计算。
if(viewType%3==0){
SwipeMenuItemdeleteItem=newSwipeMenuItem(context)
.setBackground(R.drawable.selector_red)
.setText("
删除"
)
.setTextColor(Color.WHITE)
.setWidth(width)
.setHeight(height);
swipeRightMenu.addMenuItem(deleteItem);
//添加菜单到右侧。
SwipeMenuItemaddItem=newSwipeMenuItem(context)
.setBackground(R.drawable.selector_green)
编辑"
swipeRightMenu.addMenuItem(addItem);
//添加菜单到右侧。
};
/**
*RecyclerView的Item的Menu点击监听。
*/
privateSwipeMenuItemClickListenermMenuItemClickListener=newSwipeMenuItemClickListener(){
publicvoidonItemClick(SwipeMenuBridgemenuBridge){
menuBridge.closeMenu();
intdirection=menuBridge.getDirection();
//左侧还是右侧菜单。
intadapterPosition=menuBridge.getAdapterPosition();
//RecyclerView的Item的position。
intmenuPosition=menuBridge.getPosition();
//菜单在RecyclerView的Item中的Position。
if(direction==SwipeMenuRecyclerView.RIGHT_DIRECTION){
//Toast.makeText(MainActivity.this,"
list第"
+adapterPosition+"
右侧菜单第"
+menuPosition,Toast.LENGTH_SHORT).show();
if(menuPosition==1){
xiugai"
Toast.makeText(context,"
修改"
Toast.LENGTH_SHORT).show();
UpdatetDialog(String.valueOf(list.get(adapterPosition).getId()),list.get(adapterPosition).getWord_name(),list.get(adapterPosition).getWord_meaning());
//refreshList();
elseif(menuPosition==0){
shanchu"
operate.DeleteUseSql(String.valueOf(list.get(adapterPosition).getId()));
6)搜索中有道Api的调用:
privatevoidquery(Stringquery){
LanguagelangFrom=LanguageUtils.getLangByName("
英文"
LanguagelangTo=LanguageUtils.getLangByName("
中文"
TranslateParameterstps=newTranslateParameters.Builder()
.source("
wordtest"
).from(langFrom).to(langTo).timeout(3000).build();
//appkey可以省略
translator=Translator.getInstance(tps);
//showLoadingView("
正在查询"
query"
+query);
translator.lookup(query,newTranslateListener(){
publicvoidonResult(finalTranslateresult,Stringinput){
Result"
+result.getQuery());
WebExplain>
explains=result.getWebExplains();
StringBuildersb=newStringBuilder();
sb.append("
网络释义:
"
\n"
if(explains!
for(WebExplains:
explains){
sb.append(s.getKey()).append(listStr(s.getMeans())).append("
resu"
+sb);
word_meaning.setText(sb);
word_voice.setVisibility(View.VISIBLE);
add_word.setVisibility(View.VISIBLE);
word_voice_text.setText(result.getUkPhonetic());
add_word.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv){
operate.Insert(word_name.getText().toString(),word_meaning_dict.getText().toString());
添加:
+word_name.getText().toString(),Toast.LENGTH_SHORT);
});
word_voice.setOnClickListener(newView.OnClickListener(){
MediaPlayermp=newMediaPlayer();
createVoice();
loading."
while(!
isfilefinish){
System.out.print("
."
mp.setDataSource("
/sdcard/audio.mp3"
mediaPlayer=mp;
mediaPlayer.prepare();
mediaPlayer.start();
isfilefinish=false;
mediaPlayer.setOnCompletionListener(newMediaPlayer.OnCompletionListener(){
publicvoidonCompletion(MediaPlayermediaPlayer){
mediaPlayer.release();
System.out.println(DeleteVoice());
catch(Exceptione){
System.out.println(e);
publicvoidonError(TranslateErrorCodeerror){
Toast.makeText(context,"
查询错误:
+error.name().toString(),Toast.LENGTH_SHORT);
7)初始单词数据内容:
publicvoidcreate_word()throwsException{
SQLiteDatabasedb=mDbHelper.getWritableDatabase();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单词 设计 实现