当前位置:  编程技术>移动开发
本页文章导读:
    ▪碎片使用        碎片运用    Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在一个Activity中.........
    ▪ 获取荧屏分辨率        获取屏幕分辨率 在开发手机应用时,除了对API的掌握外,更重要的还是画面。 对于画面,屏幕分辨率又是很重要的一个因素。 由于手机屏幕尺寸各不相同,在画面布局时就需要考虑这个问.........
    ▪ 两个activity其间的Intent 传值       两个activity之间的Intent 传值 看了很多,总结以下首先activity1和activity2之间   activity1的时候 传值{    Intent intent = new Intent();   intent.setClass(SoundListenActivity.this, appset.class);   Bundle bundle =new.........

[1]碎片使用
    来源: 互联网  发布时间: 2014-02-18
碎片运用

 

 Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在一个Activity中,你可以合并多个fragment在一个单独的activity中建立多个UI面板,同时重用fragment在多个activity中.你可以认为fragment作为一个activity中的一节模块 ,fragment有自己的生命周期,接收自己的输入事件,你可以添加或移除从运行中的activity.

  一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响,举个例子吧,当activity暂停,那么所有在这个activity的fragments将被destroy释放。然而当一个activity在运行比如resume时,你可以单独的操控每个fragment,比如添加或删除。

   Fragment作为Android 3.0的新特性,有些功能还是比较强大的,比如 合并两个Activity,如图

  我们可以看到两个Activity通过两个Fragment合并到一个Activity的布局方式,对于平板等大屏幕设备来说有着不错的展示面板。不过因为Fragment和Activity的生命周期都比较复杂,我们分别对比下:

  

   创建一个fragment你必须创建一个Fragment的子类或存在的子类,比如类似下面的代码

public static class Android123Fragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                             Bundle savedInstanceState) { 
               return inflater.inflate(R.layout.android123_fragment, container, false); 
    } 
}
 

Fragment类的一些代码看起来有些像Activity为了让大家了解清楚,给大家整理下Fragment的生命周期如上图所示,部分类似Activity的,我们详细解释

onCreate() 
  当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的

onCreateView() 
   当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI.

 那么如何添加一个Fragment到Activity中呢? Activity的布局可以这样写

 

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
    <fragment android:name="com.android123.cwj.ArticleListFragment" 
            android:id="@+id/list" 
            android:layout_weight="1" 
            android:layout_width="0dp" 
            android:layout_height="match_parent" /> 
    <fragment android:name="com.android123.cwj.ArticleReaderFragment" 
            android:id="@+id/viewer" 
            android:layout_weight="2" 
            android:layout_width="0dp" 
            android:layout_height="match_parent" /> 
</LinearLayout>
 

 

 最后提醒大家Fragment存在于Activity的ViewGroup中,按照继承关系大家就可以了解他的结构,由于Android 3.0的代码还没有开源,所以测试只能从Android honeycomb版本的模拟器上进行了。

 

 

Fragment的管理控制、性能优化以及和Activity的传输相关内容。

  一、 管理Fragment

   管理Fragment在你的Activity你需要使用一个名为FragmentManager的类,通过调用getFragmentManager()方法来实例化该管理类在你的Activity种。 FragmentManager 类一些主要的方法有通过findFragmentById()来获取一个Activity中有关Fragment布局。当然还有类似findFragmentByTag()方法,以及唐Fragment中出栈的popBackStack()同时可以注册addOnBackStackChangedListener()管理.具体的可以在android.app.FragmentManager类中了解

 二、 优化Fragment事物处理

  一个很好的特性在添加,删除,替换fragment在Activity时可以使用FragmentTransaction类来提高批量处理的效率,这点和SQLite的数据库更新原理类似。

 

 FragmentManager fragmentManager = getFragmentManager();  //实例化fragmentmanager类
 FragmentTransaction transaction = fragmentManager.beginTransaction(); //通过begintransaction方法获取一个事物处理实例。
 

  在这期间可以使用 add(), remove(), 以及  replace(). 最终需要改变时执行 commit()即可,接下来我们写代码

 

 transaction.replace(R.id.fragment_container,newFragment); 
transaction.addToBackStack(null); 
 transaction.commit();
 

  三、Fragment和Activity互相通讯

  通常Fragment中我们放入平时标准的控件或自定义的控件,基本上和Activity一样,但是如何Fragment中的View布局也是放到Activity中的,有两种方法来实现

  View listView = getActivity().findViewById(R.id.cwj); //通过getActivity方法可以获取一个Activity中的fragment,这里的cwj是一个fragment,在activity中的布局如下:

 

  <?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <fragment android:name="com.android123.cwj.ArticleListFragment" 
            android:id="@+id/cwj" 
            android:layout_weight="1" 
            android:layout_width="0dp" 
            android:layout_height="match_parent" /> 
    <fragment android:name="com.android123.cwj.ArticleReaderFragment" 
            android:id="@+id/smart" 
            android:layout_weight="2" 
            android:layout_width="0dp" 
            android:layout_height="match_parent" /> 
</LinearLayout>
 

 


 当然还有一种通过getFragmentManager方法获取实例,ExampleFragment fragment = (ExampleFragment)getFragmentManager().findFragmentById(R.id.cwj);

 

 


    
[2] 获取荧屏分辨率
    来源: 互联网  发布时间: 2014-02-18
获取屏幕分辨率

在开发手机应用时,除了对API的掌握外,更重要的还是画面。

对于画面,屏幕分辨率又是很重要的一个因素。 由于手机屏幕尺寸各不相同,在画面布局时就需要考虑这个问题。

 

Android可以设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕边界,以免布局变形。

 

 

下面我们就讲一下,如何通过代码获取手机屏幕的分辨率,代码其实很简单,关键是android.util.DisplayMetrics这个类。该类记录了一些常用信息,如显示信息、大小、维度、字体等等。

 

代码:

 

[java] view plaincopyprint?
  • @Override  
  •  public void onCreate(Bundle savedInstanceState) {  
  •         super.onCreate(savedInstanceState);  
  •         /*加载页面*/  
  •         setContentView(R.layout.main);  
  •           
  •         /*引用android.util.DisplayMetrics*/  
  •         DisplayMetrics dm = new DisplayMetrics();  
  •         getWindowManager().getDefaultDisplay().getMetrics(dm);  
  •           
  •         int width = dm.widthPixels;  
  •         int height = dm.heightPixels;  
  •           
  •         Button button = (Button)findViewById(R.id.b01);  
  •         button.setText("手机屏幕分辨率为:"+width+"*"+height);  
  • }  
  •  

     

     

    效果:

      

     

     

     

    获取状态栏高度: 


    the top-level window decor view (containing the standard window frame/decorations and the client's content inside of that)

     


      decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。 

      于是,我们就可以算出状态栏的高度了。 

     

    [java] view plaincopyprint?
  • Rect frame = new Rect();    
  •     
  • getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);    
  •     
  • int statusBarHeight = frame.top;    
  •  

     

     

     

     

     

    获取标题栏高度: 

      getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。 

     

    [java] view plaincopyprint?
  • int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();    
  •     
  •  //statusBarHeight是上面所求的状态栏的高度    
  •     
  •  int titleBarHeight = contentTop - statusBarHeight    
  •     
  •  int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();    
  •     
  •  //statusBarHeight是上面所求的状态栏的高度    
  •     
  •  int titleBarHeight = contentTop - statusBarHeight    
  •  

     


        
    [3] 两个activity其间的Intent 传值
        来源: 互联网  发布时间: 2014-02-18
    两个activity之间的Intent 传值

    看了很多,总结以下首先activity1和activity2之间

     

    activity1的时候

    传值{

       Intent intent = new Intent();
       intent.setClass(SoundListenActivity.this, appset.class);
       Bundle bundle =new Bundle();
       bundle.putString("phonenum", phonenum);
       bundle.putLong("threhode", threhode);
       intent.putExtras(bundle);
       startActivityForResult(intent, 1);

     

    @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      // TODO Auto-generated method stub
      super.onActivityResult(requestCode, resultCode, data);
       if (resultCode == 1) {
       Bundle bundle = data.getExtras();
       
       phonenum = bundle.getString("phonenum");
       threhode = bundle.getLong("threhode");

    }

     

    activity2里面

     

    protected void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
      setContentView(R.layout.appset);
      
       Intent intent =new Intent();
      Bundle bundle =getIntent().getExtras();
      String phonenum=bundle.getString("phonenum");
      Long threhode=bundle.getLong("threhode");
      System.out.println("appset-->>"+phonenum+">>"+threhode);
        
     }

     

    返回传值的程序是

    Intent intent = new Intent();
        intent.setClass(appset.this, SoundListenActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("phonenum", phone);
        bundle.putLong("threhode", threhode);
        intent.putExtras(bundle);
        setResult(1,intent);
        finish();

     

    加粗的那几个地方,需要注意!谢谢


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    操作系统 iis7站长之家
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3