创建一个新程序:

  1. 应用名: Tic Tac Toe
  2. 公司域名: example.org
  3. 尺寸: Phone and Tablet
  4. 最低SDK API16: Android 4.1
  5. 添加活动: Empty Activity
  6. 活动名: MainActivity
  7. 布局名: activity_main
  8. 标题: UT3

1  使用XML进行设计

1.1创建主屏幕——编辑activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:clipChildren="false"
  7. tools:context=".TicTacToeActivity">
  8.  
  9. <fragment
  10. android:id="@+id/main_fragment"
  11. class="org.example.tictactoe.MainFragment"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_gravity="center"
  15. tools:layout="@layout/fragment_main" />
  16.  
  17. </FrameLayout>

以上标签的属性解释

  1. xmlns:android="http://schemas.android.com/apk/res/android":定义命名空间android,以便能够在后面使用包含android:的属性名
  2.  
  3. xmlns:tools="http://schemas.android.com/tools":定义命名空间tools
  4.  
  5. android:layout_width="match_parent":将视图设置为与父视图等宽。由于是顶级元素,就是与屏幕等宽。
  6.  
  7. android:layout_height="match_parent":同上,与父视图等高。每个视图都要设置宽度和高度。
  8.  
  9. android:clipChildren="false"
  10.  
  11. tools:context=".TicTacToeActivity" 指出该布局文件是供TicTacToeActivity类使用的。不同于其他属性,该属性是供可视化编辑器使用的,而不是在运行
    阶段使用的。
  12.  
  13. android:id="@+id/fragment_main":定义新资源标识符fragment_main,在代码或其他XML属性中使用。@+表示定义新内容,@表示引用已在其他地方定义过的内容。
  14.  
  15. class="org.example.tictactoe.MainFragment":让android知道该片段是MainFragment类的一个实例。换句话说,android在根据XML创建该片段时,将创建
    一个MainFragment实例。
  16.  
  17. android:layout_width="wrap_content":将片段设置为与其包含的内容等宽。
  18.  
  19. android:layout_height="wrap_content":将片段设置为与其包含的内容等高。
  20.  
  21. android:layout_gravity="center":将片段在其父视图中居中设置。还可设置为(topbottomleftrightcenterfilltop|right等)
  22.  
  23. tools:layout="@layout/fragment_main":引用另一个XML文件

1.2 创建主片段——编辑fragment_main.xml

要将4个元素排成一列,因此使用 LinearLayout布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:background="@drawable/menu_background"
  7. android:elevation="@dimen/elevation_high"
    android:orientation="vertical"
    android:padding="@dimen/menu_padding"
    tools:context=".TicTacToeActivity">
  1. <TextView
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:layout_marginBottom="@dimen/menu_space"
  5. android:text="@string/long_app_name"
  6. android:textAppearance="?android:textAppearanceLarge"
  7. android:textSize="@dimen/menu_text_size" />
  8. <Button
  9. android:id="@+id/continue_button"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_margin="@dimen/menu_button_margin"
  13. android:padding="@dimen/menu_button_padding"
  14. android:text="@string/continue_label"/>
  15. <Button
  16. android:id="@+id/new_button"
  17. android:layout_width="match_parent"
  18. android:layout_height="wrap_content"
  19. android:layout_gravity="center"
  20. android:layout_margin="@dimen/menu_button_margin"
  21. android:padding="@dimen/menu_button_padding"
  22. android:text="@string/new_game_label"/>
  23. <Button
  24. android:id="@+id/about_button"
  25. android:layout_width="match_parent"
  26. android:layout_height="wrap_content"
  27. android:layout_gravity="center"
  28. android:layout_margin="@dimen/menu_button_margin"
  29. android:padding="@dimen/menu_button_padding"
  30. android:text="@string/about_label"/>
  31. </LinearLayout>

以上标签的属性解释

  1. android:background="@drawable/menu_background":设置整个视图的背景。
  2.  
  3. android:elevation="@dimen/elevstion_high":令视图比画布稍高。
  4.  
  5. android:orientation="vertical":指定布局的方向。可能取值vertical(排成一列), horizontal(排成一行)
  6.  
  7. android:padding="@dimen/menu_padding":让android在视图内部留出少量的空间。若在外部留空间用margin
  8.  
  9. android:layout_marginBottom="@dimen/menu_space":在文本视图和按钮之间留出一定空间。
  10.  
  11. android:text="@string/long_app_name" 指定要显示的文本
  12.  
  13. android:textAppearance="?android:textAppearanceLarge":让文本字体比常规状态更大更粗。?表示引用了当前主题中定义的一个常量。
  14.  
  15. android:textSize="@dimen/menu_text_size" :用硬编码的方式指定了更大的字号。
  16.  
  17. android:layout_margin="@dimen/menu_button_margin":在按钮周围留出一些额外的空间。
  18.  
  19. android:padding="@dimen/menu_button_padding":在按钮内部留出一些额外的空间。
  20.  
  21. android:text="@string/continue_label":指定按钮要显示的文本。

2  编写代码

2.1 定义主活动——MainActivity.java

  1. package org.example.tictactoe;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5.  
  6. public class MainActivity extends Activity {
  7.  
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. }
  13. }

2.2 主活动使用的片段——MainFragment.java

先添加about框

  1. package org.example.tictactoe;
  2.  
  3. import android.os.Bundle;
  4. import android.app.AlertDialog;
  5. import android.app.Fragment;
  6. import android.content.DialogInterface;
  7. import android.content.Intent;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11.  
  12. public class MainFragment extends Fragment {
  13.  
  14. private AlertDialog mDialog;
  15.  
  16. @Override
  17. /**inflater 可用于将XML转换为视图
  18. * container 指向父容器的引用
  19. * savedInstanceState 保存的一些状态
  20. */
  21. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  22. Bundle savedInstanceState) {
  23. View rootView =
  24. inflater.inflate(R.layout.fragment_main, container, false);
  25. // Handle buttons here...
  26. // 获取视图中的按钮
  27. View aboutButton = rootView.findViewById(R.id.about_button);
  28.  
  29. //设置点击监视器
  30. aboutButton.setOnClickListener(new View.OnClickListener() {
  31. @Override
  32. public void onClick(View view) {
  33. // 传入当前活动
  34. AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
  35. // 设置对话框的标题和消息内容
  36. builder.setTitle(R.string.about_title);
  37. builder.setMessage(R.string.about_text);
  38. // 使得android不会再用户轻按对话框外面时关闭它
  39. builder.setCancelable(false);
  40. // 添加ok按钮
  41. builder.setPositiveButton(R.string.ok_label,
  42. new DialogInterface.OnClickListener() {
  43. @Override
  44. public void onClick(DialogInterface dialogInterface, int i) {
  45. // nothing
  46. }
  47. });
  48. // 负责将以上定义的对话框显示出来
  49. mDialog = builder.show();
  50. }
  51. });
  52.  
  53. return rootView;
  54. }
  55.  
  56. @Override
  57. // 如果启动另一应用,暂停包含该片段的活动
  58. public void onPause() {
  59. super.onPause();
  60.  
  61. // Get rid of the about dialog if it's still up
  62. if (mDialog != null)
  63. mDialog.dismiss();
  64. }
  65. }

3 定义资源

3.1 字符串

编辑res/values中的资源文件strngs.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="app_name">UT3</string>
  4. <string name="long_app_name">Ultimate Tic Tac Toe</string>
  5. <string name="action_settings">Settings</string>
  6. <string name="restart_label">Restart</string>
  7. <string name="main_menu_label">Main Menu</string>
  8. <string name="declare_winner">%1$s is the winner</string>
  9. <string name="continue_label">Continue</string>
  10. <string name="new_game_label">New Game</string>
  11. <string name="about_title">About Ultimate Tic Tac Toe</string>
  12. <string name="about_label">About</string>
  13. <string name="ok_label">OK</string>
  14. <string name="about_text">\
  15. This game is played just like
  16. regular Tic Tac Toe with one difference: to win a tile
  17. you have to win a smaller game of Tic Tac Toe inside that tile.\n\
  18. \n\
  19. A tie happens when there are no further moves.
  20. In the case of a tie in a small board, that will count as a win for
  21. both sides in the larger game.
  22. </string>
  23. </resources>

3.2 尺寸

编辑res/values中的文件dimens.xml

有两个版本的dimens.xml 文件:常规版本 和 使用w820dp标记的版本(用于宽屏设备的替代资源)

  1. <resources>
  2. <dimen name="elevation_high">8dp</dimen>
  3. <dimen name="stroke_width">1dp</dimen>
  4. <dimen name="corner_radius">4dp</dimen>
  5. <dimen name="menu_padding">10dp</dimen>
  6. <dimen name="menu_space">10dp</dimen>
  7. <dimen name="menu_text_size">32sp</dimen>
  8. <dimen name="menu_button_margin">4dp</dimen>
  9. <dimen name="menu_button_padding">10dp</dimen>
  10. </resources>

3.3 drawable

drawable指的是可在屏幕上绘制的任何图形对象。通常以png或jpg格式存储。在主屏幕上,应用的启动图标就是位图。

还可用XML来创建drawable。以下为主屏幕选项的背景的定义,放于res/drawable中。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:shape="rectangle">
  5. <stroke
  6. android:width="@dimen/stroke_width"
  7. android:color="@color/border_color"/>
  8. <solid android:color="@color/field_color"/>
  9. <corners android:radius="@dimen/corner_radius"/>
  10. </shape>

该文件定义了一个矩形形状,带圆角且用纯色填充。

使用XML的优点有:图形是基于矢量的,支持任意分辨率。

3.4 颜色

位于res/values下的colors.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <color name="field_color">#b5cee0</color>
  4. <color name="border_color">#7f7f7f</color>
  5. </resources>

在android中,颜色表示形式有两种: #RRGGBB 和  #AARRGGBB

RR、GG、BB分别指定红色、绿色、蓝色成分。AA为alpha组分, 表示颜色的透明度(0为完全透明,255为完全不透明)

3.5 样式和主题

打开AndroidManifest.xml 有如下行

  1. android:theme="@style/AppTheme"

按住Ctrl并单击AppTheme打开 styles.xml

修改

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <!-- Base application theme. -->
  4. <style name="AppTheme"
  5. parent="android:Theme.Holo.Light.NoActionBar.Fullscreen">
  6. <!-- Customize your theme here. -->
  7. </style>
  8. </resources>

接下来便可运行程序,运行结果如下图

摘自《Hello, Android》

Android井字游戏(一)首页制作的更多相关文章

  1. [Android]Android Debug key 的制作

    Android Debug key 的制作 背景 在Android App 开发过程中,我们经常会使用一些第三方的服务,但是很多的第三方服务都会要求我们提供包名,签名安装包,这时候,我们在日常调试时, ...

  2. Android - TabHost 与 Fragment 制作页面切换效果

    Android - TabHost 与 Fragment 制作页面切换效果 Android API 19 , API 23 三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义 ...

  3. Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)

    Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...

  4. Android—9.png的制作和去除黑线

    在开发中为了避免图片因为拉伸而失真我们会把背景图片设置为9.png图片,这篇博客介绍的是如何将图片设置为9.png的 1.首先在android—>sdk—>tools文件夹中打开下图所示文 ...

  5. Android - FragmentTabHost 与 Fragment 制作页面切换效果

    使用 FragmentTabHost 与 Fragment 制作页面切换效果 API 19 TabHost已经不建议使用了.用 FragmentTabHost 来代替TabHost.实际上 Fragm ...

  6. android .9图片的制作

    android .9PNG图片制作 在android开发的过程中,我们经常因为没有好的美工图片失真,这样使界面看起来要逊色很多,有的时候可能我们会想在drawable-hdpi,ldpi,mdpi下放 ...

  7. android 欢迎界面的制作

    再打开手机app的时候,最先映入我们眼帘的是一个覆盖手机全屏的欢迎界面,在这个界面显示出来的时候整个手机屏幕只会显示这一个界面,上面的标题栏,以及手机最顶端的状态栏都会消失,只有欢迎页面结束跳转到其他 ...

  8. 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题

    . 参考界面 : 携程app首页的广告栏, 使用ViewPager实现        自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...

  9. Android井字游戏(二)游戏界面

    图片与代码可见书配套官网下载 1 棋盘 1.1  先将游戏界面所需的图片放于“drawable-xxhdpi”文件夹中,后缀xxhdpi表示超高密度. 然后将图片封装到drawable中一个名为til ...

随机推荐

  1. JDBC Like子句实例

    在本教程将演示如何在JDBC应用程序中,从数据库表中查询数据记录, 在查询选择记录时使用Like子句添加其他条件. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式 ...

  2. 一个 JAR 文件可以用于

    用于发布和使用类库 作为应用程序和扩展的构建单元 作为组件.applet 或者插件程序的部署单位 用于打包与组件相关联的辅助资源 package Com.Table; import java.util ...

  3. (转) s-video vs. composite video vs. component video 几种视频格式详细说明和比较

    之前对着几种视频格式认识不是很清晰,所以看数据手册的时候,看的也是稀里糊涂的. 因为项目中需要用到cvbs做视频输入,在元器件选型上,看到tw2867的数据手册上,有这么一句话: The TW2867 ...

  4. AMQ5540, AMQ5541 and AMQ5542, application did not supply a user ID and password, 2035 MQRC_NOT_AUTHORIZED

    Technote (troubleshooting) Problem(Abstract) As an MQ administrator you create a new queue manager i ...

  5. crontab(定时任务操作)

    定时任务顾名思义就是在某一时间点自动进行任务操作.在做Pgsql的备份利用crontab进行定时操作, 使用起来比较方便.故分享具体的定时编辑命令:crontab -e 首先从crontab的文件分析 ...

  6. 使用 ML Pipeline 构建机器学习工作流

    http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice5/

  7. asp.net gridview实现正在加载效果方案一AJAX(转)

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...

  8. mac osx voice over的使用

    mac下的filezilla是一个很奇葩的应用,奇葩在哪?有一次我不知道怎么操作的,把filezilla搬到到了窗体顶部,结果被mac的菜单栏挡住了标题栏,然后再也无法移动窗体了,以下是我为了移动它做 ...

  9. jmeter jdbc request 如何运行多个sql

    database url:jdbc:mysql://127.0.0.1:3306/api?useUnicode=true&allowMultiQueries=true&characte ...

  10. Lua常用时间函数

    常用时间函数 print(os.time()) --当前系统时间值 print(os.date( print(os.date("*t"), os.time()) --当前系统时间表 ...