这里介绍两个例子
1.取得手机屏幕分辨率的大小
这个程序非常简单,其中只需要一个关键的类--DisplayMetrics,这个类对象记录了一些常用的信息,包含了显示信息,大小,维度,字体等
注意:取得的分辨率的宽和高都是整形
实例的代码如下:
public class EX03_05 extends Activity { private TextView mTextView01; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* 必须引用 android.util.DisplayMetrics */ DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); String strOpt = "手机屏幕分辨率为:" + dm.widthPixels + " × " + dm.heightPixels; mTextView01 = (TextView) findViewById(R.id.myTextView01); mTextView01.setText(strOpt); } }
2.style的使用
通常,我们只需要在布局文件(xml)中定义text的颜色和大小,但是如果需要定义的同类对象太多,我们常常会使用style来做定义,这里需要我们事先把style.xml文件先定义在res/values/目录下,之后再做需要的填充
下面的这个实例用两个TextView来演示怎样引用style文件
2.1 style.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="DavidStyleText1"> <item name="android:textSize">18sp</item> <item name="android:textColor">#EC9237</item> </style> <style name="DavidStyleText2"> <item name="android:textSize">14sp</item> <item name="android:textColor">#FF7F7C</item> <item name="android:fromAlpha">0.0</item> <item name="android:toAlpha">0.0</item> </style> </resources>
2.2 layout布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="@drawable/white" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 套用樣式1的TextView --> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical|center_horizontal" android:text="@string/str_text_view1" /> <!-- 套用樣式2的TextView --> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical|center_horizontal" android:text="@string/str_text_view2" /> </LinearLayout>
首先,由于Activity是Android四大组件之一,如果一个应用程序中包含不止一个Activity,则需要在AndroidManifest.xml文件中进行声明。
例如进行如下的声明(程序中包含两个Activity):
<activity android:name=".EX03_10" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 另一个Activity的声明 --> </activity> <activity android:name="EX03_10_1"></activity>
下面以两个例子说明不同的Activity之间传递数据的方法。
1.使用Bundle对象传递数据
传递数据使用的方法如下:
/*new一个Intent对象,并指定class*/ final Intent intent = new Intent(); intent.setClass(EX03_10.this,EX03_10_1.class); /*new一个Bundle对象,并将要传递的数据传入*/ Bundle bundle = new Bundle(); bundle.putDouble("height",height); bundle.putString("sex",sex); /*将Bundle对象assign给Intent*/ intent.putExtras(bundle); /*调用Activity EX03_10_1*/ startActivity(intent);
接收数据使用的方法如下:
/* 取得Intent中的Bundle对象 */ Bundle bunde = this.getIntent().getExtras(); /* 取得Bundle对象中的数据 */ String sex = bunde.getString("sex"); double height = bunde.getDouble("height");
下面给出具体的实现代码:
1.1 主程序代码(第一个Activity)
public class EX03_10 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 载入main.xml Layout */ setContentView(R.layout.main); /* 以findViewById()取得Button对象,并加入onClickListener */ Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { /*取得输入的身高*/ EditText et = (EditText) findViewById(R.id.height); double height=Double.parseDouble(et.getText().toString()); /*取得选择的性别*/ String sex=""; RadioButton rb1 = (RadioButton) findViewById(R.id.sex1); if(rb1.isChecked()) { sex="M"; } else{ sex="F"; } /*new一个Intent对象,并指定class*/ final Intent intent = new Intent(); intent.setClass(EX03_10.this,EX03_10_1.class); /*new一个Bundle对象,并将要传递的数据传入*/ Bundle bundle = new Bundle(); bundle.putDouble("height",height); bundle.putString("sex",sex); /*将Bundle对象assign给Intent*/ intent.putExtras(bundle); /*调用Activity EX03_10_1*/ startActivity(intent); } }); } }
1.2 第二个Activity的实现代码:
public class EX03_10_1 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 加载main.xml Layout */ setContentView(R.layout.myalyout); /* 取得Intent中的Bundle对象 */ Bundle bunde = this.getIntent().getExtras(); /* 取得Bundle对象中的数据 */ String sex = bunde.getString("sex"); double height = bunde.getDouble("height"); /*判断性别 */ String sexText=""; if(sex.equals("M")){ sexText="男性"; }else{ sexText="女性"; } /* 取得标准体重 */ String weight=this.getWeight(sex, height); /* 设定输出文字 */ TextView tv1=(TextView) findViewById(R.id.text1); tv1.setText("你是一位"+sexText+"\n你的身高是"+height+ "公分\n你的标准体重是"+weight+"公斤"); } /* 四舍五入的method */ private String format(double num) { NumberFormat formatter = new DecimalFormat("0.00"); String s=formatter.format(num); return s; } /* 以findViewById()取得Button对象,onClickListener */ private String getWeight(String sex,double height) { String weight=""; if(sex.equals("M")) { weight=format((height-80)*0.7); }else { weight=format((height-70)*0.6); } return weight; } }
2.返回数据到前一个Activity
这里需要使用startActivityForResult方法
传递数据的方法与上一个例子是类似的,实现的代码如下:
/*new一个Intent对象,并指定class*/ Intent intent = new Intent(); intent.setClass(EX03_11.this,EX03_11_1.class); /*new一个Bundle对象,并将要传递的数据传入*/ Bundle bundle = new Bundle(); bundle.putDouble("height",height); bundle.putString("sex",sex); /*将Bundle对象assign给Intent*/ intent.putExtras(bundle); /*调用Activity EX03_11_1*/ startActivityForResult(intent,0);
注意:这里需要实现一个重载的方法:
protected void onActivityResult (int requestCode, int resultCode, Intent data)
在另一个Activity中获取数据的代码与上一个例子是相同的,实现如下:
/* 取得Intent中的Bundle对象 */ intent=this.getIntent(); bunde = intent.getExtras(); /* 取得Bundle对象中的数据 */ String sex = bunde.getString("sex"); double height = bunde.getDouble("height");
下面给出这个例子的具体实现代码:
2.1 主程序的实现:
public class EX03_11 extends Activity { private EditText et; private RadioButton rb1; private RadioButton rb2; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 加载main.xml Layout */ setContentView(R.layout.main); /* 以findViewById()取得Button对象,并加入onClickListener */ Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { /*取得输入的身高*/ et = (EditText) findViewById(R.id.height); double height=Double.parseDouble(et.getText().toString()); /*取得选择的性别*/ String sex=""; rb1 = (RadioButton) findViewById(R.id.sex1); rb2 = (RadioButton) findViewById(R.id.sex2); if(rb1.isChecked()) { sex="M"; }else{ sex="F"; } /*new一个Intent对象,并指定class*/ Intent intent = new Intent(); intent.setClass(EX03_11.this,EX03_11_1.class); /*new一个Bundle对象,并将要传递的数据传入*/ Bundle bundle = new Bundle(); bundle.putDouble("height",height); bundle.putString("sex",sex); /*将Bundle对象assign给Intent*/ intent.putExtras(bundle); /*调用Activity EX03_11_1*/ startActivityForResult(intent,0); } }); } /* 重写 onActivityResult()*/ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case RESULT_OK: /* 取得数据,并显示于画面上 */ Bundle bunde = data.getExtras(); String sex = bunde.getString("sex"); double height = bunde.getDouble("height"); et.setText(""+height); if(sex.equals("M")) { rb1.setChecked(true); } else{ rb2.setChecked(true); } break; default: break; } } }
2.2 另一个Activity的实现:
public class EX03_11_1 extends Activity { Bundle bunde; Intent intent; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 载入mylayout.xml Layout */ setContentView(R.layout.myalyout); /* 取得Intent中的Bundle对象 */ intent=this.getIntent(); bunde = intent.getExtras(); /* 取得Bundle对象中的数据 */ String sex = bunde.getString("sex"); double height = bunde.getDouble("height"); /* 判断性别 */ String sexText=""; if(sex.equals("M")) { sexText="男性"; } else{ sexText="女性"; } /* 取得标准体重 */ String weight=this.getWeight(sex, height); /* 设定输出文字 */ TextView tv1=(TextView) findViewById(R.id.text1); tv1.setText("你是一位"+sexText+"\n你的身高是"+height+ "公分\n你的标准体重是"+weight+"公斤"); /* 以findViewById()取得Button对象,并加入onClickListener */ Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { /* 回传result回上一个activity */ EX03_11_1.this.setResult(RESULT_OK, intent); /* 关闭activity */ EX03_11_1.this.finish(); } }); } /* 四舍五入的method */ private String format(double num) { NumberFormat formatter = new DecimalFormat("0.00"); String s=formatter.format(num); return s; } /* 以findViewById()取得Button对象,并加入onClickListener */ private String getWeight(String sex,double height) { String weight=""; if(sex.equals("M")) { weight=format((height-80)*0.7); } else{ weight=format((height-70)*0.6); } return weight; } }
目前GitHub非常的火,无论是国内的还是国外的现在都在使用。抽空研究了一下这个东西的使用方法,并总结出来,虽然有一点晚,但是我觉得还是有需要了解和学习的地方。好了,进入主题,一步一步的去介绍,当然最容易的学习方法,当然是跟着github网站提供的步骤去学习。这里我也是针对这个内容来进行总结。
1、github的网址: https://github.com
2、选择login,输入用户名,密码,登陆。登陆之后,就会进入到主页,这里包含了四个基本的应用:
- Set Up Git
- Create A Repository
- Fork a Repository
- Be Social
git config --global user.name "Your Name Here"# Sets the default name for git to use when you commit
git config --global user.email "your_email@youremail.com"# Sets the default email for git to use when you commit2、补充说明
- git的版本查询 git --version
- git的路径查询 which git
- 在网页中查收到 Create repository的网页绿色按钮后,输入必要的项目名称后,点击,即可完成创建repository的过程。需要记住的是项目名称为hello.git
- 创建成功后,就涉及如何在本地创建一个客户端的库,以保证与服务断的同步。客户端的库的创建过程如下:
mkdir ~/Hello-World# Creates a directory for your project called "Hello-World" in your user directory cd ~/Hello-World# Changes the current working directory to your newly created directory git init# Sets up the necessary Git files # Initialized empty Git repository in /Users/you/Hello-World/.git/ touch README# Creates a file called "README" in your Hello-World directory
git add README# Stages your README file, adding it to the list of files to be committed git commit -m 'first commit'# Commits your files, adding the message "first commit"
git remote add origin https://github.com/username/Hello-World.git# Creates a remote named "origin" pointing at your GitHub repo git push origin master# Sends your commits in the "master" branch to GitHub
- 上述过程当中,涉及到几个比较关键的点,也是我在研究的过程中花了一些时间才弄清楚的地方。下面一一讲解
- git init 实际上是在一个空目录,或者空项目中,建立一个初步的git扩展。
- git add README 这个意思,是上传README一个文件,当文件比较多的情况下,需要上传目录当中的所有文件,此时应该的写法为 git ad . 记住要有个点。
- git commit -m '注释说明‘ 这个其实就是提交到本地库当中。
- git remote add origin https://github.com/username/Hello-world.git 他的含义其实是将本地的库 origin,上传到服务器的Hello-world.git当中。
- git push -u origin master 意思就是上传,这个地方才是真正的上传
- fork的理解,其实fork的含义是通知一个git项目的主人,我要将你的代码fork到我的空间去,然后我就可以进行修改了,这样有利于其他未授权的人对代码进行贡献。还有,fork之后,就使用 git clone https://github.com/username/Hello-world.git
- 修改之后,需要提交到github上,此时使用的方法位:git remote add upstream https://github.com/octocat/hello-world.git
- git fetch ustream 获取未改变的内容。
- 这里有一个概念,就是 git fetch,和git pull,其实都是从服务器获取代码,相当于update,但是fetch是不自动覆盖,而pull就会自动覆盖掉。
- 此外,还有一个概念,就是当clone之后,origin指向的其实是你自己的repo,而主人的变更是需要通过如下,获得具体的配置跟踪。
cd Spoon-Knife# Changes the active directory in the prompt to the newly cloned "Spoon-Knife" directory git remote add upstream https://github.com/octocat/Spoon-Knife.git# Assigns the original repo to a remote called "upstream" git fetch upstream# Pulls in changes not present in your local repository, without modifying your files我的理解,其实就是分支的问题。所谓分支,其实目的是当你需要同时解决两个问题的时候,而这两个问题为了便于后续在合并,因此会创建一个分支,然后在做meiger,将分支合并,从而解决这样的同时存在的问题。
git push origin master# Pushes commits to your remote repo stored on GitHub
git fetch upstream# Fetches any new changes from the original repo git merge upstream/master# Merges any changes fetched into your working files
git branch mybranch# Creates a new branch called "mybranch" git checkout mybranch# Makes "mybranch" the active branch
git checkout master# Makes "master" the active branch git checkout mybranch# Makes "mybranch" the active branch两个branch做最后的合并
git checkout master# Makes "master" the active branch git merge mybranch# Merges the commits from "mybranch" into "master" git branch -d mybranch# Deletes the "mybranch" branch
补充一个关于git的ssh远程访问的配置方法:
首先在本地创建ssh key;
$ ssh-keygen -t rsa -C "your_email@youremail.com"
后面的[email]your_email@youremail.com[/email]改为你的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。
回到github,进入Account Settings,左边选择SSH Keys,Add SSH Key,title随便填,粘贴key。为了验证是否成功,在git bash下输入:
$ ssh -T [email]git@github.com[/email]
如果是第一次的会提示是否continue,输入yes就会看到:You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。
接下来我们要做的就是把本地仓库传到github上去,在此之前还需要设置username和email,因为github每次commit都会记录他们。
$ git config --global user.name "your name"
$ git config --global user.email "your_email@youremail.com"
进入要上传的仓库,右键git bash,添加远程地址: