• 混合知识点


    1.

    String path = String.format(Contants.NEWS_URL_HOST+Contants.NEWS_TOP_URL,pageIndex);

     将NEWS_URL_HOST+NEWS_TOP_URL组成的网址中d%的值替换为pageIndex

    2.OnScrollListener滑动监听中onScroll应设置一个标签返回给onScrollStateChanged用

    3.

    Runtime.getRuntime().maxMemory();

    得到手机最大内存

    4.

    LruCache<String,Bitmap> cache = new LruCache<String, Bitmap>((int) (maxMemory/16)){
        @Override
        protected int sizeOf(String key, Bitmap value) {
            return value.getByteCount()*value.getHeight();//返回一张图片的字节总数。
        }
    };

    返回一张图片的字节总数。

    5.

     getResources().getDisplayMetrics().widthPixels;

    返回屏幕宽度

    6.

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            int left = (int) (scroll_line_width*(position+positionOffset));//下划线距离最左边的距离
            params.leftMargin = left;
            scroll_line.setLayoutParams(params);
        }
    
        @Override
        public void onPageSelected(int position) {
            int out_left = position*scroll_line_width +scroll_line_width/2 - 
                      getResources().getDisplayMetrics().widthPixels/2;//滑动条左边超出屏幕的距离
            scrollView.smoothScrollTo(out_left,0);
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
    
        }
    });

    7.window

    // 去掉标题栏(该代码必须在setContentView()前调用)
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);
    window = getWindow();
    // 去掉状态栏
    window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

     8.切换横竖屏时如何不销毁当前Activity

    <activity android:name=".MainActivity" android:configChanges="orientation|screenSize">

     9.隐藏ActionBar

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>

     10.动态设置布局宽和高

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,1);
                    txVeiwHolder.imageView.setLayoutParams(params);

     或者

    RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
                    txVeiwHolder.imageView.setLayoutParams(params1);

     11.使应用程序变成对话框的形式

    android :theme="@android:style/Theme.Dialog" 

     12.java代码调用string.xml中的文字可以使用

    getActivity().getString(R.string.ts0)

     但是调用颜色的话需要sdk23以上的版本

    getActivity().getColor(R.color.colorBack)
    getResources().getColor(R.color.my_blue)

     13.String s = new String("xyz");创建了几个String Object? 

    两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s 

    14.viewpager每次切换的时候, 会重新创建当前界面及左右界面三个界面, 每次切换都要重新oncreate, 所以只要设置

    viewPager setOffscreenPageLimit(3);

    即可避免这个问题。
    viewPager.setOffscreenPageLimit(3);表示三个界面之间来回切换都不会重新加载

    15.fragment里嵌套viewpager,如何让viewpager滑到最后一页滑不动

    viewPager.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            //让ViewPager的父容器不要拦截滑动事件
            viewPager.getParent().requestDisallowInterceptTouchEvent(true);
            //这里如果返回true则ViewPager的滑动事件会被屏蔽
            return false;
        }
    });
    //给ListView添加头部,这行代码一定要写在listView.setAdapter(adapter);之前
    listView.addHeaderView(headerView);

     16.将一个Activity设置成窗口样式

    在AndroidManifest.xml中定义Activity的地方一句话

    android:theme="@android:style/Theme.Dialog"

    android:theme="@android:style/Theme.Translucent"//就变成半透明的

     17.后台的Activity如何在被系统回收之前保存当前状态?

    onSaveInstanceState()

     18.android中service的实现方法是

    startservice和bindservice

     19.TextView设置为指定的行数

    android:lines="2"
    android:ellipsize="end"

    20.登录密码使用MD5加密

    MD5.getMD5(old_password).toUpperCase()

     21.alertdialog无法弹出

    切记:清单文件中app的风格一定要继承

    android:theme="@style/Theme.AppCompat.Light.NoActionBar"

    22.代码中调用string.xml中的字符

    在Activity中

    getString(R.string.resource_name); 

    或者

    getResources().getString(R.string.resource_name); 

    其他地方
    用context上下文

    context.getString(R.string.resource_name); 

    context可以从调用的地方获得,或者 getApplicationContext 用全局的context 
    或者用

    application.getString(R.string.resource_name); 

     23.onActivityResult不执行的原因

    activity的启动模式不能为singleTask

     24.圆角按钮

    效果图

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <stroke android:width="1dp" android:color="#FFFFFF"></stroke>
        <corners android:radius="3dp"></corners>
    </shape>

    25.刷新当前activity

    调用oncreate()方法即可 

    26.去除listview之间的分割线

    android:divider="@null"

    27.格式化时间

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String dateStr = sdf.format(new Date());//最新的时间

     如果不想月和日前面自动补0,只要设置格式为yyyy-M-d即可

     28.

    <activity
        android:name=".wxapi.WXEntryActivity"
        android:exported="true"/>
    android:exported="true"的作用是设置其他应用可以调用该activity

     29.

    自定义View中注册广播,需要重写onDetachFromWindow()方法去销毁广播

    30.

    如果不想控件被父布局遮挡,在根布局设置属性android:clipChildren="false"

    31.

    如果不想底部导航栏被软键盘顶起来,在清单文件设置 android:windowSoftInputMode="adjustPan"这个属性

    32.

    迭代开发的时候如何向前兼容新旧接口?

    设计服务器接口时,都带版本号:例如1/2、当时间久了以后,旧版本就不维护了

    33:

    (后缀)逆波兰式

    中缀表达式:9+(3-1)*3+10/2

    后缀表达式:931-3*+10 2/+

    34.

    fragment嵌套问题

    fragment嵌套里面不能用再用getActivity().getFragmentManager()
    要用getChildFragmentManager()

    35.

    retrofit2的get和post
    get:

    例:

    @GET("room/question_focus")
    Call<BaseResponseEntity> followQuestion(@Query("topicId") String topicId, @Query("questionId") String questionId);

    post:

    例:

    @FormUrlEncoded
    @POST("room/question_answer")
    Call<SendMessageResponseEntity> textAnswerQuestion(@Field("topicId") String topicId, @Field("questionId") String questionId, @Field("msgType") String msgType, @Field("answerChannel") String answerChannel, @Field("msg") String msg);

    36.

    res文件夹与assets文件夹有什么区别?

    assets目录的作用是主要放置多媒体等数据文件

    1) res文件夹中的资源在会在R.java文件中生成ID,代码中可以直接通过R.id的形式来访问。而assets文件夹中的资源不会在R.java文件中生成ID,需要通过AssetsManager通过IO流的方式来访问。

    2) res文件夹中的文件会被压缩,而assets文件中的文件不会被压缩。

    Res不能自定义目录名,不支持多层目录。而assets支持自定义目录名,支持多层目录

    37.

    Manifest.xml文件中主要包括哪些信息?

    manifest:根节点,描述了package中所有的内容。
    uses-permission:请求你的package正常运作所需赋予的安全许可。
    permission: 声明了安全许可来限制哪些程序能你package中的组件和功能。
    instrumentation:声明了用来测试此package或其他package指令组件的代码。
    application:包含package中application级别组件声明的根节点。
    activity:Activity是用来与用户交互的主要工具。
    receiver:IntentReceiver能使的application获得数据的改变或者发生的操作,即使它当前不在运行。
    service:Service是能在后台运行任意时间的组件。
    provider:ContentProvider是用来管理持久化数据并发布给其他应用程序使用的组件。

    38.

    如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?

    可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件复制到res aw目录中

    39.

    如何将打开res aw目录中的数据库文件?

    解答:在Android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res aw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。

    40.

    需求:将某一部分布局转化为图片

    其实很简单,就几行代码

    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());//创建一个DrawingCache的拷贝,因为DrawingCache得到的位图在禁用后会被回收
    view.setDrawingCacheEnabled(false);//禁用DrawingCahce否则会影响性能

    41.

    焦点获取不到

    android:descendantFocusability="blocksDescendants"

    如果在xml布局的根布局中加这一句,会屏蔽整个Activity的焦点,禁用!

    42.

    fragment可见操作
    需求:当fragment可见时执行某操作

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isInitedView && isVisibleToUser) {
    //请求顶部信息
    getChattingBanner();
    }
    }

    43.

    singleTask模式重新加载
    需求:Activity1启动模式是singleTask,跳到Activity2,再跳转回Activity1,但是需要执行onCreate

    /**
    * Activity启动模式为非标准启动模式时继承该Activity。</br>
    * 如SingleTask
    */
    public abstract class BaseSingleTaskActivity extends BaseFragmentActivity {
    @Override
    protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    initData();
    initView();
    }
    } 

    44.

    as内存过小报错
    报错

    android studio开发时候 能通过编译 但是运行的时候就报错Error:Execution failed for task ':phoneapp:preDexDebug'.
    > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:Program FilesJavajdk1.8.0_05injava.exe'' finished with non-zero exit value 1
    解决方案

    复制代码
    解决步骤:
    1、先把build.gradle中的

    dexOptions {
    preDexLibraries = false
    javaMaxHeapSize "4g" //这个改大
    }

    2、如果还不行,看看你的JDK是不是32位的,如果是则换成64位的,因为32位识别不了4G以上的内存

    45.

    今天测试找过来说图片不显示了,查了一下是Picasso加载本地图片没有显示,奇怪了,以前都是这样写为什么现在不行了,难道是Picasso有bug了,怀着激动的心情断点跟进去发现

    Picasso所有load的重载都会将传入参数转化为Uri 再交给RequestCreator处理

    而Picasso.load(localImagePath) 转化为Uri是没有 Scheme的 uri: "/storage/emulated/0/Android/data/xxxx/xxx.png"
    这样当然无法解析图片了

    解决方式:

    Picasso.load(new File(localImagePath))
    就可以了,File转化为Uri 是包含Scheme的,
    uri: "file:///storage/emulated/0/Android/data/xxxxx/xxx.png"

    解决。

    46.

    Android性能检测工具
    网易Emmagee

    Github地址:https://github.com/king1039/Emmagee

    腾讯GT

    Github地址:https://github.com/Tencent/GT

    腾讯的APT

    Github地址:https://github.com/shawwinbin/APT

    Tencent CSDN地址:https://code.csdn.net/Tencent/apt/tree/master

    科大讯飞的iTest

    Github地址:https://github.com/BaiduQA/ITEST

    Google的Battery Historian

    Github地址:https://github.com/google/battery-historian

    47.

    数据更新版本号问题
    App.getAppVsersionCode()

    public static int getAppVsersionCode() {
    try {
    return getApplication().getPackageManager().getPackageInfo(getApplication().getPackageName(), 0).versionCode;
    } catch (Exception e) {
    if (null != e) {
    LogHelp.e(getApplication().getPackageName(), e);
    }
    return 0;
    }
    }

    48.

    JsonView插件
    下载地址:https://github.com/gildas-lormeau/JSONView-for-Chrome

    解压,Google浏览器-更多工具-扩展程序-开发者模式-加载已解压的扩展程序

    将WebContent打开加入即可

    49.

    在onBackPressed()中设置setResult时一定要写在super.onBackPressed()之前,即

    @Override
    public void onBackPressed() {
        setResult(RESULT_OK);
        super.onBackPressed();
    }

    因为如果super.onBackPressed在前面,源码里面会setResult(0);然后直接finish掉,你再怎么设置都不行了

    50.

    有的时候在清单文件里设置activity的启动模式不会生效,得动态java代码设置

  • 相关阅读:
    ODBC数据源选项卡中的系统DNS,用户DNS和文件DNS
    Oracle学习的零散问题
    【今日CV 计算机视觉论文速览】Thu, 7 Mar 2019
    【图像风格转换】项目参考资料总结
    【今日CV 计算机视觉论文速览】Thu, 28 Feb 2019
    【今日CV 计算机视觉论文速览】Tue, 26 Feb 2019
    【今日CV 计算机视觉论文速览】Wed, 27 Feb 2019
    【python】set集合基础与使用
    hdu 4259 Double Dealing
    hdu 1538 A Puzzle for Pirates 博弈论
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/5388855.html
Copyright © 2020-2023  润新知