精华内容
下载资源
问答
  • android切换输入法工具类

    千次阅读 2016-08-08 15:48:00
    android切换输入法工具类共享一个切换输入法的工具类,可以实现以下功能 检测输入法是否安装 安装输入法 切换输入法(在utf7Ime和android之间切换,如果需要切换成其他的输入法,请自行修改)import android.util....

    android切换输入法工具类

    共享一个切换输入法的工具类,可以实现以下功能

    • 检测输入法是否安装
    • 安装输入法
    • 切换输入法(在utf7Ime和android之间切换,如果需要切换成其他的输入法,请自行修改)
    
    import android.util.Log;
    
    import com.meitu.travelapk.data.ConfigData;
    import com.meitu.travelapk.data.PathData;
    import com.meitu.travelapk.data.TestReport;
    
    import org.junit.Assert;
    import org.junit.Test;
    
    import java.io.File;
    
    /**
     * 用于输入法的管理
     */
    public class InputMethodUtils {
        private static final String TAG = "InputMethodUtils";
        public static String UTF7_PKG = "jp.jun_nama.test.utf7ime";
        public static String UTF7_KEY = "jp.jun_nama.test.utf7ime/.Utf7ImeService";
        public static String Android_KEY = "com.android.inputmethod.latin/.LatinIME";
    
        public enum InputMethod {
            UTF7, ANDROID
        }
    
        /**
         * 安装utf7输入法
         */
        public static void installUTF7() {
            if (!DeviceUtils.isAppInstalled(UTF7_PKG)) {
                //拷贝apk到指定目录
                String path = ConfigData.rootPath;
                String fileName = PathData.utfApkName;
                File apkFile = new File(path + fileName);
                if (!apkFile.exists()) {
                    FileUtils.copyAssets(path, fileName);
                }
                //安装
                DeviceUtils.installApk(apkFile);
            }
        }
    
        /**
         * 切换将当前输入法,另启一个线程
         */
        public static void switchInputMethod(final InputMethod input) {
            Thread switchThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    String installCommand;
                    switch (input) {
                        case UTF7:
                            if (!DeviceUtils.isAppInstalled(UTF7_PKG)) {
                                installUTF7();
                            }
                            installCommand = "settings put secure default_input_method " + UTF7_KEY;
                            TestReport.i("切换到输入法[utf7]");
                            break;
                        case ANDROID:
                            installCommand = "settings put secure default_input_method " + Android_KEY;
                            TestReport.i("切换到输入法[Android]");
                            break;
                        default:
                            installCommand = "settings put secure default_input_method " + Android_KEY;
                            break;
                    }
    
                    ShellUtils.execCommand(installCommand, false);
                }
            });
            switchThread.start();
        }
    
    }
    
    
    展开全文
  • Android切换主线程更新UI方法总结

    千次阅读 2019-02-14 10:09:29
    Android切换主线程更新UI方法总结 一、归纳总结 1. view.post(Runnable action) 2. activity.runOnUiThread(Runnable action) 3. Handler机制 4. 使用AsyncTask   二、详细介绍及示例 方法一: view....

    Android切换主线程更新UI方法总结

    一、归纳总结

    1. view.post(Runnable action)

    2. activity.runOnUiThread(Runnable action)

    3. Handler机制

    4. 使用AsyncTask

     

    二、详细介绍及示例

    方法一: view.post(Runnable action)

    假如该方法是在子线程中

    textView.post(new Runnable() {

            @Override

            public void run() {

                textView.setText("更新textView");

                //还可以更新其他的控件

                imageView.setBackgroundResource(R.drawable.update);

            }

        });

    这是view自带的方法,比较简单,如果你的子线程里可以得到要更新的view的话,可以用此方法进行更新。

    view还有一个方法view.postDelayed(Runnable action, long delayMillis)用来延迟发送。

    方法二: activity.runOnUiThread(Runnable action)

    假如该方法是在子线程中

    注意:context 对象要是 主线程中的MainActivity,这样强转才可以。

    public void updateUI(final Context context) {

            ((MainActivity) context).runOnUiThread(new Runnable() {

                @Override

                public void run() {

                    //此时已在主线程中,可以更新UI了

                }

            });

        }

    如果没有上下文(context),试试下面的方法: 
    1.用view.getContext()可以得到上下文。 
    2.跳过context直接用new Activity().runOnUiThread(Runnable action)来切换到主线程。

    方法三: Handler机制

    首先在主线程中定义Handler,Handler mainHandler = new Handler();(必须要在主线程中定义才能操作主线程,如果想在其他地方定义声明时要这样写Handler mainHandler = new Handler(Looper.getMainLooper()),来获取主线程的 Looper 和 Queue )

    获取到 Handler 后就很简单了,用handler.post(Runnable r)方法把消息处理放在该 handler 依附的消息队列中(也就是主线程消息队列)。

    如下假如该方法是在子线程中

        Handler mainHandler = new Handler(Looper.getMainLooper());

        mainHandler.post(new Runnable() {

            @Override

            public void run() {

                //已在主线程中,可以更新UI

            }

        });

    Handler还有下面的方法:

    1.postAtTime(Runnable r, long uptimeMillis); //在某一时刻发送消息 
    2.postAtDelayed(Runnable r, long delayMillis); //延迟delayMillis毫秒再发送消息

    之后可以把 mainHandler 当做参数传递在各个类之间,当需要更新UI时,可以调用sendMessage一系列方法来执行handleMessage里的操作。

    方法四: 使用AsyncTask

    /**

      * 该类中方法的执行顺序依次为:onPreExecute, doInBackground, onPostExecute

      */

        private class MyAsyncTask extends AsyncTask<String, Integer, String> {

      /**

             * 主线程中执行

             * 在execute()被调用后首先执行

             * 一般用来在执行后台任务前对UI做一些标记

             */

            @Override

            protected void onPreExecute() {

                super.onPreExecute();

                System.out.println("MyAsyncTask.onPreExecute");

            }

      /**

             * 子线程中执行,执行一些耗时操作,关键方法

             * 在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。

             */

            @Override

            protected String doInBackground(String... params) {

                System.out.println("MyAsyncTask.doInBackground");

                //只是模拟了耗时操作

                int count = 0;

                for (int i = 0; i < 10; i++) {

                    try {

                        count++;

                        publishProgress((count % 100) * 10);

                        Thread.sleep(3000);

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                }

                // publishProgress((int) ((count / (float) total) * 100));

                return "耗时操作执行完毕";

            }

     

            /**

             * 主线程中执行

             * 在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件中

             */

            @Override

            protected void onProgressUpdate(Integer... values) {

                super.onProgressUpdate(values);

                progressBar.setProgress(values[0]);

                textView.setText("loading..." + values[0] + "%");

                System.out.println("MyAsyncTask.onProgressUpdate");

            }

     

            /**

             * 在主线程中,当后台操作结束时,此方法将会被调用

             * 计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。

             */

            @Override

            protected void onPostExecute(String aVoid) {

                super.onPostExecute(aVoid);

                System.out.println("MyAsyncTask.onPostExecute aVoid=" + aVoid);

                textView.setText(aVoid);

            }

       /**

             * 主线程中执行

             * 当异步任务取消后的,会回调该函数。在该方法内可以更新UI

             */

            @Override

            protected void onCancelled() {

                super.onCancelled();

                System.out.println("MyAsyncTask.onCancelled");

                progressBar.setProgress(0);

                textView.setText("0");

            }

     

            @Override

            protected void onCancelled(String s) {

                super.onCancelled(s);

            }

        }

    注意:doInBackground方法是在子线程中,所以,我们在这个方法里面执行耗时操作。同时,由于其返回结果会传递到onPostExecute方法中,而onPostExecute方法工作在UI线程,这样我们就在这个方法里面更新ui,达到了异步更新ui的目的。


    对于android的异步加载数据及更新ui,我们不仅可以选择AsyncTask异步任务,还可以选择许多开源的网络框架,如: 点击进入了解更多 xUtils3AsyncHttpClientOkhttpVolley,…, 

    这些优秀的网络框架让我们异步更新ui变得非常简单,而且,效率和性能也非常高。当然这些网络框架绝不仅仅就这么个功能,异步更新UI这只是他们的冰山一角!

     

    展开全文
  • Android 切换界面黑屏

    千次阅读 2019-08-13 12:00:07
    这种切屏导致的黑屏多半是因为横竖屏切换或者其他问题没有配置响应 在Manifest中每个Activity都添加如下配置: android:configChanges="orientation|keyboardHidden|navigation|screenSize" 这个配置的意思: 大佬...

    这种切屏导致的黑屏多半是因为横竖屏切换或者其他问题没有配置响应
    在Manifest中每个Activity都添加如下配置:

    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    

    这个配置的意思:
    大佬的记录

    VALUE DESCRIPTION
    mcc 国际移动用户识别码所属国家代号是改变了,sim被侦测到了,去更新mcc MCC是移动用户所属国家代号
    mnc 国际移动用户识别码的移动网号码是改变了, sim被侦测到了,去更新mnc MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
    locale 用户所在区域发生变化,一般是用户切换了语言时,切换后的语言会显示出来
    touchscreen 触摸屏是改变了------通常是不会发生的
    keyboard 键盘发生了改变----例如用户用了外部的键盘
    keyboardHidden 键盘的可用性发生了改变
    navigation 导航发生了变化-----通常也不会发生
    screenLayout 屏幕的显示发生了变化------不同的显示被激活
    fontScale 字体比例发生了变化----选择了不同的全局字体
    uiMode 用户的模式发生了变化
    orientation 屏幕方向改变了—横竖屏切换
    screenSize 屏幕大小改变了
    smallestScreenSize 屏幕的物理大小改变了,如:连接到一个外部的屏幕上

    黑屏原因:
    程序在运行时,一些设备的配置可能会发生改变,如:横竖屏切换、键盘的可用性等这样的事情发生的时候,activity在没有配置android:configChanges时会重新启动,其过程如下图所示:
    在这里插入图片描述
    其onPause 、onSaveInstanceState、onStop、onDestroy方法均会被调用。onSaveInstanceState方法会在onStop方法之前调用,但是他和onPause方法调用没有特定先后顺序,可前可后。

    在销毁activity之前会通过方法onSaveInstanceState保存你应用中的一些数据,然后call onDestroy方法,然后当重新创建activity时调用onCreate方法之后会调用onRestoreInstanceState方法来恢复之前保存的数据
    所以黑屏就是在这里产生的,渲染的时候其实你的activity还没有初始化好所以就黑屏了。

    展开全文
  • Android切换到后台,返回后纹理丢失 1. 纹理丢失的原因:cocos2dx在android切换后台再切换回来的时候会重新绘制纹理,需要修改它的重新绘制机制。 2. 解决方式: cocos2dx/platform/CCPlatformMacros.h:...
    Android切换到后台,返回后纹理丢失


    1. 纹理丢失的原因:cocos2dx在android切换后台再切换回来的时候会重新绘制纹理,需要修改它的重新绘制机制。


    2. 解决方式:


    cocos2dx/platform/CCPlatformMacros.h:


    --1.修改#defineCC_ENABLE_CACHE_TEXTURE_DATA 1 


    为 #defineCC_ENABLE_CACHE_TEXTURE_DATA 0


    --2.cocos2dx/platform/android/java/src/org/cocos2dx/lib/Cocos2dxGLSurfaceView.java:注释 super.onPause()


    --3.javaactivity-android.cpp: 注释


    else


    {


    cocos2d::GL::invalidateStateCache()
    cocos2d::GLProgramCache::getInstance()->reloadDefaultGLPrograms();
    cocos2d::DrawPrimitives::init();
    cocos2d::VolatileTextureMgr::reloadAllTextures();


    cocos2d::EventCustom recreatedEvent(EVENT_RENDERER_RECREATED);
    director->getEventDispatcher()->dispatchEvent(&recreatedEvent);
    director->setGLDefaultValues();
    }
    --4.修改android最小适配sdk: <uses-sdk android:minSdkVersion="8"/>


    3. 可以解决的问题:


    android手机切换后台,切换回来纹理错位


    android手机接电话,游戏纹理错位


    android锁屏游戏黑屏


    调用第三方sdk跳转界面时游戏黑屏、资源错位


    很多文章都提到了 前三点  第四点设置minSdkVersion是一定要设置的 高于8 不行 具体原因不清楚 知道的楼下留言

    展开全文
  • android切换到后台,返回后纹理丢失 1. 纹理丢失的原因:cocos2dx在android切换后台再切换回来的时候会重新绘制纹理,需要修改它的重新绘制机制。 2. 解决方式: cocos2dx/platform/CCPlatformMacros.h: --1.修改...
  • Android切换BaseUrl项目

    千次阅读 2018-07-10 16:24:20
    效果图 大概效果就是把域名从Github切换到简书,提供了一个悬浮小球,可选择...2、后台若要打断点测试,可以自己开个WebServier(调个Android的bug把iOS卡主有没有?),给后台提供自嗨的可能 代码逻辑 emmmm...
  • Android 切换全屏,取消全屏

    千次阅读 2017-06-27 08:52:41
    切换全屏,取消全屏/** * 切换全屏,取消全屏 * * @param isChecked */ private void switchFullScreen(boolean isChecked) { if (isChecked) { //切换到全屏模式 //添加一个全屏的标记 getWindow().addFlags...
  • Android 切换输入法

    千次阅读 2010-11-09 14:54:00
    1. To test the code segment (OK) 2. you should try String NewInputMethodName=InputMethods.get(0).getId(); ...4. To have the permission "android.Manifest.permission.WRITE_SECURE_
  • Android切换Activity的动画效果

    千次阅读 2018-06-06 16:30:06
    Android已经内置了几种动画效果,可以见 android.R.anim 类。一般情况下我们需要自己定义屏幕切换的效果。首先我们先了解Activity的位置定义,如下图:从上图可以看出,以手机屏幕下面边未X轴,屏幕左边为Y轴,当...
  • 在系统有谷歌拼音输入法(Pinying输入法)和android 键盘输入法(Latin 输入法)的时候,此时系统的输入法不是第三方输入法。 在这时候去切换系统语言: 当切换到中文时,不管之前是否是Pinyin输入法(或是...
  • Android切换Activity时的淡入动画和缩小动画实现在Activity切换过程中的淡入和缩小的动画效果。先创建一个主Activty布局。主Activity有两个按钮一个是实现切换的淡入效果,一个是实现缩小效果。main.xml布局如下:
  • android 切换卡的两种种形式

    千次阅读 2017-06-13 09:40:02
    切换卡是一种相对其他布局有点...怎么样布局不详细说,相信学习过基本布局的朋友根据下面的提示就可以看出怎么写:值得注意的是TabHost的id可以为android:id="@android:id/tabhost" 也可以是自定义而TabWidget的id必须
  • android切换语言后刷新页面

    千次阅读 2017-10-24 14:38:30
    关于更改APP语言,我的大致思路是:提供设置和获取APP语言的方法...此处注意,跳转之后判断是否真正进行了语言的切换,避免页面的重复刷新,这样实现灵活切换APP语言,给用户一个更好的体验效果。 更改系统语言后刷...
  • Android 切换页面显示桌面背景

    千次阅读 2018-01-17 19:34:22
    因为在Android 的 style Them 中设置了 true 使activity为透明,导致在一些机型上会显示桌面背景。若设置为false是,则背景为黑色。此时可以在底部的activity设置style为 false 即可解决。
  • android 切换卡顿解决方法

    千次阅读 2015-05-06 15:57:58
    如果想要让应用用户流畅的滑动体验的话,那么就必须对activity和fragment的生命周期有一个完整的概念以及在何种情况下会触发哪些事件。 在自己目前做的项目中,...当对某些复杂的页面进行切换时,先隐藏后显示,如
  • Android 切换应用主题风格

    万次阅读 2014-10-01 22:15:03
    一直很希望Android有个系统全局功能:夜间模式。 就是在设置里提供一个ToggleButton,打开或者关闭夜间模式。同时在新的API里提供接口,对所有支持夜间模式的应用进行统一调度。打开总开关,默认开启其他第三方应用...
  • Android 切换Fragment时改变actionBar

    千次阅读 2017-04-05 19:10:17
    这次在做项目时遇到一个问题,怎么在切换Fragment时,顺便改变一下actionBar。项目是一个Activity上面承载着四个Fragment,第一个Fragment要求标题栏上面有加号,第二个、第三个、第四个也有要求(这里就不多说了)...
  • 在上一篇【Android问题记录】Android在设置中切换语言后,回到Lanucher为什么会白屏 中,讲述了如何在切换语言后,不导致Launcher重启的方法,但是后续发现,确实达到了切换语言不重启的目的,可是Launcher上的语言...
  • 方法:在AndroidManifest.xml中Activity节点中配置android:configChanges="locale|layoutDirection"  1.添加后Activity是不重启了,但是会导致中、英文同时显示的问题 2.如果不添加,app运行时,切换...
  • Android 切换基本语言对照表

    千次阅读 2014-12-11 19:31:01
    你还在为切花语言的时候,不能识别...Android 基本语言对照表 序号 英语显示 语种 对应语言显示 1 Arabic 阿拉伯语 العربية 2 Persian 波斯语 فارسی 3   俄语 Русский
  • Android 切换系统语言源码分析(上)

    千次阅读 2016-03-04 00:10:11
    本文出自:【二锅头的博客】 以前了解Android的多语言实现很简单,可以在不同的语言环境下使用不同的资源,... 最近公司的项目要用到多国语言切换,并且还是和手机上系统设置里面的语言切换功能一样,于是就上网查了
  • Android 切换系统语言功能实现(下)

    千次阅读 2016-03-04 12:47:24
    概述:简单介绍下这个需求的缘由,这段时间因公司业务需要,其中有一项“设置系统语言”功能,就是在使用APP的过程中,动态的去切换整个Android机器的语言,具体参照手机设置页面有语言切换功能。期初想来是很简单的...
  • Android切换页面的的最简单实例

    千次阅读 2013-07-14 10:42:06
    1 主要有三个文件, 主Activity ,两个可以切换的页面 页面放在 layout 目录下,是最简单的线性布局 2 )最先显示的页面 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=...
  • android切换activity会闪屏的解决方法

    千次阅读 2016-09-23 14:13:37
    Intent intent = new Intent(OneActivity.this, TwoActivity.class); startActivity(intent ); overridePendingTransition(0,...//去掉Activity切换间的动画 我们只需要在startActivity之后加上ov
  • Android切换前后置摄像头并录制视频

    万次阅读 热门讨论 2013-10-16 13:49:57
    import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaRecorder; import android.os.Bundle; import android.util....
  • Android切换横屏竖屏生命周期变化

    千次阅读 2016-04-30 17:02:46
    横竖屏切换 1 切换到横屏 onSaveInstanceState onPause onStop onDestroy onCreate onStart onRestoreInstanceState onResume 2 切换到竖屏,销毁了两次 onSaveInstanceState onPause onStop onDestroyonCreate ...
  • Android 切换至surfaceView闪屏(黑屏)

    千次阅读 2017-10-17 16:33:47
    方法一:在Activity的onCreate中添加如下代码 getWindow().setFormat(PixelFormat.TRANSLUCENT); 但是如果你在fragment里这么做貌似是行不通的。 方法二:在activity root view里添加一个SurfaceView,宽和高都...
  • Android 切换系统语言后,重启App

    千次阅读 2016-09-21 19:44:58
    * 切换语言的工具类 * * @author : barry.huang * @time : 16/9/21 **/ public class LanguageUtil { private static final String LAST_LANGUAGE = "lastLanguage"; /** * 当改变系统语言时,重启App * ...
  • android 切换至surfaceView闪屏(黑屏)

    千次阅读 2015-07-23 16:35:18
    具体问题如下:某个时候需要切换到SurfaceView,我们不管是用setContentView(xxxlayout);这个xxxLayout里面有个SurfaceView、还是用动态添加SurfaceView(layout.addView(mSurfaceView));的方法,都会闪屏一下。但是...
  • 切换语言后避免Activity重启 的解决办法就是下面: android:configChanges="locale|layoutDirection|keyboard" //缺一不可,多是可以的   我的代码里原本就有keyboard这个标签,所以我不确定是否需要添加...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,738
精华内容 14,295
关键字:

android切换