标签

Android 44

Android Network security configuration Android 网络配置 Android Camera Preview gradlew 源码分析 Android 动态修改菜单 Android RelativeLayout 之 Gravity 的使用 Android Studio Gradle Download Error Android加载子View 【转】Android打开与关闭软键盘 Android EditText软键盘显示隐藏以及“监听” Android mipmap文件夹 Android 用命令行更新SDK Android Service学习之AIDL, Parcelable和远程服务 Android 5.0设备中,Notification小图标是白色的 Android最佳实践 Android Keystore 文件的密码修改 Android Studio 中加载so库文件 Android 中方法重载遇到的问题 ListView & RecyclerView Google Volley如何缓存HTTP请求文件 Creating logs in Android applications Advanced Android TextView TextView高亮URL地址解析 TextView 高亮URL地址,并实现跳转 Best practices in Android development Android Sdk Manager无法更新问题解决办法 Android ViewPager滑动事件 Google Volley 网络请求框架(一) Andorid UI注入工具的使用(ButterKnife) Android 项目中出现的奇葩bug, 数据NullPointExcption Android Drawable Animation Android 图片的毛玻璃效果 Android之使用Log打印日志 使用Fidder来拦截Android发送的HTTP请求 Android之Webview使用 Android之Notification的使用(二) Android之Notification的使用(一) Android Keyboard Show&Hiden Android 粘贴板的使用 Android中使用.9.png 使用Fidder来拦截Android发送的HTTP请求 Andorid JUnit 单元测试 Activity之间的切换动画 Android ListView中Adapter的使用

代码片段

获取Logcat信息 —— 2016年12月23日

```java private void getLogcat( final LogcatListener listener ) {

new Thread() {
    @Override
    public void run() {
        try {
            String processId = Integer.toString( android.os.Process.myPid() );
            String[] command = new String[]{
                    "logcat",
                    "-d",
                    "-v",
                    "threadtime"
            };
            Process process = Runtime.getRuntime().exec( command );
            BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( process
                    .getInputStream() ) );

            StringBuilder log = new StringBuilder();
            String line;
            while ( ( line = bufferedReader.readLine() ) != null ) {
                if ( line.contains( processId ) ) {
                    int lineColor = verboseColor;

                    if ( line.contains( " I " ) ) {
                        lineColor = infoColor;
                    } else if ( line.contains( " E " ) ) {
                        lineColor = errorColor;
                    } else if ( line.contains( " D " ) ) {
                        lineColor = debugColor;
                    } else if ( line.contains( " W " ) ) {
                        lineColor = warningColor;
                    }

                    log.append( "<font color=\"#" + Integer.toHexString( lineColor )
                            .toUpperCase()
                            .substring( 2 ) + "\">" + line + "</font><br><br>" );
                }
            }
            listener.onLogcatCaptured( log.toString() );
        } catch ( Exception e ) {
            e.printStackTrace();
        }
    }
}.start(); }

```java

Android TextView setTextSize —— 2016年10月18日

Android TextView 在设置TextSize 值很大的时候,会报如下错误Font size too large to fit in cache。 修改方法如下:

TextView bigText = (TextView) findViewById(R.id.bigtext);
bigText.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

XML 实现 ListView divider margin —— 2015年07月28日

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="50dp"
    android:insetRight="50dp" >
    <shape>
        <solid android:color="@color/orange" />
        <corners android:radius="2.0dip" />
    </shape>
</inset>

参考:

How to assign padding to Listview item divider line

Android 截取EditText输入的Emoji表情 —— 2015年05月21日

public String subInputText(String inputText,int index) {
	int unicode = Character.codePointAt(text, index);
    int skip = Character.charCount(unicode);
    mInputSquares[textCount++].setText(text.substring(index, index+skip));
}

Android显示密码 —— 2015年04月29日


//  方法1:
if (mIsShowPsw) {
	mPswEdit.setTransformationMethod(HideReturnsTransformationMethod
			.getInstance());
} else {
	mPswEdit.setTransformationMethod(PasswordTransformationMethod
			.getInstance());
}

// 方法2:
int inputType  = mPswEdit.getInputType();
if (inputType == 129) {
    mPswEdit.setInputType(1);
} else {
    mPswEdit.setInputType(129);
}

java反射内部类 —— 2015年04月27日

  1. 在java中反射加载类的方法如下
Class rClass = Class.forName("android.R");
  1. 加载android.R.attr
Class attrClass = Class.forName("android.R$attr");

内部类并不是像调用那样,使用., 而是使用$

Android TextView 设置字体大小 —— 2015年04月21日

/**
 * Set the default text size to the given value, interpreted as "scaled
 * pixel" units.  This size is adjusted based on the current density and
 * user font size preference.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

/**
 * Set the default text size to a given unit and value.  See {@link
 * TypedValue} for the possible dimension units.
 *
 * @param unit The desired dimension unit.
 * @param size The desired size in the given units.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
public void setTextSize(int unit, float size) {
    Context c = getContext();
    Resources r;

    if (c == null)
        r = Resources.getSystem();
    else
        r = c.getResources();

    setRawTextSize(TypedValue.applyDimension(
            unit, size, r.getDisplayMetrics()));
}

private void setRawTextSize(float size) {
    if (size != mTextPaint.getTextSize()) {
        mTextPaint.setTextSize(size);

        if (mLayout != null) {
            nullLayouts();
            requestLayout();
            invalidate();
        }
    }
}

以上代码是Android TextView设置字体的源码。可以看出来,使用setTextSize(float size)的时候,默认单位为sp

如果你自己从xml中读的时候,最好使用setTextSize(int unit, float size)这个方法。

Android 混淆记录 —— 2015年04月15日

--keep class cn.knero.model.*{
    public <methods>; // 不混淆public的方法
}


# Google Gson
#---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.** { *; }
-keep class * extends com.google.gson.reflect.TypeToken
-keep class com.google.gson.reflect.TypeToken
##---------------End: proguard configuration for Gson  ----------


#混淆某个方法
-keepclassmembers class cn.knero.fragment.BaseContentFragment {
    public android.view.View refreshError();
    public android.view.View onLoading();
}

Android文字颜色选择器 —— 2015年04月06日

//在这个地方,应该使用
//android:textColor="@drawable/text_color"

// text_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/click_blue_color"></item>
    <item android:color="@color/blue_color"></item>
</selector>

gradle打包的时候,自动重命名APK文件 —— 2015年04月06日

android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
            def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}-${ defaultConfig.versionCode}.apk")
            output.outputFile = new File(outputFile.parent, fileName)
        }
    }
}

格式化文件容量代码 —— 2015年04月06日

```java public static String formatSize(long size) { if (size < 1024) { return String.format(“%dByte”, size); } else if (size < 1024 * 1024) { return String.format(“%.2fKb”, size / 1024f); } else if (size < 1024 * 1024 * 1024) { return String.format(“%.2fMb”, size / 1024f / 1024f); } else { return String.format(“%.2fGb”, size / 1024f / 1024f / 1024f); } }

Android 按两次返回键退出应用程序 —— 2015年04月06日

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if ((System.currentTimeMillis() - mExitTime) > 2000) {
            Object mHelperUtils;
            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            mExitTime = System.currentTimeMillis();

        } else {
            finish();
        }
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

在`values`中定义id —— 2015年04月06日

values文件夹中创建ids.xml文件, 文件目录为:values/ids.xml

我们有时候,会在代码中定义一个组件,如TextView,但是我们想给他设置一个Id,又不知道该设置一个 什么值比较好,就可以用上术方法来定义一个id, 具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<values>
<item name="custom_item_id" type="id"></item>
</values>

Android string.xml中的占位符 —— 2015年04月06日

<!-- .2f表示的是保留三位小数的浮点数  -->
<string name="book">书名 (字符串)%1$s,作者(字符串)%2$s,编号(整数)%3$d,价格(浮点型):%4$.2f</string>

SD Card的大小和容量 —— 2015年04月06日

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long sdAvailSize = (long)stat.getAvailableBlocks()
               * (long)stat.getBlockSize();
long sdTotalSize =  (long)stat.getBlockCount()
                * (long)stat.getBlockSize()

TextView之代码设置DrawableLeft —— 2015年04月06日

Drawable drawable = getResources().getDrawable(R.drawable.drawable);  
/// 这一步必须要做,否则不会显示.  
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());  
myTextview.setCompoundDrawables(drawable,null,null,null);

Android 去掉Activtiy之间的切换动画 —— 2015年04月06日

<style name="NoAnimationTheme">
    <item name="android:windowAnimationStyle">@style/Animation</item>
</style>
<style name="Animation">
    <item name="android:activityOpenEnterAnimation">@null</item>
    <item name="android:activityOpenExitAnimation">@null</item>
    <item name="android:activityCloseEnterAnimation">@null</item>
    <item name="android:activityCloseExitAnimation">@null</item>
    <item name="android:taskOpenEnterAnimation">@null</item>
    <item name="android:taskOpenExitAnimation">@null</item>
    <item name="android:taskCloseEnterAnimation">@null</item>
    <item name="android:taskCloseExitAnimation">@null</item>
    <item name="android:taskToFrontEnterAnimation">@null</item>
    <item name="android:taskToFrontExitAnimation">@null</item>
    <item name="android:taskToBackEnterAnimation">@null</item>
    <item name="android:taskToBackExitAnimation">@null</item>
</style>

在使用的时候,只需将不需要动画的Activity的style设置成这个就可以了

Andorid打开或关闭软键盘 —— 2014年04月06日


// 打开软键盘
InputMethodManager inputMethodManager =
        (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

// 关闭软键盘
InputMethodManager imm =
        (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mTextView.getWindowToken(), 0);

友情链接: Hiro's Blog | Junjun's Blog