• 【家庭记账本】Android开发(初稿)


      明天就开学了,前一天晚上姑且把APP的初稿做了出来,这个寒假除了阅读任务之外,我大部分时间都在玩(反省)。下面进行展示:

    一,数据库:

    DBUser.java

     1 package com.example.vacation;
     2 
     3 import android.content.ContentValues;
     4 import android.content.Context;
     5 import android.database.sqlite.SQLiteDatabase;
     6 import android.database.sqlite.SQLiteOpenHelper;
     7 
     8 //继承SQLiteOpenHelper,用于创建数据库
     9 public class DBUser extends SQLiteOpenHelper {
    10     public DBUser(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){
    11         super(context, name, factory, version);
    12     }
    13 
    14     //重写onCreate方法
    15     @Override
    16     public void onCreate(SQLiteDatabase db) {
    17         //该数据库创建user,message两个表
    18         String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20))";
    19         String sql2="create table message(mid integer primary key autoincrement,musername varchar(20),name varchar(20),money varchar(20),date varchar(20),inout varchar(20))";
    20         db.execSQL(sql);
    21         db.execSQL(sql2);
    22     }
    23 
    24     //此方法用于注册账号时将账号密码录入user表
    25     public void addData(SQLiteDatabase sd,String username,String password){
    26         ContentValues values=new ContentValues();
    27         values.put("username",username);
    28         values.put("password",password);
    29         sd.insert("user",null,values);
    30     }
    31 
    32     @Override
    33     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    34 
    35     }
    36 }

    创建SQLite数据表的方法就是创建一个java类,继承SQLiteOpenHelper,随后对onCreate方法进行重写,正常也要对下面的onUpgrade方法也要进行重写,这个跟数据库的更新有关。在onCreate方法中我们要设定表的相关信息,代码所示我创建了user和message两个表,前面用于记录用户的账号密码,后面则是记录用户的收入支出数据。判定用户数据的标准是musername项,这里存储的是用户的账号,在查询是会遍历该表,以账号作为查询标准。其他信息也可以作为标准,但因为时间缘故没有完成,后续可能会进行完善。

    二,起始界面:

    MainActivity.java(后台)

     1
    package com.example.vacation;

    import androidx.appcompat.app.AppCompatActivity;

    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    //声明控件
    private Button create;
    private Button login;
    private EditText user;
    private EditText pass;
    private DBUser dbuser;
    private SharedPreferences.Editor editor;
    private SQLiteDatabase sqLiteDatabase;
    private SharedPreferences sp;

    //调用方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    login=(Button)findViewById(R.id.login);
    create=(Button)findViewById(R.id.create);
    user=(EditText)findViewById(R.id.user);
    pass=(EditText)findViewById(R.id.pass);
    login.setOnClickListener(this);
    create.setOnClickListener(this);

    //创建数据库
    dbuser=new DBUser(MainActivity.this,"user_db",null,1);
    sqLiteDatabase=dbuser.getWritableDatabase();

    //该栏原定用于完成“记住密码”的功能,但该功能未实现
    sp=getSharedPreferences("user_mes",MODE_PRIVATE);
    editor=sp.edit();
    if(sp.getBoolean("flag",false)){
    String user_read=sp.getString("user","");
    String pass_read=sp.getString("pass","");
    user.setText(user_read);
    pass.setText(pass_read);
    }

    }

    //设置按钮点击事件
    @Override
    public void onClick(View view){
    //分“登录”和“注册”两个按钮
    switch (view.getId()){
    //登录
    case R.id.login:
    //取值
    String user_str=user.getText().toString();
    String pass_str=pass.getText().toString();
    //判定
    if(user_str.equals("")||pass_str.equals("")){
    Toast.makeText(this,"账号或密码不能为空",Toast.LENGTH_SHORT).show();
    }else{
    //遍历user表,若账号不存在证明未注册,提示错误信息
    Cursor cursor=sqLiteDatabase.query("user",new String[]{"password"},"username=?",new String[]{user_str},null,null,null);
    if(cursor.moveToNext()){
    String pass_query=cursor.getString(cursor.getColumnIndex("password"));
    if(pass_str.equals(pass_query)){
    //提示框
    Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();
    Intent intent=new Intent(MainActivity.this,Work.class);
    intent.putExtra("muser",user_str);
    startActivity(intent);
    }else{
    Toast.makeText(this,"账号或密码错误",Toast.LENGTH_SHORT).show();
    }
    }else{
    Toast.makeText(this,"该用户不存在",Toast.LENGTH_SHORT).show();
    }
    }
    break;
    //注册,跳转页面
    case R.id.create:
    Intent intent=new Intent(MainActivity.this,CreateUser.class);
    startActivity(intent);
    break;
    default:
    break;
    }
    }
    }

    Android中的Java代码大体上跟构建web网页的思想差不多,需要注意的是从界面输入框,按钮等组件抓取值的问题。登录思路就是抓取账号输入框中输入的数据,随后遍历user表,不存在账号即提示错误信息。注册则是跳转页面,其功能之后讨论。

    activity_main.xml(界面)

    <?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:orientation="vertical"
        android:layout_marginTop="150dp"
        android:layout_marginBottom="50dp"
        >
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="记账本"
            android:textSize="40dp" />
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="80dp"
            android:layout_marginBottom="40dp"
            android:layout_gravity="center_horizontal">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="账号:"
                android:textSize="30dp"></TextView>
            <EditText
                android:id="@+id/user"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="请输入账号"></EditText>
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_gravity="center_horizontal">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="密码:"
                android:textSize="30dp"
                ></TextView>
            <EditText
                android:id="@+id/pass"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="请输入密码"
                ></EditText>
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="60dp"
            android:layout_marginBottom="30dp"
            android:layout_gravity="center_horizontal">
    
            <Button
                android:id="@+id/login"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="20dp"
                android:text="登录"
                ></Button>
    
            <Button
                android:id="@+id/create"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:text="注册"
                ></Button>
    
        </LinearLayout>
    
    </LinearLayout>

    这是起始界面的xml,全部都是用线性布局完成,使用控件时对位置,字体进行了微调。

    三,注册界面:

    CreateUser.java(后台)

     1 package com.example.vacation;
     2 
     3 import androidx.appcompat.app.AppCompatActivity;
     4 
     5 import android.content.ContentResolver;
     6 import android.content.Intent;
     7 import android.database.CharArrayBuffer;
     8 import android.database.ContentObserver;
     9 import android.database.Cursor;
    10 import android.database.DataSetObserver;
    11 import android.database.sqlite.SQLiteDatabase;
    12 import android.net.Uri;
    13 import android.os.Bundle;
    14 import android.view.View;
    15 import android.widget.Button;
    16 import android.widget.EditText;
    17 import android.widget.Toast;
    18 
    19 public class CreateUser extends AppCompatActivity implements View.OnClickListener {
    20 
    21     private Button ccreate;
    22     private EditText cuser;
    23     private EditText cpass;
    24     private SQLiteDatabase sqLiteDatabase;
    25     private DBUser dbuser;
    26 
    27     private String username_str="";
    28     private String password_str="";
    29 
    30 
    31     @Override
    32     protected void onCreate(Bundle savedInstanceState) {
    33         super.onCreate(savedInstanceState);
    34         setContentView(R.layout.activity_create_user);
    35 
    36         ccreate=(Button)findViewById(R.id.ccreate);
    37         cuser=(EditText)findViewById(R.id.cuser);
    38         cpass=(EditText)findViewById(R.id.cpass);
    39         dbuser = new DBUser(CreateUser.this,"user_db",null,1);
    40         sqLiteDatabase=dbuser.getWritableDatabase();
    41 
    42         ccreate.setOnClickListener(new View.OnClickListener() {
    43             @Override
    44             public void onClick(View v) {
    45                 username_str=cuser.getText().toString();
    46                 password_str=cpass.getText().toString();
    47                 
    48                 //判定账号是否已注册
    49                 Cursor cursor=sqLiteDatabase.query("user",new String[]{"username"},"username=?",new String[]{username_str},null,null,null);
    50                 if(cursor.getCount()!=0){
    51                     Toast.makeText(CreateUser.this,"该用户已注册",Toast.LENGTH_SHORT).show();
    52                 }else {
    53                     dbuser.addData(sqLiteDatabase, username_str, password_str);
    54                     Toast.makeText(CreateUser.this,"注册成功",Toast.LENGTH_SHORT).show();
    55                     Intent intent=new Intent(CreateUser.this,MainActivity.class);
    56                     startActivity(intent);
    57                     finish();
    58                 }
    59             }
    60         });
    61     }
    62 
    63     @Override
    64     public void onClick(View v) {
    65 
    66     }
    67 }

    注册的Java代码很简答,按钮也只有一个,所以不用像起始界面那样使用switch,数据库操作与检查登录无异。一样是遍历数据库,若存在证明账号存在,提示错误信息。

    activity_create_user.xml(界面)

    <?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:orientation="vertical"
        android:layout_marginTop="100dp"
        >
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="注册账号"
            android:textSize="40dp" />
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="80dp"
            android:layout_marginBottom="40dp"
            android:layout_gravity="center_horizontal">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="账号:"
                android:textSize="30dp"></TextView>
            <EditText
                android:id="@+id/cuser"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="请输入账号"></EditText>
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_gravity="center_horizontal">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="密码:"
                android:textSize="30dp"
                ></TextView>
            <EditText
                android:id="@+id/cpass"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="请输入密码"
                ></EditText>
    
        </LinearLayout>
    
            <Button
                android:id="@+id/ccreate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="30dp"
                android:text="注册"
                ></Button>
    
    </LinearLayout>

    注册界面做的比较简陋,只注册账号与密码即可,个人信息的录入可以考虑加入到菜单,不过这是之后的考量了。在这段xml代码中我使用了几个线性布局的嵌套,主布局采用的是垂直分布,子布局均采用水平分布。在位置规划上使用layout_marginTop等语法根据数值进行微调。

    四,添加数据界面:

    AddMes.java(后台)

     1 package com.example.vacation;
     2 
     3 import androidx.appcompat.app.AppCompatActivity;
     4 
     5 import android.content.ContentValues;
     6 import android.content.Intent;
     7 import android.database.sqlite.SQLiteDatabase;
     8 import android.os.Bundle;
     9 import android.view.View;
    10 import android.view.View.OnClickListener;
    11 import android.widget.Button;
    12 import android.widget.EditText;
    13 import android.widget.RadioButton;
    14 import android.widget.RadioGroup;
    15 import android.widget.Toast;
    16 
    17 //使用了RadioGroup
    18 public class AddMes extends AppCompatActivity implements View.OnClickListener,RadioGroup.OnCheckedChangeListener{
    19     private EditText amuser;
    20     private EditText amname;
    21     private EditText amoney;
    22     private EditText amdate;
    23     private RadioGroup aminout;
    24     private RadioButton amin;
    25     private RadioButton amout;
    26     private Button amcreate;
    27     private DBUser dbuser;
    28     private SQLiteDatabase sqLiteDatabase;
    29 
    30     //loginname存储账号信息,将其提前填在账号框里,可修改
    31     private String user_str="";
    32     private String name_str="";
    33     private String money_str="";
    34     private String date_str="";
    35     private String inout_str="";
    36     private static String loginname;
    37 
    38     @Override
    39     protected void onCreate(Bundle savedInstanceState) {
    40         super.onCreate(savedInstanceState);
    41         setContentView(R.layout.activity_add_mes);
    42 
    43         amuser=(EditText)findViewById(R.id.amuser);
    44         amname=(EditText)findViewById(R.id.amname);
    45         amoney=(EditText)findViewById(R.id.amoney);
    46         amdate=(EditText)findViewById(R.id.amdate);
    47         aminout=(RadioGroup)findViewById(R.id.aminout);
    48         amin=(RadioButton)findViewById(R.id.amin);
    49         amout=(RadioButton)findViewById(R.id.amout);
    50         amcreate=(Button)findViewById(R.id.amcreate);
    51 
    52         aminout.setOnCheckedChangeListener(this);
    53         amcreate.setOnClickListener(this);
    54 
    55         dbuser=new DBUser(AddMes.this,"user_db",null,1);
    56         sqLiteDatabase=dbuser.getWritableDatabase();
    57 
    58         Intent intentdata=getIntent();
    59         String CatchUser=intentdata.getStringExtra("auser");
    60         if(CatchUser!=null){
    61             loginname=CatchUser;
    62             amuser.setText(loginname);
    63         }else{
    64             amuser.setText(loginname);
    65         }
    66 
    67     }
    68 
    69     //向数据表message添加数据
    70     @Override
    71     public void onClick(View view){
    72         user_str=amuser.getText().toString();
    73         name_str=amname.getText().toString();
    74         money_str=amoney.getText().toString();
    75         date_str=amdate.getText().toString();
    76 
    77         ContentValues values=new ContentValues();
    78         values.put("musername",user_str);
    79         values.put("name",name_str);
    80         values.put("money",money_str);
    81         values.put("date",date_str);
    82         values.put("inout",inout_str);
    83         sqLiteDatabase.insert("message",null,values);
    84 
    85         Intent intent=new Intent(AddMes.this,Work.class);
    86         intent.putExtra("judgename",user_str);
    87         startActivity(intent);
    88         finish();
    89     }
    90 
    91     //RadioButton选择并传值
    92     @Override
    93     public void onCheckedChanged(RadioGroup radioGroup,int checkedID){
    94         RadioButton rb=(RadioButton)findViewById(checkedID);
    95         inout_str=rb.getText().toString();
    96     }
    97 }

    添加数据界面多了一些东西,其中在设定是收入还是支出上,我选择用RadioButton(单选框)来实现,因此在获取RadioButton值的时候需要对主函数进行微调。这里注意账号的信息是从起始界面开始通过intent传值过来的,它先是传到查询界面(工作主界面),又从那里intent传到该界面。一开始写这段的时候曾出现第一次添加数据时账号已事先录入,第二次添加则为空的情况。可能是因为多次页面跳转导致第二次intent传过来的是空值,因此我多设置了static String变量将其保存。

    activity_add_mes.xml(界面)

    <?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:orientation="vertical"
        >
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="录入信息"
            android:textSize="40dp" />
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="60dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="账号:"
                android:textSize="30dp"></TextView>
            <EditText
                android:id="@+id/amuser"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="请输入账号"></EditText>
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginLeft="60dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="名称:"
                android:textSize="30dp"
                ></TextView>
            <EditText
                android:id="@+id/amname"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="请输入商品名称"
                ></EditText>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginLeft="60dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="金额:"
                android:textSize="30dp"
                ></TextView>
            <EditText
                android:id="@+id/amoney"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="请输入金额"
                ></EditText>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginLeft="60dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="日期:"
                android:textSize="30dp"
                ></TextView>
            <EditText
                android:id="@+id/amdate"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="例:20200216(年月日)"
                ></EditText>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginLeft="60dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="选项:"
                android:textSize="30dp"></TextView>
    
            <RadioGroup
                android:id="@+id/aminout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <RadioButton
                    android:id="@+id/amin"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="收入"></RadioButton>
                <RadioButton
                    android:id="@+id/amout"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="30dp"
                    android:text="支出"></RadioButton>
            </RadioGroup>
    
        </LinearLayout>
    
        <Button
            android:id="@+id/amcreate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="30dp"
            android:text="添加"
            ></Button>
    
    </LinearLayout>

    这里要注意RadioButton的使用,它需要嵌套在RadioGroup中,复选框使用方法同理。这里还使用提示信息进行规定,需要注意的是日期的录入格式,当初设想的是这么录入在查找时比较好找一些,但影响观看,这里也是完善时需要改进的点。

    五,查询界面(工作主界面,其他功能有待完善):

    Work.java(后台)

     1 package com.example.vacation;
     2 
     3 import androidx.appcompat.app.AppCompatActivity;
     4 
     5 import android.content.Intent;
     6 import android.database.Cursor;
     7 import android.database.sqlite.SQLiteDatabase;
     8 import android.os.Bundle;
     9 import android.view.View;
    10 import android.widget.Button;
    11 import android.widget.EditText;
    12 import android.widget.TextView;
    13 
    14 public class Work extends AppCompatActivity implements View.OnClickListener {
    15     private Button addmes;
    16     private Button seemes;
    17     private TextView result;
    18     private EditText searchuser;
    19     private DBUser dbuser;
    20     private SQLiteDatabase sqLiteDatabase;
    21 
    22     @Override
    23     protected void onCreate(Bundle savedInstanceState) {
    24         super.onCreate(savedInstanceState);
    25         setContentView(R.layout.activity_work);
    26 
    27         addmes=(Button)findViewById(R.id.addmes);
    28         seemes=(Button)findViewById(R.id.seemes);
    29         result=(TextView)findViewById(R.id.result);
    30         searchuser=(EditText)findViewById(R.id.searchuser);
    31         addmes.setOnClickListener(this);
    32         seemes.setOnClickListener(this);
    33 
    34         dbuser=new DBUser(Work.this,"user_db",null,1);
    35         sqLiteDatabase=dbuser.getWritableDatabase();
    36     }
    37 
    38     @Override
    39     public void onClick(View v) {
    40         Intent intentdata=getIntent();
    41         String catchuser=intentdata.getStringExtra("muser");
    42         switch ((v.getId())){
    43             //跳转到添加数据界面
    44             case R.id.addmes:
    45                 Intent intent=new Intent(Work.this,AddMes.class);
    46                 intent.putExtra("auser",catchuser);
    47                 startActivity(intent);
    48                 break;
    49             case R.id.seemes:
    50                 //遍历输出
    51                 String judge=searchuser.getText().toString();
    52                 String sql="select * from message where musername=?";
    53                 Cursor cursor=sqLiteDatabase.rawQuery(sql,new String[]{judge});
    54                 StringBuilder sbm = new StringBuilder();
    55                 while(cursor.moveToNext()){
    56                     String name="名称:"+cursor.getString(cursor.getColumnIndex("name"));
    57                     String money="金额:"+cursor.getString(cursor.getColumnIndex("money"));
    58                     String date="日期:"+cursor.getString(cursor.getColumnIndex("date"));
    59                     String inout=cursor.getString(cursor.getColumnIndex("inout"));
    60                     sbm.append(name).append(" ");
    61                     sbm.append(money).append(" ");
    62                     sbm.append(date).append(" ");
    63                     sbm.append(inout).append("\n");
    64                 }
    65                 result.setText(sbm.toString());
    66                 break;
    67                 default:
    68                     break;
    69         }
    70     }
    71 
    72 }

    这里注意遍历数据库并输出即可。一开始在使用intent传账号值的时候我的设想是传到这里直接抓来用,再传到添加数据界面继续用,结果在添加数据之后回到此界面时报错。经过一段时间的查找终于发现问题,是因为从添加界面回来之后原intent值已经没了,变成null了,解决方法就是从添加数据界面重新抓取,使用intent传回。此外,最开始完成的时候,这个界面的查询功能默认按照添加时录入的账号进行查找(intent传回来的值),很麻烦,所以临时在界面上添加了EditText控件用于输入查询账号。

    activity_work.xml(界面)

    <?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:orientation="vertical"
        >
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="50dp"
            >
    
            <Button
                android:id="@+id/addmes"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="20dp"
                android:text="添加数据"
                ></Button>
    
            <Button
                android:id="@+id/seemes"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:text="查看数据"
                ></Button>
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="25dp"
            android:layout_marginLeft="60dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="查询账号:"
                android:textSize="15dp"
                ></TextView>
            <EditText
                android:id="@+id/searchuser"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="请输入要查询的账号"
                ></EditText>
    
        </LinearLayout>
        <TextView
            android:id="@+id/result"
            android:layout_width="match_parent"
            android:layout_height="500dp"
            android:layout_marginVertical="30dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:hint="查询内容为空"
            android:textColorHint="#CCCCCC"
            android:textColor="#6666FF"
            android:textSize="15dp"/>
    
    </LinearLayout>

    显示界面调整了一下字体颜色,其他地方的构造方式与上述xml文件相同。

    总结

    虽然这个APP做的十分简陋,是个未完成的作品,但这是我第一次独立制作APP,一开始因为接触新的知识感到头疼,学习Android的时候翻阅了大量的博客,也尝试去github找找攻略,最后几天尝试找了些网课,最后交上这么一个作品。相比于其他同学的作品我的可能是最简单的一个,这也是因为假期我并没有全身心在学习,整体上十分放松。这个APP是我对假期的一个交代,也是新的开始,我需要斩掉自己的惰性,在新学期努力学习。

  • 相关阅读:
    格式控制符
    sort快速排序法
    堆积排序
    oracle常用命令
    C#中int和System.Int32理解总结
    IIS 7.5中的配置
    WPF循序渐进:XAML入门 .
    怎样找到excel两列之间同行相同的数据
    pl/sql functions and cbo costing
    Oracle 学习纲要
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/12319248.html
Copyright © 2020-2023  润新知