文档章节

Android 杂技

CrazyManDF
 CrazyManDF
发布于 2016/05/06 14:39
字数 2082
阅读 87
收藏 2

Android Studio配置文件路径修改

.AndroidStudio文件夹修改

修改文件C:\Program Files\Android\Android Studio\bin\idea.properties中的

idea.config.path=D:/Android/.AndroidStudio/config
idea.system.path=D:/Android/.AndroidStudio/system

.gradle文件夹的修改

设置Android Studio中的 Settings->Build,Execution,Deployment->Gradle 中的Service directory path为D:/Android/.gradle

.android文件夹的修改 添加一个系统的环境变量ANDROID_SDK_HOME为D:/Android/avd

https://www.jianshu.com/p/7a58c5f154c5

Android 常用尺寸

密度ldpimdpihdpixhdpixxhdpixxxhdpi
比例0.7511.5234
密度数120dpi160dpi240dpi320dpi480dpi640dpi
代表分辨率240*320320*480480*800720*12801080*19201440*2560
Launcher And Home36*3648*4872*7296*96144*144192*192
Action Bar And Tab24*2432*3248*4864*6496*96128*128
Notification18*1824*2436*3648*4872*7296*96
Background320*426320*470480*640720*12801080*19201440*2560

Android Studio一直 Fetching Documentation...

修改“C:\Users\Administrator\.AndroidStudio2.3\config\options\jdk.table.xml”文件

<javadocPath>
  <root type="composite">
	<root type="simple" url="file://D:/Android/sdk/platforms/reference/" />
  </root>
</javadocPath>

Android 颜色透明度换算

100% — FF
95% — F2
90% — E6
85% — D9
80% — CC
75% — BF
70% — B3
65% — A6
60% — 99
55% — 8C
50% — 80
45% — 73
40% — 66
35% — 59
30% — 4D
25% — 40
20% — 33
15% — 26
10% — 1A
5% — 0D
0% — 00

TabLayout添加 tab分割线

    LinearLayout linearLayout = (LinearLayout) tabContent.getChildAt(0);
    linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
    linearLayout.setDividerPadding(CommonUtils.dp2px(this, 8));
    linearLayout.setDividerDrawable(ContextCompat.getDrawable(this,
            R.drawable.layout_divider_vertical));

layout_divider_vertical.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
	<solid android:color="@color/grayDark"/>
	<size android:width="1dp"/>
</shape>

将十六进制 颜色代码 转换为int类型数值

Color.parseColor("#FF00FF")

getColor在6.0中过时

MainActivity.this.getResources().getColor(R.color.colorTest) 用一下替换

ContextCompat.getColor(context, R.color.my_color)
//源码 public static final int getColor(Context context, int id) { 
final int version = Build.VERSION.SDK_INT; 
    if (version >= 23) { 
        return ContextCompatApi23.getColor(context, id);
    } else {
        return context.getResources().getColor(id);  
    }
}

SparseArray

SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch)

Listview的Adapter的转换

如果ListView没有headerView或者footerView的时候,与listView相关联的Adapter就是传进来的参数Adapter,如果有,就将原来的Adapter包装成HeaderViewListAdapter,HeaderViewListAdapter有个方法getWrappedAdapter,该方法能返回被包装的HeaderViewListAdapter的ListAdapter。

HeaderViewListAdapter headerViewListAdapter = (HeaderViewListAdapter) listView.getAdapter(); ContactAdapter contactAdapter = (ContactAdapter) headerViewListAdapter.getWrappedAdapter();

使用View做虚线分割线

drawable/line_dash.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="line"

    >
    <stroke android:color="@color/colorBlack"
            android:dashGap="2dp"
            android:dashWidth="5dp"
            android:width="1dp"
            />
    <size android:width="1dp" />
</shape>

布局文件中:(需要设置 layerType为software)

<View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@drawable/line_dash"
        android:layerType="software"
        />

Android api23 删除HttpClient 相关类

在Module的gradle.build文件添加依赖,和 packagingOptions,和 useLibrary 'org.apache.http.legacy'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "com.egrid.webdemo"
    minSdkVersion 16
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    //会加载Andrdoid自带的jar包 org.apache.http.legacy.jar
     useLibrary 'org.apache.http.legacy'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    //下面这些不会起作用
    compile 'org.apache.httpcomponents:httpclient:4.3.6'
    compile 'org.apache.httpcomponents:httpcore:4.3.2'
}

横竖屏切换

android:configChanges="orientation|keyboardHidden|screenSize"

移动Android Studio默认的AVD目录(.android)

Move .android folder to E:\Android\
Create environment variable called ANDROID_SDK_HOME and set its value to E:\Android

Setting environment variable in Windows XP:

	Right-click on My Computer and choose "Properties")
	Click the "Advanced" tab
	Click the button "Environment Variables".
	Add New variable

https://stackoverflow.com/questions/3109473/moving-default-avd-configuration-folder-android

获取当前Activity的根视图

View rootView = getWindow().getDecorView().findViewById(android.R.id.content); 
或者:
View rootView = findViewById(android.R.id.content); 
或者:
View rootView = findViewById(android.R.id.content).getRootView(); 
关于android.R.id.content,开发者文档中并没有给予说明,但经过测试它应该是用来获取setContentView()中设置的View。

http://www.cnblogs.com/littlepanpc/p/4506294.html

Activity启动模式

https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en

语言的复数形式

getQuantityString() 

<resources>
    <plurals
        name="plural_name">
        <item
            quantity=["zero" | "one" | "two" | "few" | "many" | "other"]
            >text_string</item>
    </plurals>
</resources>

https://developer.android.com/guide/topics/resources/string-resource.html#Plurals
http://blog.csdn.net/a78270528/article/details/46791533

应用运行检测

/**
 * 检测应用是否在后台运行
 * [@param](https://my.oschina.net/u/2303379) context context
 * [@return](https://my.oschina.net/u/556800) true 后台运行
 */
public static boolean isBackgroundRunning(final Context context) {
	ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
	List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(am.getRunningAppProcesses().size());
	for (ActivityManager.RunningTaskInfo runningTaskInfo : tasks) {
		if (runningTaskInfo.topActivity.getPackageName().equals(context.getPackageName())) {
			Log.d(TAG, "packageName:" + runningTaskInfo.topActivity.getPackageName());
			Log.d(TAG, "className:" + runningTaskInfo.topActivity.getClassName());
			return true;
		}
	}
	return false;
}

/**
 * 检测应用是否在后台运行
 * [@param](https://my.oschina.net/u/2303379) context context
 * [@return](https://my.oschina.net/u/556800) true 前台运行
 */
public static boolean isFrontRunning(Context context) {
	ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
	List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
	for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
		if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
			for (String activeProcess : processInfo.pkgList) {
				if (activeProcess.equals(context.getPackageName())) {
					Log.d(TAG, "packageName:" + activeProcess);
					Log.d(TAG, "className:" + processInfo.processName);
					return true;
				}
			}
		}
	}
	return false;
}

app过大错误

问题:

Error:Execution failed for task ':app:transformClassesWithDexForDevDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

修改文件:

build.gradle 文件

android {
	compileSdkVersion 21
	buildToolsVersion "21.1.0"

	defaultConfig {
		...
		minSdkVersion 14
		targetSdkVersion 21
		...

		// Enabling multidex support.
		multiDexEnabled true
	}
	...
}

dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

Application类

<application
    ...
    android:name="com.test.TestApplication">
    ...
</application>

public class TestApplication extends Application {

	protected void attachBaseContext(Context base) {
		super.attachBaseContext(base);
		MultiDex.install(this);
	}
}

详情:

https://developer.android.com/studio/build/multidex.html
http://stackoverflow.com/questions/26609734/how-to-enable-multidexing-with-the-new-android-multidex-support-library/38473900#38473900

Android 应用图标

m		1		48*48px
h		1.5		72*72px
xh		2		96*96px
xxh		3		144*144px
xxxh	4		192*192px

1.CTRL+A  再选择编辑中的“描边”就行。(选择自己喜欢的颜色、设置自己需要的宽度) 
2.新建图层--矩形选框--反选--填充--快速蒙板--滤镜(多用几个)--退出蒙板--图层效果
3.矩形选区--快速蒙板--滤镜(各种滤镜有不同的效果,可以同时用多个滤镜)--退出蒙板--反选--删除--描边

ios和安卓切图换算比例

1dp(Android)=1pt(iOS)

以48dp@160dpi计算的话

mdpi 48px (160dpi, 1x) 基础尺寸

hdpi 72px (240dpi, 1.5x)

xhdpi 96px (320dpi, 2x) 同iOS @2x

xxdpi 144px (480dpi, 3x) 同iOS @3x

xxxdpi 192px (640dpi, 4x)

链接:http://www.zhihu.com/question/27038815/answer/34992846

android网络请求与页面切换

在android开发中会遇到使用fragment切换页面,并且切换的页面都会有网络请求,网络请求成功后会更新相应的fragment页面。如果使用异步网络请求组件android-async-http,会出现这样的情况,当你快速的切换fragment时,每个fragment都会发出新的请求。例如:fragmentA发了网络请求,又切换到了fragmentB,fragmentB又发了网络请求,然后快速的切换两个fragment,切换多次后可能会出现,fragmentA发出的请求返回成功并且使用handler发出消息请求改变fragmentA中的UI时,这时当前的页面正是fragmentB。此时会报空指针错误。

解决此类问题,可以通过第一次加载时缓存,再次切换到此页面时,只有下拉才能请求新数据。另一种方法是,设置一个public static volatile int flag;变量,如果flag为1时则表示当前页面在fragmentA中,当flag为2时表示当前页面在fragmentB中,只当handler收到消息并且flag=1时才能更新fragmentA中的数据。第二种方法实现起来比较繁锁,推荐使用第一种方法。其中1、2、3这些最好存放在一个枚举类型中。

[转]http://blog.csdn.net/wode_dream/article/details/41480271

访问UI线程

1)Activity.runOnUiThread(Runnable)

2)View.post(Runnable)

public void onClick(View v) {
  new Thread(new Runnable() {
	public void run() {
	  final Bitmap b = loadImageFromNetwork();
	  mImageView.post(new Runnable() {
		public void run() {
		  mImageView.setImageBitmap(b);
		}
	  });
	}
  }).start();
}

3)View.postDelayed(Runnable, long)

4)Handler

final Handler myHandler = new Handler();

(new Thread(new Runnable() {

	@Override
	public void run() {
	   final Bitmap b = loadImageFromNetwork();
	  myHandler.post(new Runnable() {                           

		@Override
		public void run() {
		   mImageView.setImageBitmap(b);
		  }
		});
	  }
	})).start();                
}

ListView嵌套 父ListView高度设置

    /**
 * 调整ListView嵌套后,根据子ListView的高度重设父ListView的高度
 * @param listView
 */
public static void setListViewHeightBasedOnChildren(ListView listView) {
	ListAdapter listAdapter = listView.getAdapter();
	if (listAdapter == null) {
		return;
	}

	int totalHeight = 0;
	for (int i = 0; i < listAdapter.getCount(); i++) {
		View listItem = listAdapter.getView(i, null, listView);
		listItem.measure(0, 0);
		totalHeight += listItem.getMeasuredHeight();
	}

	ViewGroup.LayoutParams params = listView.getLayoutParams();
	params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
	listView.setLayoutParams(params);
}

代码创建控件

    ImageView imageView = new ImageView(getActivity());
    //父控件是LinearLayout
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
           ViewGroup.LayoutParams.WRAP_CONTENT,
           ViewGroup.LayoutParams.WRAP_CONTENT);
    //相当于android:layout_gravity属性  
    params.gravity = Gravity.CENTER_VERTICAL;
    imageView.setLayoutParams(params);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);

    Button button = new Button(getActivity());
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    button.setLayoutParams(params);
    //相当于android:gravity属性 
    button.setGravity(Gravity.CENTER_VERTICAL);

    linearLayout.addView(imageView);
    linearLayout.addView(button);

文本拼接

%1表示第一个位置,$d表示数字,$s表示文本

<string name="sale_comment_text1">【%1$d】</string>
<string name="sale_comment_text2">%1$s评价%2$s</string>

getString(R.string.sale_comment_text1,pojo.getCommentType())
getString(R.string.sale_comment_text2,pojo.getCustomerName(),pojo.getSalesName())

拼接文本为:【2】,张三评价李四

textAppearance

textAppearanceInverse/

textAppearanceLarge/

textAppearanceLargeInverse/

textAppearanceMedium/

textAppearanceSmallInverse/

textAppearanceMediumInverse/

textAppearanceSmall/

代码中加下划线 textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下划线 textView.getPaint().setAntiAlias(true);//抗锯齿

转:http://www.cnblogs.com/-cyb/archive/2011/08/02/Android_textAppearance.html

gradle dependencies 设置 版本号

ext{
    compileLibVersion = '23.3.0'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile "com.android.support:appcompat-v7:[$compileLibVersion]"
}

隐藏/移除ActionBar

//隐藏掉整个ActionBar,包括下面的Tabs  
getSupportActionBar().hide();
//或
requestWindowFeature(Window.FEATURE_NO_TITLE);  

//会保留tab标签
//高版本可以换成 ActionBar actionBar = getActionBar();  
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(false);  
actionBar.setDisplayShowHomeEnabled(false);  

判断SDK版本

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            // Translucent status bar
            window.setFlags(
                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }

Android M运行权限问题

一行代码解决Android M新的运行时权限问题: http://www.jianshu.com/p/d3a998ec04ad

Android Build.VERSION.SDK_INT兼容介绍

http://aijiawang-126-com.iteye.com/blog/1481572

© 著作权归作者所有

共有 人打赏支持
上一篇: 待整理
CrazyManDF
粉丝 3
博文 78
码字总数 30987
作品 0
程序员
私信 提问
android设置layout的时候为什么大小颠倒了啊

我最后两个layout明明设置的是3:2但是到手机上显示的时候成了2:3了,求教。下面是我的布局文件:

找到组织
2013/01/25
278
0
viewPage中嵌套listView结果 listView挤到一块去了 求大神

效果图如上,listView没有布满下面的空间 下面呈上XML代码 (主界面) (lisView的) (listView的Item) 按理说布局应该没限制到listView的高度 怎么会出现这种情况呢 难道是java文件上的错误...

Just-the-CJ
2013/08/26
1K
4
安卓开发 各种布局xml代码示例 【原创】

垂直线性布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layoutwidth......

bluecoffee
2014/05/18
0
0
关于apk验证 求助高手

能不能绕过这个验证步骤!

clear_qian
2013/04/03
1K
12
第七讲:用户界面 View(三)

5、表格布局 TableLayout 表格布局TableLayout以行列的形式管理子元素,每一行是一个TableRow布局对象,当然也可以是普通的View对象,TableRow离每放一个元素就是一列,总列数由列数最多的那...

程序袁_绪龙
2014/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
15分钟前
4
0
《今日简史:人类命运大议题》的读后感范文3400字

《今日简史:人类命运大议题》的读后感范文3400字: 文:余祥。尤瓦尔.赫拉利,耶路撒冷希伯来大学教授,全球瞩目的新锐历史学家。今年已经拜读其著《人类简史:从动物到上帝》《未来简史:从...

原创小博客
25分钟前
1
0
Eos测试框架EosFactory

EOS Factory包含一个完整的EOS测试框架,可以进行智能合约的开发和测试。由Tokenika于创建于2017年的这个基于Python的EOS测试框架可以轻松地完成智能合约的开发、部署与测试。 如果你希望马上...

汇智网教程
30分钟前
5
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
56分钟前
3
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部