当前位置:  编程技术>移动开发
本页文章导读:
    ▪MIUI剔除全部联系人        MIUI删除全部联系人 设置--程序--程序管理--全部--联系人存储,然后清除数据就可以删除所有联系人了。一般的android 系统可以通过通讯录,全选,删除全部联系人,两者不一样,第一次使.........
    ▪ 制造自己的标签栏        打造自己的标签栏 作为Android新手,我当时只知道一种方法: 使用Android自带的TabHost容器。 传统的TabHost的使用效果大概是这样的(左图): 这是大众点评网早期的Android客户端,标签栏使.........
    ▪ 手机震动成效       手机震动效果 在android中,可以控制手机进行震动,先是在配置文件中对权限进行配置: <uses-permission android:name="android.permission.VIBRATE" /> 简单示例:主程序中,判断 ToggleButton 是否有被启动.........

[1]MIUI剔除全部联系人
    来源: 互联网  发布时间: 2014-02-18
MIUI删除全部联系人
设置--程序--程序管理--全部--联系人存储,然后清除数据就可以删除所有联系人了。
一般的android 系统可以通过通讯录,全选,删除全部联系人,两者不一样,第一次使用怪怪的,以后就熟悉了,呵呵。

    
[2] 制造自己的标签栏
    来源: 互联网  发布时间: 2014-02-18
打造自己的标签栏

作为Android新手,我当时只知道一种方法:

使用Android自带的TabHost容器。

传统的TabHost的使用效果大概是这样的(左图):

这是大众点评网早期的Android客户端,标签栏使用了系统自带的控件。然而这个效果和我们看到的很多底部标签栏相差甚远(右图,twitter客户端Twidroyd截图)。

他们到底是怎么实现的呢?为此,我在网上查了不少资料,大致有以下种方案:

  • Button Bar实现;
  • 修改TabWidget。
  • 1. Button Bar
    基本思路:用一个Layout来呈现整个标签栏,在上面添加若干按钮作为标签,整个Layout作为一个部件include到各个界面的布局里去。当用户点击按钮时,切换到相应的界面(多个Activity间的切换)。

     

    在Android 3.0以前的版本里,这种方案多用于制作动作栏。3.0后出现了ActionBar控件,为开发者省了不少事。希望手机版的Android也早点加入。

     

    优点:实现了你想要的效果,外观很容易定制。

    缺点:标签栏实际不是一个,有多个,他们分别属于不同的界面(从属关系)。这导致了在界面切换的时候,标签栏会随着他的界面(或者说Activity)“动”,而非常驻在底部。

    改进:有一种改进方式是,用一个Activity来控制整个主界面,标签栏include在这个主界面的布局里,点击标签时显示相应的View(实际上是在一个Activity上多个View的切换)。这样就保证了标签栏只有一个,而且不会随着标签切换而动来动去。当然,缺点也是显而易见的,当标签过多的时候,这个Activity会变得相当复杂。呵呵~万一有个变动,你懂的。

    2. 修改TabWidget
    基本思路:在于既然Android是开源的,我们就能大改特该,让它听话。我们把TabWidget移到底部,然后修改它的外观。

     

    优点:达到了目的,继承了TabWidget的基本功能,可复用,使用简单;

    缺点:需要研究不少Android资料,查references 查到眼花,费九牛二虎之力去掉分割线,底部白线之类的东西,完成外观定制。

    这个方法貌似有不少人用,这里有几篇中文资料(其实都差不多啦,中文圈你抄我我抄你的。。。唉):

    http://www.youmi.net/bbs/thread-102-1-4.html

     

    http://sillydong.com/myjava/android-tabwidget.html

    3. 奇技淫巧
    如你所见,前面说过的方法都能达到目的。但是,Button Bar的方式看上去太dirty了,修改TabWidget又太麻烦了。有什么方式能避免这些不必要的麻烦,把两者优点结合起来呢?

     

    我想到了Android控件的一个属性: android:visibility=”gone”。这简直就是救命稻草!它可以让你的控件不显示,而且还不占地方。这有什么用呢?这意味着,我们可以照样用TabHost,可以照样放TabWidget,只是,只是我们不把TabWidget显示出来。它现在是隐形的标签栏,the real tabs。我们所要做的是:安置一个“傀儡”标签栏,让它来和用户接触。这是不是有点像Design Pattern里的“Proxy”呢?

    这个方案算是投机取巧之作,很可惜,我不是第一个想到的,你可以看这里。历史总是惊人的相似啊!

    标签容器布局,大致代码如下:
    main.xml: 

    <?xml version="1.0" encoding="utf-8"?> <!-- TabHost -->  
    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="fill_parent" android:layout_height="fill_parent"  
        android:id="@android:id/tabhost">  
        <LinearLayout android:orientation="vertical"  
            android:layout_width="fill_parent" android:layout_height="fill_parent">             
            <!-- 隐藏的TabWidget,visibility="gone" -->  
            <TabWidget android:id="@android:id/tabs"  
                android:layout_width="fill_parent" android:layout_height="wrap_content"  
                android:visibility="gone" />            
                 <!-- 标签内容 -->  
            <FrameLayout android:id="@android:id/tabcontent"  
                android:layout_width="fill_parent" android:layout_height="0.0dip"  
                android:layout_weight="1.0" />             
            <!-- 用户可见的“tabs”实际上是一组按钮-->         
            <!-- 注意:checkedButton=“@+id/tab1“,这使得默认选中第一个按钮 -->  
            <RadioGroup android:id="@+id/tab_group"  
                android:layout_width="fill_parent" android:layout_height="50dp"  
                android:gravity="center_vertical" android:layout_gravity="bottom"  
                android:orientation="horizontal" android:background="@drawable/tab_bar_bg"  
                android:checkedButton="@+id/tab1">                 
               <!-- 第一个标签,注意button属性设置成null,以此去掉自带的radio button-->             
               <!-- 注意:id="@id/tab1",为什么不是+id呢?这个和加载先后有关系,Google一下吧 -->  
                <RadioButton android:id="@id/tab1" android:tag="tab1"  
                    android:layout_width="fill_parent" android:layout_height="fill_parent"  
                    android:layout_weight="1.0" android:layout_marginTop="1.0dip"  
                    android:text="Tab 1" android:button="@null" android:gravity="center"  
                    android:background="@drawable/tab_bg_selector" />  
                <RadioButton android:id="@+id/tab2" android:layout_width="fill_parent"  
                    android:layout_height="fill_parent" android:layout_weight="1.0"  
                    android:layout_marginTop="1.0dip" android:text="Tab 2"  
                    android:button="@null" android:gravity="center" android:background="@drawable/tab_bg_selector" />  
                <RadioButton android:id="@+id/tab3" android:layout_width="fill_parent"  
                    android:layout_height="fill_parent" android:layout_weight="1.0"  
                    android:layout_marginTop="1.0dip" android:text="Tab 3"  
                    android:button="@null" android:gravity="center" android:background="@drawable/tab_bg_selector" />  
            </RadioGroup>  
        </LinearLayout>   
    

     

    RadioGroup就是底部的标签栏,背景进行了自定义。我在这边demo里用了9.png格式的图,嗯,你会经常用它的。
    此外,标签被选中和未被选中的关键在于android:background=”@drawable/tab_bg_selector”这句。
    selector:

    xml version="1.0" encoding="utf-8"?>  
    <selector xmlns:android="http://schemas.android.com/apk/res/android">  
        <item android:state_focused="true" android:drawable="@drawable/tab_bg_focused" />  
        <item android:state_pressed="true" android:drawable="@drawable/tab_bg_selected" />  
        <item android:state_checked="true" android:drawable="@drawable/tab_bg_selected" />  
    </selector>   
    

     

    下面列出加载它的Activity代码:
    TabDemoActivity:

    print?public class TabDemoActivity extends TabActivity {  
        private TabHost tabhost;  
        private RadioGroup tabGroup;  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
            tabhost = getTabHost();  
            tabGroup = (RadioGroup) findViewById(R.id.tab_group);  
            // 这里新建3个的Intent用于Activity的切换   
            Intent tab1 = new Intent(this, TabOneActivity.class);  
            Intent tab2 = new Intent(this, TabTwoActivity.class);  
            Intent tab3 = new Intent(this, TabThreeActivity.class);  
            // 向tabhost里添加tab   
            tabhost.addTab(tabhost.newTabSpec("TAB1").setIndicator("Tab 1")  
                    .setContent(tab1));  
            tabhost.addTab(tabhost.newTabSpec("TAB2").setIndicator("Tab 2")  
                    .setContent(tab2));  
            tabhost.addTab(tabhost.newTabSpec("TAB3").setIndicator("Tab 3")  
                    .setContent(tab3));  
            // 给各个按钮设置监听   
            tabGroup.setOnCheckedChangeListener(new OnTabChangeListener());  
            }  
        private class OnTabChangeListener implements OnCheckedChangeListener {  
            @Override  
            public void onCheckedChanged(RadioGroup group, int id) {  
                // TODO Auto-generated method stub   
                //尤其需要注意这里,setCurrentTabByTag方法是纽带   
                switch (id) {  
                case R.id.tab1:  
                    tabhost.setCurrentTabByTag("TAB1");  
                    break;  
                    case R.id.tab2:  
                        tabhost.setCurrentTabByTag("TAB2");  
                        break;  
                    case R.id.tab3:  
                        tabhost.setCurrentTabByTag("TAB3");  
                        break;  
                            }  
                }  
            }     
          
    

     

    最后,为演示起见我们写3个装入容器的Activity。TabOneActivity,TabTwoActivity,TabThreeActivity.
    比如TabOneActivity:

    public class TabOneActivity extends Activity {  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            // TODO Auto-generated method stub   
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.content);  
            TextView text=(TextView)findViewById(R.id.text);  
            text.setText("This is tab 1.");  
        }  
    }  
    

     


    他们的layout很简单,在LinearLayout里就放了个TextView。。。这里就不贴了。
    最终效果图:

    Android自定义标签栏

     

    当然这只是一个Demo,要做得更漂亮你需要在细节处好好作文章,譬如,美化文字,添加图标等等。





        
    [3] 手机震动成效
        来源: 互联网  发布时间: 2014-02-18
    手机震动效果
    在android中,可以控制手机进行震动,先是在配置文件中对权限进行配置:
    <uses-permission android:name="android.permission.VIBRATE" />

    简单示例:
    主程序中,判断 ToggleButton 是否有被启动,如果单击“ ON ”的话,就会启动震动模式,并会跳出 Toast 文字;如果再一次单击“ OFF ”,就会把震动关掉。

    public class EX05 _ 06 extends Activity

    {

      private Vibrator mVibrator01;

     

      /** Called when the activity is first created. */

      @Override

      public void onCreate(Bundle savedInstanceState)

      {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main); 

     

        /* 设置 ToggleButton 的对象 */

        mVibrator01 = ( Vibrator )getApplication().getSystemService

        (Service.VIBRATOR _ SERVICE);

     

        final ToggleButton mtogglebutton1 =

        (ToggleButton) findViewById(R.id.myTogglebutton1);

     

        final ToggleButton mtogglebutton2 =

        (ToggleButton) findViewById(R.id.myTogglebutton2);

     

        final ToggleButton mtogglebutton3 =

        (ToggleButton) findViewById(R.id.myTogglebutton3);

     

        /* 短震动 */

        mtogglebutton1.setOnClickListener(new OnClickListener()

        {

          public void onClick(View v)

          {

            if (mtogglebutton1.isChecked())

            {

              /* 设置震动的周期 */

              mVibrator01.vibrate( new long[]{100,10,100,1000},-1);

              /* 用 Toast 显示震动启动 */

              Toast.makeText

              (

                EX05 _ 06.this,

                 getString(R.string.str _ ok),

                Toast.LENGTH _ SHORT

              ).show();

            }

            else

            {

              /* 取消震动 */

              mVibrator01.cancel();  

              /* 用 Toast 显示震动已被取消 */

              Toast.makeText

              (

                EX05 _ 06.this,

                getString(R.string.str _ end),

                Toast.LENGTH _ SHORT

              ).show();

            }

          }

        });

     

        /* 长震动 */

        mtogglebutton2.setOnClickListener(new OnClickListener()

        {

          public void onClick(View v)

           {

            if (mtogglebutton2.isChecked())

            {

              /* 设置震动的周期 */

              mVibrator01.vibrate(new long[]{100,100,100,1000},0);

           

              /* 用 Toast 显示震动启动 */

              Toast.makeText

              (

                EX05 _ 06.this,

                getString(R.string.str _ ok),

                Toast.LENGTH _ SHORT

              ).show();

            }

            else

            {

              /* 取消震动 */

              mVibrator01.cancel();

             

              /* 用 Toast 显示震动取消 */

              Toast.makeText

              (

                EX05 _ 06.this,

                getString(R.string.str _ end),

                Toast.LENGTH _ SHORT

              ).show();

            }

          }

        }); 

       

        /* 节奏震动 */

        mtogglebutton3.setOnClickListener(new OnClickListener()

        {

          public void onClick(View v)

          {

             if (mtogglebutton3.isChecked())

            {

              /* 设置震动的周期 */

              mVibrator01.vibrate( new long[]{1000,50,1000,50,1000},0);

           

              /* 用 Toast 显示震动启动 */

              Toast.makeText

              (

                EX05 _ 06.this, getString(R.string.str _ ok),

                Toast.LENGTH _ SHORT

              ).show();

            }

            else

            {

              /* 取消震动 */

              mVibrator01.cancel();

              /* 用 Toast 显示震动取消 */

              Toast.makeText

              (

                EX05 _ 06.this,

                getString(R.string.str _ end),

                Toast.LENGTH _ SHORT

              ).show();

            }

          }

        });

      }

    }

     


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


    站内导航:


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

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

    浙ICP备11055608号-3