// MainActivite.java
/**
* The first Android 4.4.2 APP
* Author: fengdos
* Date : 2014-06-06
* Android app中的一个页面就对应一个 Activity.java文件及相应的XML配置布局文件.
* Android开发过程:
* 1. 用eclipse建立项目,自动生成Activity框架
* 2. 添加控件
* 3. 进行界面布局,并设置 相应 控件 的属性
* 4. 对 控件 进行 事件 绑定
* 5. 生成APK安装包
* 建立本项目过程: 进入Eclipse Luna
* File/ new / Project... / Android / Android Application Project/
* 输入下列:
* Application Name: First
* Project Name: First
* Package Name: com.dlf.First
* 选择下列:
* Minimum Required SDK: API 19: Android 4.4(KitKet)
* Target SDK: API 19: Android 4.4(KitKet)
* Compile With: API 19: ANdroid 4.4(KitKat)
* Theme: Holo Light with Dark Action Bar
* 然后一路 ‘下一步’,完成,就创建了本项目。
*
* 项目自动生成的文件清单及说明:
* MainActivity.java 为主项目源文件(负责业务逻辑),位于First/src/com.dlf.first/
* activity_main.xml 为主项目配置文件(负责界面及布局),位于First/res/layout
* First/gen/com.dlf.first/BuildConfig.java //请勿手动修改,属自动更新源代码
* First/gen/com.dlf.first/R.java //请勿手动修改,属自动更新源代码
* First/Android 4.4.2/android.jar APP开发工具包,里面有开发APP的很多类库
* First/bin/AndroidMainifest.xml 配置文件
* First/bin/classes.dex Android字节码文件,相当于java中的.class文件
* First/bin/First.apk 编译生成Android安装文件apk,将此文件复制到Android手机中就可以进行安装及使用了
* First/bin/res 用于APP中的图标资源,用于显示APP的图标(各种大小,如:32*32,48*48,128*128等)
* First/drawable/button_font_style.xml 按钮风格配置
*
* 有时候在Eclipse中关闭了你所使用的项目,则可以用以下方法打开你要的项目:
* File / Import.. /Android/Existing Android Code Into Workspace
* 点击'Browse...'按钮,选择你的Android项目位置,
* 本人Android项目位置D:\Users\Administrator\workspace,
* 最后勾选你所要打开的项目,如: First
*
* 注意: 项目名就是以后的APP名,建立后就不能更改了.
*/
package com.dlf.first;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View; // 所有控件的父类View类
import android.view.View.OnClickListener; // 点击事件
import android.widget.Button; // 按钮
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.EditText; // 编辑框
import android.widget.Switch;
import android.widget.TextView; // 文本框
import android.widget.Toast;
/*为什么我一创建android项目就有helloworld了,怎么取消呀,怎么创建一个空项目呀,用的是eclipse
//把布局文件里面的textview控件删掉,就是空项目
//每次都要删吗?就不能创建的时候就弄好
//可以,创建的时候我记得可以选择类型………有null,还有tab,还有登入界面
* 在一个项目中建立另一个 Activity 过程: 如项目名为: First,则在项目First上右击鼠标右键,选择 New/Other../Android/Android Activity..
* 然后根据提示操作,下一步,完成.
*/
/* 如运行时出现以下错误:
* Android Launch!
* The connection to adb is down, and a severe error has occured.
* You must restart adb and Eclipse.
* Please ensure that adb is correctly located at 'D:\Android\android-sdk\platform-tools\adb.exe' and can be executed.
* 解决办法如下:
* D:\Android\android-sdk\platform-tools\ado.exe
* cmd:> adb kill-server // 杀死adb服务进程
* cmd:> adb start-server // 重启adb服务进程
* 如上述办法不行,可以是运行时候连接了手机,并且360手机助手等软件打开了,关闭了ADB进程,此关闭这些软件,还不行就弹出手机,再运行就OK了;
* 其实adb.exe进程是Eclipse运行Android项目时自动运行开启的,根本不用手动开启;
*
* 当正确连接了手机后,在Eclipse中运行Android项目时,弹出一个对话框要求你选择是在 手机或仿真器中运行,选择 手机 时,就直接在手机中打开相应APP,
* 如果手机中没有本APP,则进行时会自动安装到手机中,然后再打开运行.
*
* 在Android开发中时常会遇到需要多行输入的情况,今天为大家带来如何解决
* android里面EditTex多行输入的情况。
* 添加关键代码:
* android:minLines="8"
* android:maxLines="10"
* android:inputType="textMultiLine"
* 其中最为关键的是 android:inputType="textMultiLine"
* android里面EditTex多行输入.
* 若要显示滚动条,添加如下代码:
* android:scrollbars="vertical"
* android里面EditTex多行输入.
* minLines和maxLines的区别:
* android:minLines="3"
* android:maxLines="3"
* 使用maxLines的EditText最大行数为3行,当输入的内容超过3行后,它形状的大小不会根据输入内容的多少而改变,反正它显示的内容就是3行
* 而使用minLines的EditText是至它至少显示3行内容,当输入的内容超过3行后,它形状的大小根据输入内容的多少而改变。
*/
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private static final String TAG="MainActivity";
boolean isOn = false;
@Override
protected void onCreate(Bundle savedInstanceState) { // 建立时就执行,初始化一般在这事件中
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 设置界面使用的视图绑定为activity_main.xml文件,必须有这语句
//自动显示 Hello World,不让显示就把布局文件里面的textview控件删掉,就是空项目
// 手动增加代码开始
Button saveM = (Button) findViewById(R.id.saveMsg);
saveM.setOnClickListener(saveMsg_OnClickListener);
Button m = (Button) findViewById(R.id.man);
Button w = (Button) findViewById(R.id.women);
m.setOnClickListener(man_OnClickListener);
w.setOnClickListener(women_OnClickListener);
/*EditText et = (EditText) findViewById(R.id.userName);
et.setBackgroundColor(Color.YELLOW);*/
SeekBar sek = (SeekBar) findViewById(R.id.seek);
sek.setOnSeekBarChangeListener(seek_OnSeekBarChangeListener);
sek.setProgress(50);
Button login= (Button) findViewById(R.id.login); //绑定login为R.id.login所指定的按钮
login.setBackgroundColor(Color.argb(70, 109, 183, 221)); // 透明度,R,G,B
login.setTextColor(Color.RED);
login.setOnClickListener(login_OnClickListener); // 绑定事件
Switch sw = (Switch) findViewById(R.id.switch1);
sw.setOnCheckedChangeListener(sw1_OnClickListener);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(button1_OnClickListener); // 为拨打按钮注册监听器
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(button2_OnClickListener); // 绑定button1的点击事件与Button2OnClickListener关联
Button statueButton = (Button) findViewById(R.id.toggleButton1);
statueButton.setOnClickListener(toggleButton1_OnClickListener); // 绑定button1的点击事件与myOnClickListener关联
// 手动增加代码结束
}
private OnClickListener saveMsg_OnClickListener = new OnClickListener() {
public void onClick(View v) {
// 增加自己的代码......
// button1.setBackgroundColor(getResources().getColor(R.color.blue));
final TextView text = (TextView) findViewById(R.id.textView1); // 绑定 标签 对象
final CheckBox chk = (CheckBox) findViewById(R.id.saveMsg); // 绑定 复选框 对象
text.setBackgroundColor(Color.GREEN);
text.setTextColor(Color.BLUE);
if(chk.isChecked()==true) {
text.setText("\t信息保存\r成功!\n ");
}
else if(chk.isChecked()==false) {
text.setText("已取消保存信息.");
}
}
};
private OnClickListener man_OnClickListener = new OnClickListener() {
public void onClick(View v) {
// 增加自己的代码......
final TextView text = (TextView) findViewById(R.id.textView1); // 绑定 标签 对象
text.setBackgroundColor(Color.BLUE);
text.setTextColor(Color.LTGRAY);
text.setText("你是是个男的.");
}
};
private OnClickListener women_OnClickListener = new OnClickListener() {
public void onClick(View v) {
final TextView text = (TextView) findViewById(R.id.textView1); // 绑定 标签 对象
text.setBackgroundColor(Color.YELLOW);
text.setTextColor(Color.BLUE);
text.setText("你是个美女!");
}
};
private OnSeekBarChangeListener seek_OnSeekBarChangeListener = new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seek, int progress,
boolean fromUser) {
final TextView text = (TextView) findViewById(R.id.textView1); // 绑定标签 对象
text.setBackgroundColor(Color.YELLOW);
text.setTextColor(Color.BLUE);
/*
* final SeekBar val = (SeekBar) findViewById(R.id.seek);
* text.setText("当前值为: " + val.getProgress()); // 这个可以获取到
*/
text.setText("当前值为: " + progress); // 这个也能用
}
public void onStartTrackingTouch(SeekBar seekBar) {
final TextView text = (TextView) findViewById(R.id.outMessage); // 绑定标签对象
text.setText("开始拖动..");
}
public void onStopTrackingTouch(SeekBar seekBar) {
final TextView text = (TextView) findViewById(R.id.outMessage); // 绑定标签对象
text.setText("拖动停止!!");
}
};
private OnClickListener login_OnClickListener = new OnClickListener() {
public void onClick(View v) {
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("\t用户登录\n验证成功!");
Intent intent=new Intent(); // 实例化一个意图
intent.setClass(MainActivity.this, ActivityOne.class);
startActivity(intent); // 启动一个意图,通过第一个页面上按"登录"按钮调用第二个页面.
int version = Integer.valueOf(android.os.Build.VERSION.SDK);
if(version >= 5) {
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
//overridePendingTransition(android.R.anim.decelerate_interpolator,android.R.anim.decelerate_interpolator);
//overridePendingTransition(android.R.anim.overshoot_interpolator,android.R.anim.linear_interpolator);
}
MainActivity.this.finish();
}
};
private OnCheckedChangeListener sw1_OnClickListener = new OnCheckedChangeListener() {
// public void onClick(View v) {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
final TextView text = (TextView) findViewById(R.id.outMessage); // 绑定标签对象
text.setBackgroundColor(Color.YELLOW);
text.setTextColor(Color.BLUE);
if (isChecked) {
// mBluetoothAdapter.enable(); //打开蓝牙
text.setText("蓝牙功能已打开.");
} else {
// mBluetootAdapter.disable(); //关闭蓝牙
text.setText("蓝牙功能关闭了!");
}
}
};
// 手动增加代码开始 ,为按钮添加侦听器
private OnClickListener toggleButton1_OnClickListener = new OnClickListener() {
public void onClick(View v) {
// 增加自己的代码......
// button1.setBackgroundColor(getResources().getColor(R.color.blue));
final TextView text = (TextView) findViewById(R.id.textView1);
if(isOn == false) {
isOn=true;
text.setText("OnClick. " + "WiFi已打开.");
}
else if(true == isOn) {
isOn=false;
text.setText("OnClick. " + " WiFi已关闭!!");
}
}
};
private OnClickListener button1_OnClickListener = new OnClickListener() {
public void onClick(View v) {
// 增加自己的代码......
// button1.setBackgroundColor(getResources().getColor(R.color.blue));
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("OnClick. " + " 正在拨号中...");
System.out.println("You Click!"); // 没有输出到Console而是输出到LogCat中的Text字段中
/*//实例化一个意图,当按钮被单击时被执行
Intent intent = new Intent();
//这个意图就是调用系统的拨打活动
intent.setAction(Intent.ACTION_CALL);
//设置要拨打的电话号号码
intent.setData(Uri.parse("tel:18974731396")); //uriString的格式为“tel:电话号码”
//开始调整到打电话的活动
startActivity(intent);*/
}
};
// 手动增加代码开始 ,为按钮添加侦听器
private OnClickListener button2_OnClickListener = new OnClickListener() {
public void onClick(View v) {
// 增加自己的代码......
// 弹出一个对话框,有'取消'及'确认'两个按钮
AlertDialog.Builder alterDialog = new AlertDialog.Builder(
MainActivity.this);
alterDialog.setTitle(" 选择操作");
alterDialog.setMessage(" 提示内容: 确认要退出应用吗? ");
alterDialog.setCancelable(false);
alterDialog.setPositiveButton("确认",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "确认操作",
Toast.LENGTH_SHORT).show();
//MainActivity.finish();
MainActivity.this.finish(); //退出当前APP,返回到Android桌面
//System.exit(0); // 由于是调试,所以用这个方便些,开发成功后改为上一条语句
}
});
alterDialog.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "取消操作",
Toast.LENGTH_SHORT).show();
//alterDialog.show(); // 不能在这里调用
}
});
alterDialog.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.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
// APP中的菜单执行相应操作
int id = item.getItemId(); // 获取选择的菜单项
if (id == R.id.action_settings) { // APP必须带有一个Settings菜单项,此为不进行任何操作,直接返回
System.out.println("Choice is: " + id); // 没有输出到Console而是输出到LogCat中的Text字段中
// Settings菜单项的 id值为 2131296258
// System.exit(0); // 按下Settings菜单时执行退出APP操作
return true;
} else if (id == R.id.item1) {
// item1命名来自res/menu/main.xml文件中的定义,R.id.item1与2131296259相同
final TextView text = (TextView) findViewById(R.id.outMessage);
text.setText("版权所有: Fengdos, 欢迎使用!!");
System.out.println("关于本APP..");
} else if (id == R.id.item2) { // 应用的菜单中的第一个选项值为2131296259,第二个为2131296260,依次类推
// 此例中 item2等同2131296260,这些数字也是不固定的,有时为2131296270,所以最好不要用,而直接用R.id.item**
System.exit(0); // 退出应用
}
System.out.println("Select is: " + id); // 没有输出到Console而是输出到LogCat中的Text字段中
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("Select is " + id);
return super.onOptionsItemSelected(item);
}
}
// ActivtyOne.java
package com.dlf.first;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ActivityOne extends Activity {
/** Called when the activity is first created. */
private static final String TAG="ActivityOne";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_one);
Button sum= (Button) findViewById(R.id.addNum);
sum.setOnClickListener(addNum_OnClickListener); // 绑定事件
Button ret= (Button) findViewById(R.id.returnMain);
ret.setBackgroundColor(Color.argb(39, 109, 183, 221)); // 透明度,R,G,B
ret.setTextColor(Color.BLUE);
ret.setOnClickListener(returnMain_OnClickListener); // 绑定事件
}
private OnClickListener addNum_OnClickListener = new OnClickListener() {
public void onClick(View v) {
final TextView text = (TextView) findViewById(R.id.viewMessage);
EditText A = (EditText) findViewById(R.id.numOne);
EditText B = (EditText) findViewById(R.id.numTwo);
Integer a,b,c;
a=b=c=0;
//text.setText("A,B = " + A + " , " + B); //不输入时,就是一串乱字符
/*A.setText("0");
B.setText("0");*/
if(A.getText().equals("0") || B.getText().equals("0")) {
text.setText("你还没有输入数字!!"); // 没有实现判断未输入时的处理,些语句块无效,等实现??
}
else {
a = Integer.parseInt(A.getText().toString());
b = Integer.parseInt(B.getText().toString());
c = a + b;
text.setText(a + " + " + b + " = " + c );
}
}
};
private OnClickListener returnMain_OnClickListener = new OnClickListener() {
public void onClick(View v) {
final TextView text = (TextView) findViewById(R.id.viewMessage);
text.setText("返回主界面成功!");
Intent intent=new Intent();
intent.setClass(ActivityOne.this, MainActivity.class);
startActivity(intent); // 通过第一个页面上按"登录"按钮调用第二个页面.
int version = Integer.valueOf(android.os.Build.VERSION.SDK);
if(version >= 5) {
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
//overridePendingTransition(android.R.anim.decelerate_interpolator,android.R.anim.decelerate_interpolator);
//overridePendingTransition(android.R.anim.overshoot_interpolator,android.R.anim.linear_interpolator);
}
ActivityOne.this.finish();
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_one, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}