精华内容
下载资源
问答
  • [Android]应用语言切换的三种方法 分类: Android2011-07-11 00:27273人阅读评论(0)收藏举报 Android对国际化与多语言切换已经做得不错了,一个应用只要命名相应语系的values-[l

    [Android]应用语言切换的三种方法

                分类:                Android273人阅读评论(0)收藏举报
        Android对国际化与多语言切换已经做得不错了,一个应用只要命名相应语系的values-[language]文件夹,通过“设置”→“语言&键盘”→“选择语言”即可实现应用多种语言的切换。   
        但如何在应用里自己实现?搜索过发现网上有如下的做法:
    1. Resources res = getResources(); 
    2. Configuration config = res.getConfiguration(); 
    3. config.locale = locale; 
    4. DisplayMetrics dm = res.getDisplayMetrics(); 
    5. res.updateConfiguration(config, dm); 
             Resources res = getResources();
             Configuration config = res.getConfiguration();
             config.locale = locale;
             DisplayMetrics dm = res.getDisplayMetrics();
             res.updateConfiguration(config, dm);
     
        亲测,不成功。好吧,程序员又到了自力更生的时候了。下面开始讲应用多语言切换的三种方法。
       
        先上效果图:

    English 

    前两种方法的原理即在应用里实现“选择语言”。通过查看源码,其核心代码为:

    1. IActivityManager iActMag = ActivityManagerNative.getDefault(); 
    2. try
    3.     Configuration config = iActMag.getConfiguration(); 
    4.     config.locale = locale; 
    5.     // 此处需要声明权限:android.permission.CHANGE_CONFIGURATION 
    6.     // 会重新调用 onCreate(); 
    7.     iActMag.updateConfiguration(config); 
    8. } catch (RemoteException e) { 
    9.     e.printStackTrace(); 
    10. PS:感谢 曾阳 的帮助。 
    		IActivityManager iActMag = ActivityManagerNative.getDefault();
    		try {
    			Configuration config = iActMag.getConfiguration();
    			config.locale = locale;
    			// 此处需要声明权限:android.permission.CHANGE_CONFIGURATION
    			// 会重新调用 onCreate();
    			iActMag.updateConfiguration(config);
    		} catch (RemoteException e) {
    			e.printStackTrace();
    		}
    		PS:感谢 曾阳 的帮助。
        可以发现IActivityManager与ActivityManagerNative都是非公开类。如何调用?第一种是API欺骗,第二种是使用Java反射机制。
        1. API欺骗
        烧制到手机中的android.jar包含了Android所需的各种类与方法;而供开发者使用的android.jar只是其中的一部分。API欺骗是指在应用中去模拟未公开的类和方法让应用编译通过并生成APK,然而在应用实际运行中调用的却仍是烧制到手机中真实的android.jar。
       
        通过核心代码可以看到我们要模拟的是ActivityManagerNative中的一个方法getDefault()和IActivityManager中的两个方法getConfiguration()与updateConfiguration(config)。参照源码,应用的工程结构图及代码模拟如下:
       
        工程结构图:

    代码:

    1. ActivityManagerNative.java 
    2. package android.app; 
    3.  
    4. /**
    5. * @author Sodino E-mail:sodinoopen@hotmail.com
    6. * @version Time:2011-7-10 上午11:37:01
    7. */ 
    8. public abstract class ActivityManagerNative { 
    9.     public static IActivityManager getDefault() { 
    10.         return null
    11.     } 
    12.  
    13. IActivityManager.java 
    14. package android.app; 
    15.  
    16. import android.content.res.Configuration; 
    17. import android.os.RemoteException; 
    18.  
    19. /**
    20. * @author Sodino E-mail:sodinoopen@hotmail.com
    21. * @version Time:2011-7-10 上午11:37:46
    22. */ 
    23. public abstract interface IActivityManager { 
    24.     public abstract Configuration getConfiguration() throws RemoteException; 
    25.  
    26.     public abstract void updateConfiguration(Configuration paramConfiguration) 
    27.             throws RemoteException; 
    ActivityManagerNative.java
    package android.app;
    
    /**
     * @author Sodino E-mail:sodinoopen@hotmail.com
     * @version Time:2011-7-10 上午11:37:01
     */
    public abstract class ActivityManagerNative {
    	public static IActivityManager getDefault() {
    		return null;
    	}
    }
    
    IActivityManager.java
    package android.app;
    
    import android.content.res.Configuration;
    import android.os.RemoteException;
    
    /**
     * @author Sodino E-mail:sodinoopen@hotmail.com
     * @version Time:2011-7-10 上午11:37:46
     */
    public abstract interface IActivityManager {
    	public abstract Configuration getConfiguration() throws RemoteException;
    
    	public abstract void updateConfiguration(Configuration paramConfiguration)
    			throws RemoteException;
    }
        实现模拟了这两个类后,即可正常使用上面提到的转换语系的核心代码了。

        2. Java反射机制
        不多说了,Java反射机制入门教程:
        http://java.sun.com/developer/technicalArticles/ALT/Reflection/index.html
        之前写过的几个使用Java反射的例子:
        [Android]获取未安装的APK图标(原创非转帖)
        http://blog.csdn.net/sodino/article/details/6215224
        [Android]挂断、接听电话
        http://blog.csdn.net/sodino/article/details/6181610
       
        直接上代码:

    1. private void updateLanguage(Locale locale) { 
    2.     Log.d("ANDROID_LAB", locale.toString()); 
    3.     try
    4.         Object objIActMag, objActMagNative; 
    5.         Class clzIActMag = Class.forName("android.app.IActivityManager"); 
    6.         Class clzActMagNative = Class.forName("android.app.ActivityManagerNative"); 
    7.         Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault"); 
    8.         // IActivityManager iActMag = ActivityManagerNative.getDefault(); 
    9.         objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative); 
    10.         // Configuration config = iActMag.getConfiguration(); 
    11.         Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration"); 
    12.         Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag); 
    13.         config.locale = locale; 
    14.         // iActMag.updateConfiguration(config); 
    15.         // 此处需要声明权限:android.permission.CHANGE_CONFIGURATION 
    16.         // 会重新调用 onCreate(); 
    17.         Class[] clzParams = { Configuration.class }; 
    18.         Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod( 
    19.                 "updateConfiguration", clzParams); 
    20.         mtdIActMag$updateConfiguration.invoke(objIActMag, config); 
    21.     } catch (Exception e) { 
    22.         e.printStackTrace(); 
    23.     } 
    	private void updateLanguage(Locale locale) {
    		Log.d("ANDROID_LAB", locale.toString());
    		try {
    			Object objIActMag, objActMagNative;
    			Class clzIActMag = Class.forName("android.app.IActivityManager");
    			Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");
    			Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault");
    			// IActivityManager iActMag = ActivityManagerNative.getDefault();
    			objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
    			// Configuration config = iActMag.getConfiguration();
    			Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");
    			Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);
    			config.locale = locale;
    			// iActMag.updateConfiguration(config);
    			// 此处需要声明权限:android.permission.CHANGE_CONFIGURATION
    			// 会重新调用 onCreate();
    			Class[] clzParams = { Configuration.class };
    			Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod(
    					"updateConfiguration", clzParams);
    			mtdIActMag$updateConfiguration.invoke(objIActMag, config);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
        实际运行后,发现对当前系统设置了新的Locale后,不单自己的应用语系改变了,系统所有的应用语系都改变了。这肯定是不合理的。有一个解决办法是在应用界面退出前再次对系统设置成碑的Locale,不过个人不喜欢这样的办法,加之调用updateConfiguration()方法后,整个Activity会重新onCreate(),这个考虑Activity的生命周期可有点费劲了。于是有了下面这第三种方法。
       
        3. 自己转换语系(哈哈,这个名字很现实啊)
        动手实现嘛,啥都系统弄好了,那程序员的存在还有什么意义呢。
        自己转换语系有点麻烦,先看工程结构图:
       


        values/strings.xml与xml/english.xml的内容是相同的;values-zh-rCN/strings.xml与xml/chinese.xml的内容也是相同的。出现这样的冗余是因为生成APK时values下的内容都打到rasc去了,读取不了了。
       
        自己实现语系的转换需要考虑到:
        3.1  R.xxxxx.id与对应语系中文本串的对应(需要特别考虑到R.array.string字符串数组)。
        3.2 解析xml。
        3.3 设置语系后,所有界面元素的手动刷新。
       
        在xml中声明一个string是这个的格式:

    1. <string name="app_name">语言应用</string> 
        <string name="app_name">语言应用</string>
        对应R文件会生成一个id指代该string
    1. public static final class string { 
    2.     public static final int app_name=0x7f050001
        public static final class string {
            public static final int app_name=0x7f050001;
        }

        3.1的问题就是如何实现id与string的匹配,解决方法为:
    1. Resources res = context.getResources(); 
    2. String pkg = context.getPackageName(); 
    3. String tag = "app_name"
    4. int idTag = res.getIdentifier(tag, "string", pkg); 
    	Resources res = context.getResources();
    	String pkg = context.getPackageName();
    	String tag = "app_name";
    	int idTag = res.getIdentifier(tag, "string", pkg);
        3.2 解析XML
        这儿要用到一个新的工具了:XmlResourceParser,解析过程有点绕,但比SAX简单些。具体细节见LanguageApp_Sodino工程中的代码吧。
       
        3.3 手动刷新界面。
        要获取所有涉及到语系更新组件的索引逐一更新,体力活儿,细心点花点力气也可实现。
       
        详细实现过程见下面三个工程中:
        LanguageApp_APICheat
        LanguageApp_Reflection
        LanguageApp_Sodino
        (PS:不要问我为什么下载的工程在IDE中为什么无法直接使用,为什么打开是乱码红叉一大堆,既然是程序员,遇到问题是不是也该自己多思考思考呢。)
    展开全文
  • 每个盒子有三种状态0, -1, +1。球从盒子上边或左边进入盒子,从下边或右边离开盒子。规则: 如果盒子模式是-1,则进入它球从下面出去。(方向变为向下) 如果盒子模式是+1,则进入它球从右面出去。 (反向...
    基准时间限制:1 秒 空间限制:131072 KB
     
    有N行M列的正方形盒子。每个盒子有三种状态0, -1, +1。球从盒子上边或左边进入盒子,从下边或右边离开盒子。规则:
    如果盒子的模式是-1,则进入它的球从下面出去。(方向变为向下)
    如果盒子的模式是+1,则进入它的球从右面出去。 (反向变为向右)
    如果盒子的模式是0, 则进入它的球方向不变。从上面进入的,从下面出去,从左面进入的,从右面出去。
     
     
    球离开一个盒子,这个盒子的模式切换为相反数。已知,每个盒子的状态,扔k个球,它们都从左上角那个盒子的上面进入(方向向下),问最终有几个球从右下角的盒子的下边出去。
    (可以理解维球一个一个放,等待的时间足够长,不会有两个球同时进入一个盒子的情形)本题由Javaman翻译。
    Input
    第1行:包括3个数M, N, K中间用空格分隔,M,N 为盒子的宽度和高度,K为球的数量(1 <= M, N <= 1000, 1 <= K <= 10^18)。
    第2 - N + 1行:每行M个数(-1, 0 或 1),表示对应的模式。
    Output
    输出1个数,对应最终有有多少个球从右下角的盒子的下边出去。
    Input示例
    3 2 4
    -1 0 -1
    1 0 0
    Output示例
    1
    思路:
    考虑到从左上开始方向始终只有右和下,果断dp
    可以整体考虑,因为落下一个,就会改变当前的值为相反数,所以一方为n+1/2,一方为n/2
    类似考虑,当为+1时,优先考虑对下个右方格子的影响,-1时优先考虑下个左方格子的影响,为0时直接加和
    代码:
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int dir;
     4 long long dp[1002][1001][2];
     5 long long read(){
     6     long long res = 0;
     7     int flag = 0;
     8     char ch;
     9     if ((ch = getchar()) == '-'){
    10         flag = 1;
    11     }
    12     else if(ch >= '0' && ch <= '9'){
    13         res = ch - '0';
    14     }
    15     while ((ch = getchar()) >= '0' && ch <= '9'){
    16         res = res * 10 + (ch - '0');
    17     }
    18     return flag ? -res : res;
    19 }
    20 int main() {
    21     int n,m;
    22     long long k;
    23     m=read();n=read();k=read();
    24     //用0来表示-1朝下,1来表示+1朝右
    25     //刚开初始放下为朝下,全部球落入dp[1][1][0],dp[1][1][1]=0;
    26     dp[1][1][0]=k;
    27     for(int i=1;i<=n;++i) {
    28         for(int j=1;j<=m;++j) {
    29             //不同再开数组保存方向,因为一行一行处理没有后效性
    30             dir=read();
    31             long long sum=dp[i][j][0]+dp[i][j][1];//当前关口的总数
    32             if(dir==0) {
    33                 dp[i][j+1][1]+=dp[i][j][1];//朝右j+1
    34                 dp[i+1][j][0]+=dp[i][j][0];//朝下i+1
    35             } else if(dir==-1) {
    36                 dp[i+1][j][0]+=(sum+1)>>1;//先计算朝下的,i+1,状态0
    37                 dp[i][j+1][1]+=sum>>1;//剩余的朝右j+1,状态1
    38             } else if(dir==1) {
    39                 dp[i][j+1][1]+=(sum+1)>>1;//先计算朝右的,j+1,状态1
    40                 dp[i+1][j][0]+=sum>>1;//剩余的朝右i+1,状态0
    41             }
    42         }
    43     }
    44     printf("%lld\n",dp[n+1][m][0]);//由dp[n][m][0]->dp[n+1][m][0]
    45     return 0;
    46 }
    View Code

     

     

    转载于:https://www.cnblogs.com/lemonbiscuit/p/7775953.html

    展开全文
  • Verilog有限状态机的三种描述

    千次阅读 2015-07-27 01:52:39
    三种描述主要根据其输入、输出和状态来分类。   一段式状态机:一段式状态机只选择一个状态标志位,这个状态标志位会在输入决定下选择跳转到下一个状态还是维持原有状态,在每一个状态下检测状态标志位及输入...


     

    Verilog中描述有限状态机,可以有三种形式,可分为一段式、二段式和三段式。这三种描述主要根据其输入、输出和状态来分类。

     

    一段式状态机:一段式状态机只选择一个状态标志位,这个状态标志位会在输入的决定下选择跳转到下一个状态还是维持原有状态,在每一个状态下检测状态标志位及输入来决定其状态的跳转及输出。其输出和状态的切换在一个always循环块中执行。

    egalways()

        begin

            S0begin state = in)? S0s1out =  ; end

                S1begin state = in)? S1s2out =  ; end

                S2.....................................

        end

        

     

    二段式状态机:二段式状态机将状态分为当前状态和此状态,其系统会自动将次状态更新到当前状态,其输入更新在次状态上,其决定系统的状态切换和输出。其输出和状态的切换在两个个always循环块中执行,第一个always块决定系统状态标志的自动跳转,第二个always块决定系统根据不同状态下的输入进行状态的跳转及输出。

    eg: always()

          begin

             state=next_state

          end

     

         always()

          begin

             S0begin next_state = in)? S0s1out =  ; end

                 S1begin next_state = in)? S1s2out =  ; end

                 S2.....................................

     

          end

     

    三段式状态机:二段式状态机将状态分为当前状态和此状态,其系统会自动将次状态更新到当前状态,系统的输入更新在次状态上,其决定系统的状态切换,系统会根据其当前状态决定输出的值。其输出和状态更新和状态切换在三个always块中,第一个always块决定系统状态标志的自动跳转,第二个always块决定系统根据不同状态下的输入进行状态的切换,第三个always块根据系统的当前状态决定输出的值。

    eg: always()

          begin

             state=next_state

          end

        

       

         always()

          begin

             S0next_state = in)? S0s1; 

                 S1next_state = in)? S1s2; 

                 S2.....................................

          end

     

        always()

         begin

              S0out =  ; 

                  S1out =  ; 

                  S2.....................................

         end

     

     

       

     

     

       

    展开全文
  • 提出一基于信道切换的车联网数据传输算法(DTA)。DTA算法考虑由车辆节点、中继节点和汇聚节点组成的三层网络,根据车辆的行驶方向进行节点的分类,提出不同的信道分配和切换机制,减少了数据传输的干扰。提出中继...
  • 在APP中免不了要使用tab组件,有是tab切换,也有是tab分类切换.这些组件分成下面两.第一非常简单,同时大多数第方组件都能达到效果.这里重点讲述第二,我们要让第二组件不仅能左右滑动,同时还能够在点击...

    在APP中免不了要使用tab组件,有的是tab切换,也有的是tab分类切换.

    这些组件分成下面两种.

    第一种非常简单,同时大多数第三方组件都能达到效果.这里重点讲述第二种,我们要让第二种组件不仅能左右滑动,同时还能够在点击的时候自动滑动,将点击的位置滑动到正中间.

    准备

    我们先来分析一波.一个滑动组件在APP上是一种什么状态.

    这里可以看出,tab组件需要考虑到长度超过APP的屏幕,并且在超过之后能够滑动.

    同时计算出当前位置需要滑动多少距离才能够将位置居中.

    需要滑动的位置=点击位置的左边距-APP屏幕/2+点击位置的宽度/2

    这个公式也就是我们自动滑动的核心了.

    开发

    使用ScrollView组件承载tab项,这样就可以非常简单的达到滑动的效果.同时添加horizontal、directionalLockEnabled、showsHorizontalScrollIndicator、snapToAlignment几个属性.

    this.scroll = e}

    horizontal directionalLockEnabled

    showsHorizontalScrollIndicator={false}

    snapToAlignment="center">

    {this.props.data.map((item, index) =>

    {/*具体项*/}

    )}

    使用TouchableOpacity包裹内容项,同时调用setLaout方法将每个项的宽高等属性记录下来,为我们后面计算当前位置做准备.

    this.setIndex(index)}

    onLayout={e => this.setLaout(e.nativeEvent.layout, index)}

    key={item.id}

    style={tabBarStyle.itemBtn}>

    {item.name}

    记录每个项渲染之后的位置,将这些值存在变量里,为后面计算做准备.

    laout_list = []

    setLaout(layout, index) {

    //存单个项的位置

    this.laout_list[index] = layout;

    //计算所有项的总长度

    this.scrollW += layout.width;

    }

    接下来就是点击自动变换位置的计算了.

    setIndex(index, bl = true) {

    //先改变点击项的颜色

    this.setState({ index })

    //兼容错误

    if (!this.scroll) return;

    //拿到当前项的位置数据

    let layout = this.laout_list[index];

    let rx = deviceWidth / 2;

    //公式

    let sx = layout.x - rx + layout.width / 2;

    //如果还不需要移动,原地待着

    if (sx < 0) sx = 0;

    //移动位置

    sx < this.scrollW - deviceWidth && this.scroll.scrollTo({ x: sx, animated: bl });

    //结尾部分直接移动到底

    sx >= this.scrollW - deviceWidth && this.scroll.scrollToEnd({ animated: bl });

    //触发一些需要的外部事件

    this.props.onChange && this.props.onChange(index);

    }

    gitee地址

    github地址

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: react-native动态切换tab组件的方法

    本文地址: http://www.cppcns.com/ruanjian/java/232241.html

    展开全文
  • React-native动态切换tab组件方法

    千次阅读 2018-11-21 08:45:41
    在APP中免不了要使用tab组件,有是tab切换,也有是tab分类切换.这篇文章主要介绍了react-native动态切换tab组件方法,非常具有实用价值,需要朋友可以参考下 在APP中免不了要使用tab组件,有是tab切换,也有...
  • 盘点MINGJI·PPTPPT的切换...在PowerPoint中,为用户内置了数十页面切换效果,从平移到渐变,从平面到维,经常看得人眼花缭乱。究竟该选择什么切换效果更好,是困扰初学者一大难题。本期内容,我们为所有PPT页...
  • 根据进程不同分类Linux采用不同调度策略。对于实时进程,采用FIFO或者Round Robin调度策略。对于普通进程,则需要区分交互式和批处理式不同。传统Linux调度器提高交互式应用优先级,使得它们能更快地被...
  • Android动态切换主题

    2012-11-22 17:27:02
    软件换肤从功能上可以划分三种: 1) 软件内置多个皮肤,不可由用户增加或修改; 最低自由度,软件实现相对于后两种最容易。 2) 官方提供皮肤供下载,用户可以使用下载皮肤; 用户可选择下载自己...
  • 缩写SSR)是一无触点电子开关,由分立元器件、膜固定电阻网络和芯片,采用混合工艺组装来实现控制回路(输入电路)与负载回路(输出电路)电隔离及信号耦合,由固态器件实现负载通断切换功能,内部无任何可动部件。...
  • 按照不同分类有8,如图。 默认使用是Android,可是如果看项目目录话会发现是有libs目录,第库就是要放在这个目录下。要显示这个目录,需要将项目显示模式切换到Project。然后将下载jar包直接拷...
  • 集群定义:  集群是指用一组服务器运行一到多个应用程序。  简单的说,集群可以简单到只有两台服务器,在他们之间配置故障切换,如果一台服务器失效,由另一台服务器接管应用程序的处理。... 集群的三种分类:故
  • 在 shell 中变量分为环境级变量、用户级变量、系统级变量这三种 环境级变量只在当前 shell 中生效, shell 关闭变量丢失 用户级变量写在用户骨文件(.bash_profile)中,只针对当前用户生效,切换用户后就不再生效 ...
  • 我们假设商品有多种不同分类,每一种分类都会有不同税收,例如商品包括食品、衣服、书等等,奢侈品会征收奢侈品税,香烟征收烟草税等等 代码结构: 商品Goods类: package com.anvien.practice.state_one...
  • 按照不同分类有8,如图。 默认使用是Android,可是如果看项目目录话会发现是有libs目录,第库就是要放在这个目录下。要显示这个目录,需要将项目显示模式切换到Project。 然后将下载j
  • 2、生成静态、伪静态、动态浏览三种方式任意切换;3、无限级分类、无限级地区分类;4、自定义模板:每个栏目均可定义属于自己模板;5、强大模板引擎:全标签调用,灵活度非常之高,即使新手站长也很容易上手。6...
  • 仿58同城分类信息系统可在后台自由切换58橙、赶集绿、天猫红色等颜色界面,默认为分类信息布局支持可切换行业门户和地方门户,总共三种色调三种布局风格;支持城市本地商家、网上商城、团购、新闻资讯等功能,由于...
  • 二、三种变量设定方法 1.环境级变量:只针对当前shell生效 步骤:1.定义变量 当前环境可以输出,重新打开一个shell,没有 定义一个环境变量: 重新打开一个shell 二、用户级变量 vim .bash_profile ##...
  • DPM策略分类

    2011-11-04 20:09:13
    根据最近研究调查,目前已经存在许多DPM策略,大致可以分为类,即超时策略、预判策略以及随机模型最优化策略。另外还有一最简单贪婪策略,它是当设备进入空闲时间后马上切换到低功耗态,下次系统请求到来...
  • 速度也只能这样了,没法再快了,CPU核心数少的话,开再多线程也只是增加了线程的上下文切换的消耗,起不到加快的作用的。 点击【查询】后,右侧会有百分比出来,百分比一开始比较少,不要着急,因为是并发,所以...
  • 3、显示猜你喜欢,推荐相同标签或相同分类的内容; 4、可以单独设置文章seo标题、关键词和描述 以上介绍为该主题核心功能。 网站优化建议 1、启用主题后先设置网站首页SEO标题、关键词和描述;合理使用首页...
  • Tableau进行分类统计操作

    千次阅读 2020-03-28 22:12:23
    以周为单位,列出随着开服到第十付费变化,并可以通过选择大r、中r、小r、全体来查看对应随时间付费情况 以周为单位,列出所有大r随着开服时间,每礼包购买金额情况。(可以通过选择不同大r名字切换每...
  • 前面讲了模态对话框和非模态对话框,本节来将一特殊对话框——属性页对话框。 属性页对话框的分类  属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出就是属性页对话框,它通过标签切换各个页面...
  • MS根据功能分为三种类型: A类GPRS MS: 能同时连接到GSM和GPRS网络,能在两个网络中同时激活,同时侦听两个系统信息,并能同时启用,同时提供GPRS业务和GSM电路交换业务,包括短消息业务, ,支持双传输...
  • 【tool】网站测试分类

    2014-10-16 15:54:00
    网站测试主要从以下15类型进行测试:一:功能测试(10个方面)菜单、工具栏、快捷键、下拉框、按钮、单选按钮、复选按钮、切换、链接、触发键二:界面测试登陆界面、总界面、输入界面(增、删、改、查)、处理界面...
  • 目录一、操作系统简介二、操作系统简单分类三、操作系统内核四、操作系统用户态与内核态1. 为什么要有用户态与内核态?2.用户态切换到内核态方式3.物理内存RAM(Random Access Memory 随机存储器)4.虚拟内存...
  • 提示信息对话框工具类(ToolAlert.java),已集成泡泡、土司、对话框三种提示 文件操作工具类(ToolFile.java),assets/raw/xml/shrePerface/等文件读写API 地图定位工具类(ToolLocation.java),读取GPS状态、请求...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 261
精华内容 104
关键字:

切换的三种分类