首页 > 代码库 > 一个基于Android系统的新闻客户端(一)

一个基于Android系统的新闻客户端(一)

                                                                           一个基于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>
View Code

       其中用到了几章图片,,,,,,,,,,

       其中有的属性中有用到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>
View Code

         新建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>
View Code

       其中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>
View Code

       布局文件基本完毕.

       下面是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();    }}
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(){        

          @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也刚学没几天,代码还有很多不算太懂的东西。