一个基于Android系统的新闻客户端(一)
一、整体概述
在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻。
服务端用WCF,宿主为window服务,客户端为Java写的安卓程序。
二、客户端
我在eclipse里新建了个Android项目,命名为MyNewClient,eclipse自动生成二个xml布局文件,如图:
其中,fragment_main.xml是新版的布局文件,暂时不会用,把它删掉。
新建xml文件,命名为activity_foot.xml,在这里我们要做app的底部,先上代码:
>
/>
>
/>
>
/>
>
/>
>
/>
View Code
其中用到了几章图片,
,
,
,
,
,
,
,
,
,
其中有的属性中有用到xml,用来定义单击事件发生时的状态得变化,下面是其一个的代码,其他代码秩序修改其变化后的图片即可。
View Code
新建xml文件,命名为activity_main.xml,在这里我们要对app进行布局,它包含app的头,和底部,还有一个WebView,下面是代码:
View Code
其中include用于包含xml文件。
新建xml文件,命名为activity_top.xml,在这里我们要做app的头部,下面是代码:
<?xml version="1.0" encoding="utf-8"?>"
View Code
布局文件基本完毕.
下面是java代码:
packagecom.example.liguifa;importandroid.support.v7.app.ActionBarActivity;importandroid.support.v7.app.ActionBar;importandroid.support.v4.app.Fragment;importandroid.annotation.SuppressLint;importandroid.app.AlertDialog;importandroid.os.Bundle;importandroid.view.Display;importandroid.view.KeyEvent;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewGroup;importandroid.view.ViewGroup.LayoutParams;importandroid.view.ViewTreeObserver;importandroid.webkit.WebChromeClient;importandroid.webkit.WebSettings;importandroid.webkit.WebView;importandroid.webkit.WebViewClient;importandroid.widget.LinearLayout;importandroid.widget.Toast;importandroid.os.Build;
@SuppressLint("SetJavaScriptEnabled") public class MainActivity extends ActionBarActivity implementsOnClickListener {privateWebView wv;public inttopHeight;public intbottomHeight;private intW;private intH;publicLinearLayout lineTop;publicLinearLayout lineBottom;privateLinearLayout webView;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);this.window_Load();this.LoadWeb();
}public voidLoadWeb()
{
wv=(WebView)findViewById(R.id.webView1);
wv.getSettings().setJavaScriptEnabled(true);
wv.setScrollBarStyle(0);
WebSettings webSettings=wv.getSettings();
webSettings.setAllowFileAccess(true);
webSettings.setBuiltInZoomControls(true);
wv.loadUrl("http://xw.qq.com");//加载数据
wv.setWebChromeClient(newWebChromeClient() {
@Overridepublic void onProgressChanged(WebView view, intnewProgress)
{if (newProgress == 100)
{
MainActivity.this.setTitle("加载完成");
}else{
MainActivity.this.setTitle("加载中.......");
}
}
});
}private booleanwindow_Load()
{
Display mDisplay=getWindowManager().getDefaultDisplay();
W=mDisplay.getWidth();
H=mDisplay.getHeight();int foot_Ico=W/5;
LinearLayout[] l=newLinearLayout[]{
(LinearLayout)this.findViewById(R.id.home),
(LinearLayout)this.findViewById(R.id.edit),
(LinearLayout)this.findViewById(R.id.xj),
(LinearLayout)this.findViewById(R.id.shop),
(LinearLayout)this.findViewById(R.id.home_top),
(LinearLayout)this.findViewById(R.id.sh_top),
(LinearLayout)this.findViewById(R.id.zz_top),
(LinearLayout)this.findViewById(R.id.kj_top),
(LinearLayout)this.findViewById(R.id.js_top)
};for(LinearLayout line:l)
{
LayoutParams laParams=(LayoutParams)line.getLayoutParams();
laParams.width=foot_Ico;
line.setLayoutParams(laParams);
line.setOnClickListener(this);
}
webView=(LinearLayout)this.findViewById(R.id.web);
lineTop=((LinearLayout)this.findViewById(R.id.top));
lineBottom=((LinearLayout)this.findViewById(R.id.bottom));
ViewTreeObserver vto=lineTop.getViewTreeObserver();
vto.addOnPreDrawListener(newViewTreeObserver.OnPreDrawListener(){
@Overridepublic booleanonPreDraw() {//TODO 自动生成的方法存根
topHeight=lineTop.getHeight();
ViewTreeObserver vto1=lineBottom.getViewTreeObserver();
vto1.addOnPreDrawListener(newViewTreeObserver.OnPreDrawListener(){
@Overridepublic booleanonPreDraw() {//TODO 自动生成的方法存根
bottomHeight=lineBottom.getHeight();
LayoutParams laParams=(LayoutParams)webView.getLayoutParams();
laParams.height=H-topHeight-bottomHeight-24;
webView.setLayoutParams(laParams);return true;
}
});return true;
}
});return true;
}
@Overridepublic voidonClick(View arg0) {//TODO 自动生成的方法存根//new AlertDialog.Builder(this).setTitle("提示").setMessage("正在测试").show();//setContentView(R.layout.activity_edit);//this.window_Load();
}
}
View Code
其中,LoadWeb();用于自适应屏幕的大小,
Display mDisplay = getWindowManager().getDefaultDisplay();
W = mDisplay.getWidth();
H = mDisplay.getHeight();
可以得到屏幕的分辨率宽W,高H。
ViewTreeObserver类可以动态改变控件大小。
方法为
ViewTreeObserver vto = lineTop(控件句柄).getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
[email protected]
public boolean onPreDraw() {
topHeight(int型变量) = lineTop.getHeight();
return true;
});
WebView的使用方法为:
wv = (WebView)findViewById(R.id.webView1);
wv.getSettings().setJavaScriptEnabled(true);
wv.setScrollBarStyle(0);
WebSettings webSettings = wv.getSettings();
webSettings.setAllowFileAccess(true);
webSettings.setBuiltInZoomControls(true);
wv.loadUrl("http://xw.qq.com");
//加载数据
wv.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress)
{
if (newProgress == 100)
{
MainActivity.this.setTitle("加载完成");
}
else
{
MainActivity.this.setTitle("加载中.......");
}
}
});
}
/*********************************************这是一个学习笔记****************************************************************/
总结:由于Java不是强项,Android也刚学没几天,代码还有很多不算太懂的东西。
原文:http://www.cnblogs.com/liguifa/p/3800041.html