一个基于Android系统的新闻客户端(一)
一、整体概述
在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻。
服务端用WCF,宿主为window服务,客户端为Java写的安卓程序。
二、客户端
我在eclipse里新建了个Android项目,命名为MyNewClient,eclipse自动生成二个xml布局文件,如图:
其中,fragment_main.xml是新版的布局文件,暂时不会用,把它删掉。
新建xml文件,命名为activity_foot.xml,在这里我们要做app的底部,先上代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:background="#000000" > <LinearLayout android:id="@+id/home" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical" > <ImageView android:id="@+id/home_bottom_home_bn" android:layout_width="28dip" android:layout_height="28dip" android:layout_gravity="center" android:background="@drawable/bottom_home_bn_style" /> <TextView android:id="@+id/home_bottom_home_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:textSize="12sp" android:textStyle="bold" android:paddingTop="2dip" android:textColor="@android:color/white" android:layout_gravity="center" android:text="@string/sy" /> </LinearLayout> <LinearLayout android:id="@+id/edit" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical" > <ImageView android:id="@+id/home_ediit_home_bn" android:layout_width="28dip" android:layout_height="28dip" android:layout_gravity="center" android:background="@drawable/bottom_edit_bn_style" /> <TextView android:id="@+id/home_bottom_edit_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:textSize="12sp" android:textStyle="bold" android:paddingTop="2dip" android:textColor="@android:color/white" android:layout_gravity="center" android:text="@string/bj" /> </LinearLayout> <LinearLayout android:id="@+id/xj" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical" > <ImageView android:id="@+id/home_bottom_x_bn" android:layout_width="28dip" android:layout_height="28dip" android:layout_gravity="center" android:background="@drawable/bottom_xianji_bn_style" /> <TextView android:id="@+id/home_bottom_x_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:textSize="12sp" android:textStyle="bold" android:paddingTop="2dip" android:textColor="@android:color/white" android:layout_gravity="center" android:text="@string/xj" /> </LinearLayout> <LinearLayout android:id="@+id/shop" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical" > <ImageView android:id="@+id/home_bottom_xj_bn" android:layout_width="28dip" android:layout_height="28dip" android:layout_gravity="center" android:background="@drawable/bottom_shop_bn_style" /> <TextView android:id="@+id/home_bottom_xj_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:textSize="12sp" android:textStyle="bold" android:paddingTop="2dip" android:textColor="@android:color/white" android:layout_gravity="center" android:text="@string/xj" /> </LinearLayout> <LinearLayout android:id="@+id/show" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical" > <ImageView android:id="@+id/bottom_show_bn_style_bn" android:layout_width="28dip" android:layout_height="28dip" android:layout_gravity="center" android:background="@drawable/bottom_show_bn_style" /> <TextView android:id="@+id/bottom_show_bn_style_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:textSize="12sp" android:textStyle="bold" android:paddingTop="2dip" android:textColor="@android:color/white" android:layout_gravity="center" android:text="@string/xj" /> </LinearLayout> </LinearLayout>
其中用到了几章图片,,,,,,,,,,
其中有的属性中有用到xml,用来定义单击事件发生时的状态得变化,下面是其一个的代码,其他代码秩序修改其变化后的图片即可。
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_window_focused="false" android:drawable="@drawable/bottom_looks"></item> <item android:state_selected="true" android:drawable="@drawable/bottom_looks_d"></item> <item android:state_pressed="true" android:drawable="@drawable/bottom_looks_d"></item> <item android:state_focused="true" android:drawable="@drawable/bottom_looks_d"></item> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/bottom_home_d"></item> </selector>
新建xml文件,命名为activity_main.xml,在这里我们要对app进行布局,它包含app的头,和底部,还有一个WebView,下面是代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/top" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" > <include layout="@layout/activity_top" /> </LinearLayout> <LinearLayout android:id="@+id/web" android:layout_width="match_parent" android:layout_height="420dp" android:layout_alignParentBottom="true" > <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> <LinearLayout android:id="@+id/bottom" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" > <include layout="@layout/activity_foot" /> </LinearLayout> </RelativeLayout>
其中include用于包含xml文件。
新建xml文件,命名为activity_top.xml,在这里我们要做app的头部,下面是代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="horizontal" android:background="@drawable/top_bg">" <LinearLayout android:id="@+id/home_top" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical"> <TextView android:layout_height="match_parent" android:layout_width="wrap_content" android:text="@string/home" android:textColor="#ffffff" android:layout_gravity="center" android:textSize="25sp" /> </LinearLayout> <LinearLayout android:id="@+id/sh_top" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical"> <TextView android:layout_height="match_parent" android:layout_width="wrap_content" android:text="@string/socity" android:textColor="#ffffff" android:layout_gravity="center" android:textSize="25sp" /> </LinearLayout> <LinearLayout android:id="@+id/zz_top" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical"> <TextView android:layout_height="match_parent" android:layout_width="wrap_content" android:text="@string/政治" android:textColor="#ffffff" android:layout_gravity="center" android:textSize="25sp" /> </LinearLayout> <LinearLayout android:id="@+id/kj_top" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical"> <TextView android:layout_height="match_parent" android:layout_width="wrap_content" android:text="@string/kj" android:textColor="#ffffff" android:layout_gravity="center" android:textSize="25sp" /> </LinearLayout> <LinearLayout android:id="@+id/js_top" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginTop="4dip" android:layout_gravity="center_vertical" android:orientation="vertical"> <TextView android:layout_height="match_parent" android:layout_width="wrap_content" android:text="@string/js" android:textColor="#ffffff" android:layout_gravity="center" android:textSize="25sp" /> </LinearLayout> </LinearLayout>
布局文件基本完毕.
下面是java代码:
package com.example.liguifa; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.os.Bundle; import android.view.Display; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewTreeObserver; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.LinearLayout; import android.widget.Toast; import android.os.Build; @SuppressLint("SetJavaScriptEnabled") public class MainActivity extends ActionBarActivity implements OnClickListener { private WebView wv; public int topHeight; public int bottomHeight; private int W; private int H; public LinearLayout lineTop; public LinearLayout lineBottom; private LinearLayout webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.window_Load(); this.LoadWeb(); } public void LoadWeb() { 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("加载中......."); } } }); } private boolean window_Load() { Display mDisplay = getWindowManager().getDefaultDisplay(); W = mDisplay.getWidth(); H = mDisplay.getHeight(); int foot_Ico=W/5; LinearLayout[] l=new LinearLayout[]{ (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(new ViewTreeObserver.OnPreDrawListener(){ @Override public boolean onPreDraw() { // TODO 自动生成的方法存根 topHeight = lineTop.getHeight(); ViewTreeObserver vto1= lineBottom.getViewTreeObserver(); vto1.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){ @Override public boolean onPreDraw() { // TODO 自动生成的方法存根 bottomHeight = lineBottom.getHeight(); LayoutParams laParams=(LayoutParams)webView.getLayoutParams(); laParams.height=H-topHeight-bottomHeight-24; webView.setLayoutParams(laParams); return true; } }); return true; } }); return true; } @Override public void onClick(View arg0) { // TODO 自动生成的方法存根 // new AlertDialog.Builder(this).setTitle("提示").setMessage("正在测试").show(); // setContentView(R.layout.activity_edit); // this.window_Load(); } }
其中,LoadWeb();用于自适应屏幕的大小,
Display mDisplay = getWindowManager().getDefaultDisplay();
W = mDisplay.getWidth();
H = mDisplay.getHeight();
可以得到屏幕的分辨率宽W,高H。
ViewTreeObserver类可以动态改变控件大小。
方法为
ViewTreeObserver vto = lineTop(控件句柄).getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
@Override
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也刚学没几天,代码还有很多不算太懂的东西。