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

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

    一、整体概述

      在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻。

      服务端用WCF,宿主为window服务,客户端为Java写的安卓程序。

    二、客户端

      我在eclipse里新建了个Android项目,命名为MyNewClient,eclipse自动生成二个xml布局文件,如图:

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

      其中,fragment_main.xml是新版的布局文件,暂时不会用,把它删掉。

      新建xml文件,命名为activity_foot.xml,在这里我们要做app的底部,先上代码:

一个基于Android系统的新闻客户端(一)
<?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

       其中用到了几章图片,一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一),一个基于Android系统的新闻客户端(一)

       其中有的属性中有用到xml,用来定义单击事件发生时的状态得变化,下面是其一个的代码,其他代码秩序修改其变化后的图片即可。

一个基于Android系统的新闻客户端(一)
<?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,下面是代码:

一个基于Android系统的新闻客户端(一)
<?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的头部,下面是代码:  

一个基于Android系统的新闻客户端(一)
<?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代码:

一个基于Android系统的新闻客户端(一)
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也刚学没几天,代码还有很多不算太懂的东西。

        

      

   

一个基于Android系统的新闻客户端(一),布布扣,bubuko.com

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

上一篇:Android 修改Activity标题样式 actionBar


下一篇:多任务学习模型MTL: MMoE、PLE