个人总结:
前段时间忙了一些与编程关系不大的事情,话说就算是未来的程序员的生活里也不应该只有编程吧~~
项目的代码已经基本上杀尽bug了(值得庆贺),然后上周开了坑爹的android选修课,完全不知道在说什么,前两天刚把环境弄好,捣鼓了两天这玩意...
表示必须要记录一些,否则以后会忘记,新手菜鸟,大神能指点一二更好不过,要是发现一些不对头的一定要严厉指正啊(话说好多东西我也是稀里糊涂的就用上了,报警了...)
控件方面:android:id="@+id/控件名"这个控件名就是为了之后调用方便,比如输入文本框的信息总要用到吧~~
android:layout_width="match_parent"宽度和父布局一样大,什么叫父布局呢,假设我画了一个框子,这个框子放了一个控件,那他的款就会充满这个空间。
android:layout_width="wrap_content":宽度和刚好包住里面的内容,比如里面就俩字,那么他就是两个字那么大。
android:text是显示一段内容
android:hint是当没有输入是默认的内容,比如请输入密码之类的(注意与text区别,不过这个敲一下就应该知道区别了)
android:maxLines 可以指定EditText最大行数为n行,当超过n行文本就会自动向上滚动(否则输入字太多,EditTex就会拉长,好难看)
布局方面:LinearLayout是线性布局,这里主要用到两种分配空间位置的方式。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation:horizontal">
<EditText
android:id="@+id/username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="请输入用户名"/>
<Button
android:id="@+id/send"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="发送"/>
</LinearLayout>
这里注意由于使用了layout_weight属性所以width是不起作用的,标准写法是将width设为0,而两个控件layout_weight是1:1所以他们将平分LinearLayout的那一行
当然如果想2:3就一个设为2,另一个设为3.
另一个看上去效果会更nice
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation:horizontal">
<EditText
android:id="@+id/username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="请输入用户名"/>
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送"/>
</LinearLayout>
还记得wrap_content吗,这样这个按钮就会占据发送这么大的字的空间,然后由于EditText的layout_weight是1所以占据剩下的空间,明显符合人类审美。
注册活动:所有的活动都必须要在src下的那个xml文件注册才能生效
findViewById()获取到布局文件中定义的元素(之前的+@/....是不是就用到了),
比如
Button button1= (Button)findViewById(R.id.login)
这里R.id必备,后面就是控件名,所以一定有一个button名为login,
而获得的这个实例名字是button1
username=(EditText)findViewById(R.id.editText1);
必然有EditText控件名为exitText1
而这个实例名为username
有了实例就可以干许多事,比如getText()可以获得用户输入的东西,当然要tostring(),所以判断登录的基本功能也可以出来了
Toast的方法有3个参数,第一个是一个Context比如可以填这个java文件的文件名,第二个是显示的内容(比如“登陆成功”),后面是显示时长,有两个内置常量可供选择。
最后就是实现用户登录的功能(注册还没写)
其实和js里onsubmit差不多,一旦相应的空间点击了,就获得它的实例,然后getText()判断合法性
MainActivity.java
package com.example.demo;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private EditText username,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Button button1= (Button)findViewById(R.id.login);//后面是在布局里的button
username=(EditText)findViewById(R.id.editText1);
password=(EditText)findViewById(R.id.editText2);
button1.setOnClickListener(new OnClickListener() {
@TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") @Override
public void onClick(View v) {
String user=username.getText().toString().trim();
String pas=password.getText().toString().trim();
if(user.isEmpty()) {username.setError("用户名不能为空");return;}
if(pas.isEmpty()) { password.setError("密码不能为空");return;}
if(!user.equals("fengsigaoju")) {username.setError("用户名不存在");return;}
if(!pas.equals("123456")) {password.setError("密码不正确");return;}
Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_SHORT).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.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:ignore="MergeRootFrame" >
<TableRow>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"
android:textSize="28sp"/><!-- 标准写法,此时宽度不由width控制 -->
<EditText
android:hint="请输入姓名"
android:id="@+id/editText1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
android:textSize="28sp"/>
<EditText
android:id="@+id/editText2"
android:hint="请输入密码"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="textPassword"/>
</TableRow>
<TableRow>
<Button
android:id="@+id/login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="登录"/>
<Button
android:id="@+id/register"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="注册"/>
</TableRow>
</TableLayout>