2013年8月7日 星期三

View 淺說(一)

先New 一個專案 MyView,定義res/layout/main.xml,包含兩個LinearLayout容器。一個Button


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
   >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
    <Button 
        android:id="@+id/save"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Save"
        /> 
</ LinearLayout >
</ LinearLayout >


在專案中的src 中 NEW 一個新的Class myview 繼承自View 這個類別。myview 必須實作建構子
myview。 利用Paint()函數,抓取一個預設的paint ,並用setBackgroundColor()為View 上色



public class myview extends View {
private Paint paint;
public myview(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
//Create a new paint with default settings.
paint=new Paint();
paint.setColor(Color.YELLOW);
paint.setStrokeWidth(4); 
setBackgroundColor(Color.BLACK);
}
}



存檔後,修改l/res/layout/main.xml ,於LinearLayout中加入自訂的View,取名為vv。

 <com.example.myview.myview

        android:id="@+id/vv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </com.example.myview.myview>






2013年8月6日 星期二

Handler 類別

Thread 執行緒中不能直接呼叫介面。因此若想將結果呈現在TextView 中,必須透過Handler類別協助。

private class MyHandler extends Handler
{
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
tv.setText(""+counter++);
super.handleMessage(msg);
}
}

其中tv 是一個Textview 。

在Thread 的run 事件中呼叫Handler 送出message,

public void run()
{
for(int i=1;i<20;i++)
{
handler.sendMessage(new Message());
try {
Thread.sleep(1000);  // 每隔一秒休息一下
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}



程式下載

2013年8月5日 星期一

初談Thread


先佈署Layout,使用一個Button,與一個TextView


在MainActivity中,建立一個類別MyThread。擁有一個建構子MyThread(String n)



btn的setOnClickListener類別中的OnClick 事件執行執行緒


執行結果如附:


程式下載

2013年7月30日 星期二

Menu 淺談

在Android 中的Menu可以使用XML來開發,在Menu.xml 中可以新增Item1,Item2 





<menu 
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
    <item android:id="@+id/item1" android:title="item1"></item>
    <item android:id="@+id/item2" android:title="item2"></item>


</menu>


在模擬器呈現出來的結果如下。


在Activity 中要使用的方法:



其中item.getItemid()會傳出一組序號來辨識所選擇的是哪一個item,可以用R.id.item1 來辨視鎖選擇的item



2013年7月29日 星期一

Menu 的事件觀察


  1. 先Create基本的<LinearLayout> ,



基本配置如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</LinearLayout>

回到Activity 觀察:
在onCreateOptionsMenu 事件中,寫了一個Log.i 觀察
Log.i("Jacky","onCreateOptionsMenu");

public boolean onCreateOptionsMenu(Menu menu) 
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
Log.i("Jacky","onCreateOptionsMenu");
return true;

} 

在onMenuItemSelected 事件中,寫了一個Log.i 觀察

public boolean onMenuItemSelected(int featureId, MenuItem item)
 {
// TODO Auto-generated method stub
Log.i("Jacky","onMenuItemSelected");
return super.onMenuItemSelected(featureId, item);
}

在onOptionsItemSelected事件中,寫了一個Log.i 觀察
public boolean onOptionsItemSelected(MenuItem item) 
{
// TODO Auto-generated method stub
Log.i("Jacky","onOptionsItemSelected");
return super.onOptionsItemSelected(item);

}

執行程式,按下模擬器的Menu


在Log 中,Text 呈現onCreateOptionMenu ()

按下Setting 鍵後


2013年7月14日 星期日

Servlet 的部署描述檔

在Tomcat 伺服器下對應到根目錄"/" 的預設環境是servlet_root/webapps/ROOT,這表示在servlet_root/webapps/ROOT/WEB_INF/classes目錄下的servlet 都可以用類似servlet/HelloWorld
來存取。

在WEB_INF目錄下的web.xml 稱為部署描述檔,這是一個具有標準DTD的XML檔。其中也包含了控制servlet 控制的行為。


  
擷取web.xml 中相關設定來看

<servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>Servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/hello.html</url-pattern>
    </servlet-mapping>


我們可以透過執行http://localhost:8084/FirstServlet/hello.html 來啟動HelloServlet,藉由設定servlet name 的關係,找到對應的servlet

2013年7月13日 星期六

JSTL 概述

JSTL 是JSP Standard Tag Library 的縮寫。所謂的標籤是指JSP 作為Java EE 分層程式中顯示層的一種顯示方案。 Model 1 (模式一):早期的Java Web 應用程式是不分階層的,也因為業務沒有分層,程式碼顯得凌亂也不易維護。 Model 2 (模式二):將Web 分為幾個層,每個層處理不同事情,比較經典的分層結構為MVC (Model -View-Control)。在MVC 架構中Model 處理業務相關,View 處理顯示相關,而Control 協調Model層與View 層。Control 層中一般為Servlet,View 層為JSP 。 在JSP中可以使用Scriptlet 指令稿來完成資料顯示;但是Scriptlet 如果與JSP 中的HTML混在一起,可讀性與可維護性將變差,如果要實現複雜的顯示功能,Scriptlet 也不方便。而JSP標籤與HTML 相似,遵循XML與法,將使JSP 顯得簡潔,乾淨。 從JAVA EE 5開始,JAVA EE 內建對JSTL 的支援,JSP中可直接使用,無須再設定web.xml。 Core標籤函式庫是JSTL 的核心標籤函式庫。實踐了基本功能。 標籤 JSTL 中以out 標籤來顯示資料,例如。