andriod创建用户界面(1)

一.UI知识Activity

将UI放在一个Activity上面,可以在Activity的onCreate方法中添加UI。

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
}

如果想得到UI上的控件,可以通过findViewById方法查找,例如:

ListView myListView = (ListView)findViewById(R.id.my_list_view);

二、UI布局

布局是对ViewGroup类的扩展,ViewGroup是对View的扩展。

下面是常见的布局类:

FrameLayout:通常是从左上角开始布局,不过如果多个子视图在同一个FrameLayout时,可能会出现重叠。

LinearLayout:按水平或垂直对齐每个子视图。有些像StackPanel。

RelativeLayout:定义子视图与其他视图或者屏幕边界的相对位置。

GridLayout:行列布局,在4.0引入。

2.1定义布局

实例LinearLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <fragment android:name="com.paad.todolist.NewItemFragment"
    android:id="@+id/NewItemFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
  />
  <fragment android:name="com.paad.todolist.ToDoListFragment"
    android:id="@+id/TodoListFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
  />
</LinearLayout>

match_parent:显示内容所需最小尺度,如字体的高度。

wrap_content:使其充满,

三.To-Do-List实例

主要代码

//找到ListView以便使用Adapter,

//找到TextView以便监听其事件。

ListView myListView = (ListView)findViewById(R.id.myListView);
    final EditText myEditText = (EditText)findViewById(R.id.myEditText);
   
    // Create the Array List of to do items
    final ArrayList<String> todoItems = new ArrayList<String>();
  
    // Create the Array Adapter to bind the array to the List View
    final ArrayAdapter<String> aa;
   //使用系统的list_item作为ArrayAdapter的item项
    aa = new ArrayAdapter<String>(this,
                                  android.R.layout.simple_list_item_1,
                                  todoItems);
  
    // Bind the Array Adapter to the List View
    myListView.setAdapter(aa);
 
    myEditText.setOnKeyListener(new View.OnKeyListener() {
      public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN)
          if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
              (keyCode == KeyEvent.KEYCODE_ENTER)) {
            todoItems.add(0, myEditText.getText().toString());
            aa.notifyDataSetChanged();
            myEditText.setText("");
            return true;
          }
        return false;
      }
    });

四、Fragment

其灵活的特点,可以让Fragment达到复用,多个Activity使用同一个Fragment。同时一个Activity可以有多个Fragment组成。

如果想在1.6以下版本,Activity必须继承FragmentActivity。

1.Fragment的生命周期

依赖于Activity。

下面给出所有事件

onAttach()方法获取Activity,onCreate()初始化Fragment,onCreateView()设置Fragment的布局。当Activity和Fragment创建完了激发onActivityCreated()方法。onStart()方法生命周期算是正式开始,像小孩子长成大人了一样。onResume()当活动生命周期时触发,比如结婚的时间触发。onPause()方法活动生命周期结束时,像结婚后要度蜜月一样 。onSaveInstanceState()在活动结束后要记录一下状态。以便回来继续处理。

onStop()方法,可见生命周期结束时调用。 onDestroyView()当Fragment的View分离时触发。onDestroy() 在生命周期结束时触发。onDetach是Fragment从Activity分离时发生。

2.FragmentManager

每个Activity都包括一个FragmentManager。用来访问Activity上面的Fragment,可以通过FragmentTransaction来添加替换。删除。

3、FragmentTransaction可通过FragmentManager.BeginTransaction()获取。

然后可以通过Transaction来将Fragment添加到Activity容器中。

xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <FrameLayout
    android:id="@+id/ui_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
  />
  <FrameLayout
    android:id="@+id/details_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="3"
  />
</LinearLayout>

java代码:

public class MyFragmentActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

// Inflate the layout containing the Fragment containers
    setContentView(R.layout.fragment_container_layout);
   
    FragmentManager fm = getFragmentManager();

// Check to see if the Fragment back stack has been populated
    // If not, create and populate the layout.
    DetailsFragment detailsFragment =
      (DetailsFragment)fm.findFragmentById(R.id.details_container);
   
    if (detailsFragment == null) {
       FragmentTransaction ft = fm.beginTransaction();
       ft.add(R.id.details_container, new DetailsFragment());
       ft.add(R.id.ui_container, new MyListFragment());
       ft.commit();
     }
  }
}

注意以上划红线的部分是先在Activity中添加两个View——FrameLayout。后面通过代码把Fragment放入到View中的。

4、查找Fragment

FragmentManager manager=getFragmentManager();
manager.findFragmentById(id);通常在有UI视图的情况适用
manager.findFragmentByTag(string);,在没哟UI视图的情况适用。

通常是把Fragment添加后有个id,然后才可以通过findFragmentById。
manager.beginTransaction().add(fragment, tag);

通常和后台Fragment使用。

5.添加到BackStack,当按back键时。会回滚操作。

6.设置动画

manager.beginTransaction().setCustomAnimations(enter, exit)();

7.Fragment和Activity之间的接口

可以通过Fragment的onAttach()来获得Activity的引用。也可以getActivity() 来获取Activity。

通常获得Activity是为了让Fragment属性变化时,来调用Activity的一些方法。所以可以在Fragment中定义指定的接口,然后让Activity来调用接口即可。

ListFragment的例子:

public class ToDoListFragment extends ListFragment {
  
}

FragmentManager fm = getFragmentManager();
ToDoListFragment todoListFragment =
  (ToDoListFragment)fm.findFragmentById(R.id.TodoListFragment);

// Create the array list of to do items
todoItems = new ArrayList<String>();
 
// Create the array adapter to bind the array to the listview
aa = new ArrayAdapter<String>(this,
                              android.R.layout.simple_list_item_1,
                              todoItems);
 
// Bind the array adapter to the listview.
todoListFragment.setListAdapter(aa);

andriod创建用户界面(1)

时间: 2024-10-13 01:31:18

andriod创建用户界面(1)的相关文章

如何创建用户界面?

Android中的视图和布局的定义是什么?区别是什么? 在Android系统中有哪些元素用于创建UI?如何使用布局.Fragment和视图来为Activity创建UI? Android SDK关于UI的介绍,可以参考:https://developer.android.com/guide/topics/ui/index.html Android UI的每一个独立元素都是使用源于ViewGroup的各种布局管理器布置到屏幕上的.也就是将布局中的控件填充到布局填充器,以展示布局界面. 什么是视图?

Python django框架笔记(三):django工作方式简单说明和创建用户界面

(一)  说明 简单说明下django的工作方式,并举2个例子. (二)  Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和static目录(存放图片JS.css等) (三)   实现一个完整的用户界面 #假设已经创建好了项目和应用.下面URLconf和视图函数没什么先后关系,根据自己喜好,你可以先写视图函数,也可以先定义URLconf. 有下面几个步骤 (1)   创建模型 (2)   定义项目的URLconf(mysi

Andriod - 创建自定义控件

控件和布局的继承结构: 可以看到,我们所用的所有控件都是直接或间接继承自 View的,所用的所有布局都是直接或间接继承自 ViewGroup 的.View 是 Android 中一种最基本的 UI 组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是在 View的基础之上又添加了各自特有的功能.而 ViewGroup 则是一种特殊的 View,它可以包含很多的子 View 和子 ViewGroup,是一个用于放置控件和布局的容器.这个时候我们就可以思

在 ASP.NET 中创建数据访问和业务逻辑层(转)

.NET Framework 4 当在 ASP.NET 中处理数据时,可从使用通用软件模式中受益.其中一种模式是将数据访问代码与控制数据访问或提供其他业务规则的业务逻辑代码分开.在此模式中,这两个层均与表示层分离.表示层由网站用户有权查看或更改数据的页面组成. ASP.NET 可通过多种方式提供数据访问.业务逻辑和表示形式之间的分离.例如,数据源模型(包括 LinqDataSource 和 ObjectDataSource 等服务器控件)可将表示层与数据访问代码和业务逻辑分离. 另一种模式是将数

[译] 三、使用Xcode 5和界面生成器创建Hello World 应用

声明:本文翻译自AppCoda网站的文章:Creating Hello World App Using Xcode 5 and Interface Builder,作者是创建者Simon Ng.如有异议,请联系博主. 更新:基于苹果发布最新版的Xcode 6和Swift语言,我们更新最新版的Hello World教程. 这个Hello World教程在之前写过老版本的免费教程.我们想有必要使用Xcode 5来重新更新一遍教程(由于老的教程已经过时,译者就不再翻译老版本教程,希望各位读者谅解).关

[Android]用户界面设计

1. 声明性设计 设计用户界面的方法有两种,过程性设计和声明性设计.过程性设计是指用代码设计用户界面,例如,开发一个Swing应用程序时必须编写Java代码,以创建和操作所有用户界面对象.声明性设计不涉及任何代码,例如,在设计网页时使用HTML,描述了期望的网页布局,而不是如何实现. Android同时支持过程性和声明性设计,允许开发人员使用任一风格创建用户界面,即可以绝大部分使用Java代码,也可以绝大部分使用XML描述符.虽然二者都是有效的,但谷歌建议尽可能使用声明性的XML语言,与相应的J

Android Studio插件开发实践--从创建到发布

前言 前几天在github发现一个蛮不错的Android Studio插件ECTranslation,在一些源码注释中遇到不认识的英文单词可以很方便地查看中文翻译.当时怀着好奇心也想试着开发一个小插件,在网上查资料发现插件开发的资料很少,大部分blog都只是简单地搭建了个开发环境然后弹出个Hello World的对话框就完了,而jetbrains也只提供了一份DevGuide并没有比较详细的API文档.因此遇到大部分都只能啃它的那份英文指导手册和参考别人发布在github的插件源码.现在这个小插

十大开源的.NET用户界面框架 让GUI设计不再犯难

选择一款合适的GUI框架是.NET开发中比较重要但又很棘手的问题,因为用户界面相当于一款应用的"门面",直接面向用户.好的UI更能吸引用户,有时甚至成为决定一款应用成败的关键.下面小编整理出十大应用最广泛.NET开源用户界面框架,希望.NET开发人员以后选择GUI框架时不再犯难. Windows.Forms Windows.Forms是微软的.NET开发框架图形用户界面的一部分,该组件通过将现有的Windows API(Win32 API)封装为托管代码提供了对Windows本地(na

Java千百问_08JDK详解(006)_jdk用户界面类库都有什么

点击进入_更多_Java千百问 1.jdk用户界面类库都有什么 了解java核心框架看这里:java核心框架是什么样的 1. 输入法框架(Input Method Framework) 输入法框架包括文本编辑组件与文本输入.文本输入是软件组件,使得用户输入文本而不是简单的在键盘上打字.它们通常用于输入日本.中国或韩国的语言,输入比键盘按键多出数百倍的文本.当然,框架还支持其他语言,以及完全不同的输入机制,如手写和语音识别. 了解更多输入法框架看这里:[java输入法框架是什么][3] 可接入性库