darling_shadow吧 关注:26贴子:1,642

【Android学习】Android开发学习中的一些小技巧、、、、

取消只看楼主收藏回复



1楼2012-04-05 09:02回复
    1.EditText为最上面是,屏蔽它默认获得焦点的行为、、、
    android:focusable="true"
    android:focusableInTouchMode="true"
    eg:
    <EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:hint="不自动获取焦点" />


    2楼2012-04-05 09:03
    收起回复
      HTTP method POST is not supported by this URL错误的解决方案2008-11-09 23:20
      最近一段时间一直从事SWING界面和EJB方面的开发,今天偶尔重新温习了一下BS方面的开发,结果仅仅写了一个简单的servlet,提交之后访问servlet之后总是会报HTTP method POST is not supported by this URL错误, 感到很疑惑,之前在BS开发过程中重来也没有遇到过这类错误,百度一下之后也没有解决问题,最后发现竟然是在重写的doPost多加了一个语句super.doPost导致的,无奈之下只好下了tomcat的原代码,打开javax.servlet.http.HttpServlet.java文件之后才发现超类的doPost方法如下:
      protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException
      {
      String protocol = req.getProtocol();
      String msg = lStrings.getString("http.method_post_not_supported");
      if (protocol.endsWith("1.1")) {
      resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
      } else {
      resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
      }
      }
      也就是说不管你的http是不是1.1的,都是用resp.sendError方法返回一个http.method_post_not_supported的错误信息给前台界面,把我害的好苦,强烈谴责tomcat代码的注释,应该注明不要加super.doPost,不能总让我们看你们的源代码吧.呵呵 .
      


      3楼2012-04-09 15:21
      回复
        [html] view plaincopyprint?
        •android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式
        •android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
        •android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏
        •android:theme="Theme.Light" 背景为白色
        •android:theme="Theme.Light.NoTitleBar" 白色背景并无标题栏
        •android:theme="Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏
        •android:theme="Theme.Black" 背景黑色
        •android:theme="Theme.Black.NoTitleBar" 黑色背景并无标题栏
        •android:theme="Theme.Black.NoTitleBar.Fullscreen" 黑色背景,无标题栏,全屏
        •android:theme="Theme.Wallpaper" 用系统桌面为应用程序背景
        •android:theme="Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏
        •android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" 用系统桌面为应用程序背景,无标题栏,全屏
        •android:theme="Translucent" 半透明
        •android:theme="Theme.Translucent.NoTitleBar" 半透明、无标题栏
        •android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 半透明、无标题栏、全屏
        •android:theme="Theme.Panel"
        •android:theme="Theme.Light.Panel


        4楼2012-04-23 10:11
        回复

            Android提供了两种方式来实现无标题栏和全屏效果,即通过xml文件声明的方式和通过程序的方式。
            这是无标题栏的效果:
            可以和编写Android自定义按钮的图比较一下了解和带标题栏的区别。
            这是全屏的效果:
            使用xml的方式,在manifest文件中,在需要的Activity元素中加入属性:
            < activity android:name=".TextButtonActivity" android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
            这是全屏的。
            如果只是不要标题栏:
            < activity android:name=".TextButtonActivity" android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar">
            这样的好处是不需要写程序语句。程序的写法是,无标题栏:
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            全屏:
            getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
            WindowManager.LayoutParams. FLAG_FULLSCREEN);
            程序的写法,适用于动态配置是否全屏的情况下。


          5楼2012-06-19 14:39
          回复
            Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
            首先考虑以下原因:你是否在setText()方法中设置了一个int型变量,比如setText(10)。
            这样Android系统就会主动去资源文件当中寻找, 但是它不是一个资源文件ID, 所以就会报出这个bug。 解决办法:将int型业务数据,转换成String类型即可,比如setText(10+“”);


            6楼2012-06-26 14:45
            回复
                padding是站在父view的角度描述问题,它规定它里面的内容必须与这个父view边界的距离。margin则是站在自己的角度描述问题,规定自己和其他(上下左右)的view之间的距离,如果同一级只有一个view,那么它的效果基本上就和padding一样了。


              7楼2012-07-16 11:56
              回复

                隐藏键盘、、、
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(b_edit.getWindowToken(),0);


                8楼2012-07-30 16:38
                回复
                  Activity类的runOnUiThread方法你用过吗,如果你对于Android的Thread+Handler方式感觉繁琐,不妨试试Activity提供的另外一种简单的方法runOnUiThread,runOnUiThread可以帮助你在线程中执行UI更新操作,我们只需要在线程中写上类似如果你对于Android的Thread+Handler方式感觉繁琐,不妨试试Activity提供的另外一种简单的方法runOnUiThread,runOnUiThread可以帮助你在线程中执行UI更新操作,我们只需要在线程中写上类似
                  this. runOnUiThread(
                  new Runnable() {
                  @Override
                  public void run() {
                  // refresh ui 的操作代码
                  }
                  }
                  );
                  这里需要注意的是runOnUiThread是Activity中的方法,在线程中我们需要告诉系统是哪个activity调用,所以前面显示的指明了activity。


                  9楼2012-08-01 19:39
                  回复
                    AndroidManifest.xml中android:configChanges的简介
                    程序在运行时,一些设备的配置可能会改变,如:横竖屏的切换、键盘的可用性等,这样的事情一发生,Activity会重新启动,其中的过程是:在销毁之前会先 called onSaveInstanceState()去保存你应用中的一些数据,然后called onDestroy(),最后才去called onCreate()或onRestoreInstanceState()方法去重新启动Activity。
                    当指定的属性发生变化时,不会去重新启动Activity,而是通知程序去调用 onConfigurationChanged()函数 例如:在进行横竖屏的切换时,会重新启动Activity,而定义了这个属性,就不会重新启动Activity了,而是去调用 onConfigurationChanged()函数
                    可以设置多个属性,中间用|隔开
                    VALUE DESCRIPTION
                    "mcc" 国际移动用户识别码所属国家代号是改变了----- sim被侦测到了,去更新mcc mcc是移动用户所属国家代号
                    "mnc" 国际移动用户识别码的移动网号码是改变了------ sim被侦测到了,去更新mnc MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
                    "locale" 地址改变了-----用户选择了一个新的语言会显示出来
                    "touchscreen" 触摸屏是改变了------通常是不会发生的
                    "keyboard" 键盘发生了改变----例如用户用了外部的键盘
                    "keyboardHidden" 键盘的可用性发生了改变
                    "navigation" 导航发生了变化-----通常也不会发生
                    "screenLayout" 屏幕的显示发生了变化------不同的显示被激活
                    "fontScale" 字体比例发生了变化----选择了不同的全局字体
                    "uiMode" 用户的模式发生了变化
                    "orientation" 屏幕方向改变了
                    "screenSize" 屏幕大小改变了
                    "smallestScreenSize" 屏幕的物理大小改变了,如:连接到一个外部的屏幕上


                    10楼2012-08-10 14:31
                    回复
                      /** * 获取文件类型 * * @author beiyongji2 * @date 2012-6-6 下午3:11:35 * @param f * @return */ private String getMIMEType(File f) { String type = ""; String fName = f.getName(); String end = fName .substring(fName.lastIndexOf(".") + 1, fName.length()) .toLowerCase();
                      if (end.equals("m4a") || end.equals("mp3") || end.equals("mid") || end.equals("xmf") || end.equals("ogg") || end.equals("wav")) { type = "audio"; } else if (end.equals("3gp") || end.equals("mp4")) { type = "video"; } else if (end.equals("jpg") || end.equals("gif") || end.equals("png") || end.equals("jpeg") || end.equals("bmp")) { type = "image"; } else if (end.equals("apk")) { type = "application/vnd.android.package-archive"; } else { type = "*"; } if (end.equals("apk")) { } else { type += "/*"; } return type; }


                      11楼2012-08-16 15:08
                      回复

                        一、 MediaPlayer 播放音频的实现步骤:
                        1. 调用MediaPlayer.create(context, R.raw. attack02); 利用MediaPlayer类调用create方法并且传入通过id索引的资源音频文件,得到实例;
                        2. 得到的实例就可以调用 MediaPlayer.star();
                        简单吧、其实MediaPlayer还有几个构造方法,大家有兴趣可以去尝试和实现,这里主要是简单的向大家介绍基本的,毕竟简单实用最好!
                        二、 SoundPlayer 播放音频的实现步骤:
                        1. new出一个实例 ; new SoundPool(4, AudioManager.STREAM_MUSIC, 100);第一个参数是允许有多少个声音流同时播放,第2个参数是声音类型,第三个参数是声音的品质;
                        2.loadId = soundPool.load(context, R.raw.himi_ogg, 1);
                        3. 使用实例调用play方法传入对应的音频文件id即可!
                        两者播放形式的利弊:
                        使用MediaPlayer来播放音频文件存在一些不足:
                        例如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。
                        最开始我使用的也是普通的MediaPlayer的方式,但这个方法不适合用于游戏开发,因为游戏里面同时播放多个音效是常有的事,用过MediaPlayer的朋友都该知道,它是不支持实时播放多个声音的,会出现或多或少的延迟,而且这个延迟是无法让人忍受的,尤其是在快速连续播放声音(比如连续猛点按钮)时,会非常明显,长的时候会出现3~5秒的延迟,【使用MediaPlayer.seekTo() 这个方法来解决此问题】;
                        相对于使用SoundPool存在的一些问题:
                        (1). SoundPool最大只能申请1M的内存空间,这就意味着我们只能使用一些很短的声音片段,而不是用它来播放歌曲或者游戏背景音乐(背景音乐可以考虑使用JetPlayer来播放)。
                        (2). SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
                        (3). 音频格式建议使用OGG格式。使用WAV格式的音频文件存放游戏音效,经过反复测试,在音效播放间隔较短的情况下会出现异常关闭的情况(有说法是SoundPool目前只对16bit的WAV文件有较好的支持)。后来将文件转成OGG格式,问题得到了解决。
                        (4).在使用SoundPool播放音频的时候,如果在初始化中就调用播放函数进行播放音乐那么根本没有声音,不是因为没有执行,而是SoundPool需要一准备时间!囧。当然这个准备时间也很短,不会影响使用,只是程序一运行就播放会没有声音罢了。


                        12楼2012-08-25 12:24
                        回复

                          十,scrollview+listview的高度自动适应自适应
                          很多时间我们在scorllview中嵌入listview的时候,都只能看到listview显示一行数据,而我们的要求是显示多行,即我们数据的行数,那么请看下面的代码:
                          int totalHeight = 0;//总的高度
                          for (int i = 0; i < initData(0).size(); i++) { //initData(0).size()数据的行数
                          View listItem = myAdapter.getView(i, null, list1); //list1,当前listview
                          listItem.measure(0, 0);
                          totalHeight += listItem.getMeasuredHeight();
                          }
                          ViewGroup.LayoutParams para***ist1.getLayoutParams();
                          params.height = totalHeight
                          + (list1.getDividerHeight() * (myAdapter.getCount() - 1));
                          list1.setLayoutParams(params);
                          退出应用程序的实现:可以自己写个方法,例如:
                          3456789 public void exitProgrames(){ Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); android.os.Process.killProcess(android.os.Process.myPid());}
                          需要添加权限:<uses-permission android:name="android.permission.RESTART_PACKAGES" />


                          14楼2012-08-30 17:05
                          回复

                            1.模拟HOME键的效果
                            public boolean onKeyDown(int keyCode, KeyEvent event) {
                            if (keyCode == KeyEvent.KEYCODE_BACK) {
                            Intent intent = new Intent(Intent.ACTION_MAIN);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            intent.addCategory(Intent.CATEGORY_HOME);
                            startActivity(intent);
                            return true;
                            }
                            return super.onKeyDown(keyCode, event);
                            }
                            2.阻止HOME键的效果
                            public void onAttachedToWindow() {
                            this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
                            super.onAttachedToWindow(); }


                            16楼2012-09-19 13:35
                            回复
                              当导入JAR包还是找不到class类时,在项目的根目录下的.classpath文件打开添加
                              <classpathentry kind="src" path="libs"/> 添加这条代码 双重指定...


                              17楼2012-11-30 16:27
                              回复