一、增加第二个页面
二、相对布局
<RelativeLayout 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=".OtherActivity" >
<RelativeLayout
android:id = "@+id/girl1"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@drawable/girl1"
></RelativeLayout>
<RelativeLayout
android:layout_below = "@id/girl1"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@drawable/girl2"
></RelativeLayout>
</RelativeLayout>
RelativeLayout中子控件常用属性:
1、相对于父控件,例如:android:layout_alignParentTop=“true”
android:layout_alignParentTop 控件的顶部与父控件的顶部对齐;
android:layout_alignParentBottom 控件的底部与父控件的底部对齐;
android:layout_alignParentLeft 控件的左部与父控件的左部对齐;
android:layout_alignParentRight 控件的右部与父控件的右部对齐;
2、相对给定Id控件,例如:android:layout_above=“@id/**”
android:layout_above 控件的底部置于给定ID的控件之上;
android:layout_below 控件的底部置于给定ID的控件之下;
android:layout_toLeftOf 控件的右边缘与给定ID的控件左边缘对齐;
android:layout_toRightOf 控件的左边缘与给定ID的控件右边缘对齐;
android:layout_alignBaseline 控件的baseline与给定ID的baseline对齐;
android:layout_alignTop 控件的顶部边缘与给定ID的顶部边缘对齐;
android:layout_alignBottom 控件的底部边缘与给定ID的底部边缘对齐;
android:layout_alignLeft 控件的左边缘与给定ID的左边缘对齐;
android:layout_alignRight 控件的右边缘与给定ID的右边缘对齐;
3、居中,例如:android:layout_centerInParent=“true”
android:layout_centerHorizontal 水平居中;
android:layout_centerVertical 垂直居中;
android:layout_centerInParent 父控件的中央;
三、安卓的基础控件
按键
文本框
输入框
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<RelativeLayout
android:layout_width="300dp"
android:layout_height="350dp"
android:layout_centerInParent="true"
android:background="#ff0000" >
<TextView
android:id="@+id/user"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="用户"
android:layout_marginTop="20dp"
android:textColor="#ffffff"
android:textSize="20dp"/>
<EditText
android:id="@+id/ed1"
android:layout_height="40dp"
android:layout_width="300dp"
android:layout_marginTop="20dp"
android:layout_toRightOf="@id/user"
/>
<TextView
android:id="@+id/passwd"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@id/user"
android:text="密码"
android:layout_marginTop="20dp"
android:textColor="#ffffff"
android:textSize="20dp"/>
<EditText
android:id="@+id/ed2"
android:layout_height="40dp"
android:layout_width="300dp"
android:layout_marginTop="20dp"
android:layout_toRightOf="@id/passwd"
android:layout_below="@id/user"
/>
<Button
android:layout_below="@id/ed2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:text="确定"
/>
</RelativeLayout>
</RelativeLayout>
四、margin和padding
三、线性布局
<RelativeLayout 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" >
<LinearLayout
android:layout_width="350dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
android:orientation="horizontal">
<LinearLayout
android:layout_height="100dp"
android:layout_width="0dp"
android:layout_weight="2"
android:orientation="vertical"
>
<TextView android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="账号"/>
<TextView android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="密码"/>
<TextView android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="用户ID"/>
</LinearLayout>
<LinearLayout
android:layout_height="100dp"
android:layout_width="0dp"
android:layout_weight="5"
android:orientation="vertical"
>
<EditText android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<EditText android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<EditText android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
四、按键接收
4.1方式一:在xml中设置按键的onclink绑定的函数
首先在安卓的xml中写
<RelativeLayout 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" >
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text= "yes"
android:onClick="buttonOnClick"/>
</RelativeLayout>
然后在主函数中声明你绑定的函数
package com.example.demoonclick;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void buttonOnClick(View v) {
System.out.println("ok");
}
}
注意点:使用ctl+shift+o调入需要的包
4.2方式二 自定义类实现接口
MainActivity.java
package com.example.twoonclick;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
class MyClicnk implements View.OnClickListener {
Button btn1;
Button btn2;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1 :
System.out.println("this 1");
break;
case R.id.button2:
System.out.println("this 1");
break;
}
}
}
public class MainActivity extends Activity {
Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(new MyClicnk());
btn2.setOnClickListener(new MyClicnk());
}
}
activity_main.xml
<RelativeLayout 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" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="16dp"
android:layout_marginTop="107dp"
android:text="1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_centerVertical="true"
android:text="2" />
</RelativeLayout>
4.3方式三 匿名内部类的实现
package com.example.twoonclick;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
class MyClicnk implements View.OnClickListener {
Button btn1;
Button btn2;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1 :
System.out.println("this 1");
break;
case R.id.button2:
System.out.println("this 1");
break;
}
}
}
public class MainActivity extends Activity {
Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("this 1");
Toast.makeText(MainActivity.this, "butn1 press", 0).show();
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("this 2");
Toast.makeText(MainActivity.this, "butn2 press", 0).show();
}
});
}
}
4.4方式四 Activity
package com.example.threeonclick;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements View.OnClickListener {
Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1 :
System.out.println("this 1");
break;
case R.id.button2:
System.out.println("this 2");
break;
}
}
}
五、页面跳转
主要使用的是Intent 进行页面的跳转,我们这边的话再通过我们的按键完成我们达到按下就跳转到其他页面的效果。
public void goSencond(View v) {
Intent intent = new Intent(this,SencondActivity.class);
startActivity(intent);
}
MainActivity.java
package com.example.page1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void goSencond(View v) {
Intent intent = new Intent(this,SencondActivity.class);
startActivity(intent);
}
}
activity_main.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是第一个页面" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="72dp"
android:onClick="goSencond"
android:text="跳转到第二个页面" />
</RelativeLayout>
六、页面传递参数
方式一:还是要借助Intent这个函数
package com.example.page1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void goSencond(View v) {
Intent intent = new Intent(this,SencondActivity.class);
intent.putExtra("Mydate", "love");
startActivity(intent);
}
}
package com.example.page1;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.Toast;
public class SencondActivity extends Activity {
public String date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
Intent i = this.getIntent();
date = i.getStringExtra("Mydate");
Toast.makeText(this, "date : "+date, 0).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.sencond, menu);
return true;
}
}
方式二:使用Bundle
java
package com.example.page1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void goSencond(View v) {
Intent intent = new Intent(this,SencondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("Mydate", "love u");
bundle.putInt("ID", 100);
intent.putExtras(bundle);
startActivity(intent);
}
}
xml:
package com.example.page1;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.Toast;
public class SencondActivity extends Activity {
public String date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
Intent i = this.getIntent();
Bundle b = i.getExtras();
String date = b.getString("Mydate");
int id = b.getInt("ID");
Toast.makeText(this, "Mydate : "+date+ "id :" +id, 0).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.sencond, menu);
return true;
}
}
七、自动跳转的效果
package com.example.page2;
import com.example.page2.MainActivity;
import com.example.page2.SeMainActivity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread th1 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(3000);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
Intent intent = new Intent(MainActivity.this,SeMainActivity.class);
startActivity(intent);
}
});
th1.start();
}
}
八、页面的生命周期
九、socket编程
服务端代码编写:
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
byte [] date = new byte[128];
int len = 0;
try {
ServerSocket socket = new ServerSocket(8801);
System.out.println("Socket create success!");
Socket con = socket.accept();
System.out.println("client connected!\r\n");
InputStream in = con.getInputStream();
len = in.read(date);
System.out.println("接收到 消息"+new String(date,0,len));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
多次连接
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class demo {
public static void main(String[] args) {
try {
ServerSocket socket = new ServerSocket(8801);
System.out.println("Socket create success!");
while(true){
final Socket con = socket.accept();
System.out.println("client connected!\r\n");
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
InputStream in;
try {
byte [] date = new byte[128];
int len = 0;
in = con.getInputStream();
len = in.read(date);
System.out.println("接收到 消息"+new String(date,0,len));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
try {
Socket client = new Socket("192.168.1.13",8086);
OutputStream out = client.getOutputStream();
Scanner sc = new Scanner(System.in);
String message = sc.next();
out.write(message.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
十、页面刷新
package com.example.shuaxing;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
public TextView textView;
public Handler h;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textView1);
h = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
textView.setText("qi"+msg.what);
}
};
}
public void myClick(View v){
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("qi");
for (int j = 0; j <10; j++) {
Message msg = new Message();
msg.what = j;
h.sendMessage(msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
}
十一、综合页面
MainActivity.java
package com.example.smartjhiemian;
import com.example.smartjhiemian.net.NetUtils;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
Handler handler;
TextView tx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
tx = (TextView) findViewById(R.id.tx);
super.handleMessage(msg);
Bundle b = msg.getData();
String str1 = b.getString("msg");
tx.setText(str1);
}
};
}
public void sendMessage(View v) {
switch(v.getId()){
case R.id.button1:
NetUtils.sendMessage("GOFORWARD", handler);
break;
}
}
}
NetUtils.java
package com.example.smartjhiemian.net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class NetUtils {
public static void sendMessage(final String command,final Handler h) {
new Thread(new Runnable() {
@Override
public void run() {
try {
int len = 0;
Socket client = new Socket("192.168.1.13",8087);
OutputStream out = client.getOutputStream();
out.write(command.getBytes());
InputStream in =client.getInputStream();
byte[] date = new byte[128];
len = in.read(date);
String str = new String(date,0,len);
Message msg = new Message();
Bundle b = new Bundle();
b.putString("msg", str);
msg.setData(b);
h.sendMessage(msg);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}
activity_main.xml
<RelativeLayout 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:background="#000000"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发起网络请求"
android:onClick="sendMessage"
android:background="#000000"
android:textColor="#ffffff" />
<TextView
android:id="@+id/tx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="35dp"
android:layout_centerInParent="true"
android:textColor="#ffffff"
/>
</RelativeLayout>