主页面实现
效果图
主页面是一个登录页面,输入用户名密码,如果错误提示,如果正确则跳转菜单页。
判断用户名密码是否正确使用的是 UserService 的 login 方法。
activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/main_bg"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingTop="50dp">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@mipmap/logo" />
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="30dp"
android:layout_marginTop="50dp"
android:layout_marginRight="30dp"
android:background="@mipmap/input"
android:hint="用户名"
android:paddingLeft="20dp"
android:textColor="@android:color/white"
android:textColorHint="#fff" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="30dp"
android:background="@mipmap/input"
android:hint="密码"
android:inputType="textPassword"
android:paddingLeft="20dp"
android:textColor="@android:color/white"
android:textColorHint="#fff" />
<ImageButton
android:id="@+id/loginbutton"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginTop="30dp"
android:background="#0000"
android:scaleType="fitXY"
android:src="@mipmap/login" />
</LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";//习惯用当前类名当作TAG
EditText editText1;
EditText editText2;
ImageButton imageButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
setViews();
setListeners();
}
private void setViews() {
editText1 = findViewById(R.id.username);
editText2 = findViewById(R.id.password);
imageButton = findViewById(R.id.loginbutton);
}
private void setListeners() {
imageButton.setOnClickListener(view -> doLogin());
}
/*
* 1、获取输入框用户名和密码
* 2、新建 Service实例 赋给 service
* 3、调用 service.login(username,password)中方法
* 并获得它返回的运算结果赋值给b
* 4、b如果是true
* 5、跳转到下一个页面
* 6、销毁当前登录窗口
* 7、否则
* 8、显示登录失败
* */
private void doLogin() {
String userName = editText1.getText().toString();
String password = editText2.getText().toString();
Log.d(TAG, "用户名:" + userName + "密码:" + password);
UserService service = new UserService();
boolean b = service.login(userName, password);
Log.d(TAG, "登录是否成功" + b);
if (b) {
startActivity(new Intent(this, MenuActivity.class));
finish();
} else {
Toast.makeText(this, "登录失败请检查用户名和密码", Toast.LENGTH_SHORT).show();
}
}
}
其中 User
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "{" + username + "," + password + "}";
}
}
其中 UserService
public class UserService {
private static final String TAG = "UserService";
public User[] findAll() {
//获得用户信息
String[][] a = {{"Pinkman", "White", "Mike"}, {"123", "456", "789"}};
/*[[a,b,c],[*,*,*]]
* ------- --------
* 0 1
* */
//新建 User[]数组,长度a[0].length
User[] users = new User[a[0].length];
//遍历 users 数组
//在每个位置新建 User对象
for (int i = 0; i < users.length; i++) {
users[i] = new User(a[0][i], a[1][i]);
}
Log.d(TAG, "系统用户数据:" + Arrays.toString(users));
return users;
}
public boolean login(String userName, String password) {
//调用上面方法获得所有用户信息
User[] a = findAll();
for (int i = 0; i < a.length; i++) {
String u = a[i].getUsername();
String p = a[i].getPassword();
if (u.equals(userName) && p.equals(password)) {
return true;
}
}
return false;
}
}
菜单页面页实现
效果图
菜单页有两个按钮,点击第一个跳转网点查询,点击第二个跳转航班查询
activity_menu
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/main_bg"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0000"
android:src="@mipmap/buttonbg" />
<ImageButton
android:id="@+id/imageButton2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0000"
android:src="@mipmap/buttonbg" />
</LinearLayout>
MenuActivity
public class MenuActivity extends AppCompatActivity {
ImageButton imageButton1;
ImageButton imageButton2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_menu);
setViews();
setListeners();
}
private void setViews() {
imageButton1 = findViewById(R.id.imageButton1);
imageButton2 = findViewById(R.id.imageButton2);
}
private void setListeners() {
imageButton1.setOnClickListener(view -> startActivity(new Intent(MenuActivity.this, BranchSearchActivity.class)));
imageButton2.setOnClickListener(view -> startActivity(new Intent(MenuActivity.this, FlightSearchActivity.class)));
}
}
网点查询实现
效果图
activity_branch_search
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<!--标题栏开始-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#004080">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0000"
android:padding="10dp"
android:src="@mipmap/home" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="网点查询"
android:textColor="@android:color/white" />
</RelativeLayout>
<!--标题栏结束-->
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:layout_marginRight="20dp"
android:background="#87CEEB"
android:entries="@array/cities"
android:padding="5dp" />
<ImageButton
android:id="@+id/imageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:background="#ffff"
android:src="@mipmap/search" />
<ImageView
android:layout_width="match_parent"
android:layout_height="20dp"
android:scaleType="fitXY"
android:src="@mipmap/line" />
<!--占满剩余空间-->
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
BranchSearchActivity
public class BranchSearchActivity extends AppCompatActivity {
Spinner spinner;
ImageButton imageButton;
ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_branch_search);
setViews();
setListeners();
}
private void setViews() {
spinner = findViewById(R.id.spinner);
imageButton = findViewById(R.id.imageButton);
listview = findViewById(R.id.listview);
}
private void setListeners() {
imageButton.setOnClickListener(view -> search());
}
private void search() {
//从下拉菜单中获得城市
String city = (String) spinner.getSelectedItem();
//新建业务逻辑运算组件对象
BranchService branchService = new BranchService();
//调用它的方法获得查询结果
Branch[] branches = branchService.findByCity(city);
//新建String[]数组,长度是branches.length
String[] a = new String[branches.length];
//遍历a数组
for (int i = 0; i < a.length; i++) {
Branch b = branches[i];
a[i] = "\nID:" + b.getId() +
"\nName" + b.getName() +
"\nAddress" + b.getAddress();
}
//在列表控件中显示
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, a);
listview.setAdapter(adapter);
}
}
其中布局中的 cities 是 strings 中的一个 string-array
<string-array name="cities">
<item>杭州</item>
<item>重庆</item>
<item>广州</item>
</string-array>
其中 Activity 中的 Branch
public class Branch {
private String id;
private String name;
private String address;
public Branch(String id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
BranchService
public class BranchService {
private static final String TAG = "BranchService";
public Branch[] findByCity(String city) {
String[][] a = {{"01", "02", "03"}, {"杭州", "重庆", "广州"}, {"1378.1km处", "2027.7km处", "2390.3km"}};
Branch[] b = new Branch[1];
for (int i = 0; i < a[0].length; i++) {
if (city.equals(a[1][i])) {
b[0] = new Branch(a[0][i], a[1][i], a[2][i]);
}
}
Log.d(TAG, "网点查询结果:" + Arrays.toString(b));
return b;
}
}
航班查询实现
效果图
activity_flight_search
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<!--标题栏开始-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#004080">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0000"
android:padding="10dp"
android:src="@mipmap/home" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="航班查询"
android:textColor="@android:color/white" />
</RelativeLayout>
<!--标题栏结束-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:padding="10dp">
<!--左侧菜单开始-->
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<ImageView
android:id="@+id/imageView1"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:src="@mipmap/flight" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/imageView1"
android:background="#87CEEB"
android:entries="@array/cities"
android:padding="5dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/spinner1"
android:layout_alignLeft="@id/spinner1"
android:text="出发城市" />
</RelativeLayout>
<!--左侧菜单结束-->
<!--右侧菜单开始-->
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<ImageView
android:id="@+id/imageView2"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:src="@mipmap/flight2" />
<Spinner
android:id="@+id/spinner2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/imageView2"
android:background="#87CEEB"
android:entries="@array/cities"
android:padding="5dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/spinner2"
android:layout_alignLeft="@id/spinner2"
android:text="到达城市" />
</RelativeLayout>
<!--右侧菜单结束-->
</LinearLayout>
<ImageButton
android:id="@+id/imageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0000"
android:src="@mipmap/search"
android:layout_marginTop="10dp"/>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
FlightSearchActivity
public class FlightSearchActivity extends AppCompatActivity {
Spinner sp1;
Spinner sp2;
ImageButton imageButton;
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_flight_search);
initViews();
intetListeners();
}
private void initViews() {
sp1 = findViewById(R.id.spinner1);
sp2 = findViewById(R.id.spinner2);
listView = findViewById(R.id.listView);
imageButton = findViewById(R.id.imageButton);
}
private void intetListeners() {
imageButton.setOnClickListener(view -> search());
}
private void search() {
//获得出发城市和到达城市
String from = (String) sp1.getSelectedItem();
String to = (String) sp2.getSelectedItem();
//新建逻辑运算组件
//调用它的查询方法获得查询结果
FlightService flightService = new FlightService();
FlightPlan[] flights = flightService.findByCity(from, to);
//新建String[],长度flights.length
String[] a = new String[flights.length];
for (int i = 0; i < flights.length; i++) {
//取出航班对象
FlightPlan flightPlan = flights[i];
a[i] = "\nID:" + flightPlan.getId() + "\n出发地:" + flightPlan.getFromairport() + "\n目的地" +
flightPlan.getToairport() + "\n时间" + flightPlan.getTime();
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout
.simple_list_item_1, a);
listView.setAdapter(arrayAdapter);
}
}
其中 FlightPlan
public class FlightPlan {
private String id;
private String fromairport;
private String toairport;
private String time;
public FlightPlan(String id, String fromairport, String toairport, String time) {
this.id = id;
this.fromairport = fromairport;
this.toairport = toairport;
this.time = time;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFromairport() {
return fromairport;
}
public void setFromairport(String fromairport) {
this.fromairport = fromairport;
}
public String getToairport() {
return toairport;
}
public void setToairport(String toairport) {
this.toairport = toairport;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
FlightService
public class FlightService {
public FlightPlan[] findByCity(String from, String to) {
String temp = from + "," + to;
String[][] data = {{"杭州,重庆", "杭州,广州", "重庆,广州", "广州,重庆", "广州,杭州", "重庆,杭州"},
{"001", "002", "003", "004", "005", "006"}, {"9月13日", "9月13日", "9月13日", "9月13日", "9月13日", "9月13日"}};
FlightPlan[] plan = new FlightPlan[1];
for (int i = 0; i < data[0].length; i++) {
if (temp.equals(data[0][i])) {
plan[0] = new FlightPlan(data[1][i], from, to, data[2][i]);
}
}
return plan;
}
}
资源下载
主要是 Android 页面布局练习和简单的逻辑练习。Android 小白的第一个项目。