1.Android中设置文本颜色
1.在xml文件中设置
android:textColor="#E0DCDE"
2.代码中设置
(1)系统颜色
textView.setTextColor(Color.RED);
(2)十六进制转换颜色值
textView.setTextColor(0xffdaa520);//后6位是颜色值
(3)自定义颜色
textView.setTextColor(R.color.red_color);
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red_color">#FF0000</color>
<color name="green_color">#00FF00</color>
</resources>
2.Integer和int的转换
在用到 List<Integer> mAddedOrderCity = new ArrayList<Integer>(); list中需存放Integer形数据,而我们要存取的是int形,这就要进行转换一下:
int到Integer:
int a=3;
Integer A=new Integer(a);
或:
Integer A=Integer.valueOf(a);
Integer到int:
Integer A=new Integer(5);
int a=A.intValue();
至于Integer.parseInt(String str)则是将String类型转为int类型。
int类型是放在栈空间的,Integer是作为对象放在堆空间的;
int 是基本类型,不是类,为了符合面向对象编程,后来出现了Integer 类,他是对int进行封装的.
int不是对象,是java原始的数据类型,它默认值为0.
Integer是个对象,它有自己的方法,默认值为NULL。
实现这种对象包装的目的主要是因为类能够提供必要的方法,用于实现基本数据类型的数值与可打印字符串之间的转换,以及一些其他的实用程序方法;
另外,有些数据结构库类只能操作对象,而不支持基本数据类型的变量,包装类提供一种便利的方式,能够把基本数据类型转换成等价的对象,从而可以利用数据结构库类进行处理。
3.获取string.xml文件里面的值有几个不同的地方
1.在AndroidManifest.xml与layout等xml文件里:
android:text="@string/resource_name"
2.在activity里:
方法一:this.getString(R.string.resource_name);
方法二:getResources().getString(R.string.resource_name);
3.在其他java文件(必须有Context或pplication)
方法一: context.getString(R.string.resource_name);
方法二: application.getString(R.string.resource_name);
4.Android raw文件和assets文件区别
*res/raw和assets的相同点:
1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
*res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
*读取文件资源:
1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作
- InputStream is = getResources().openRawResource(R.id.filename);
2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作
- AssetManager am = null;
- am = getAssets();
- InputStream is = am.open("filename");
或者:
- InputStream is=getResources().getAssets().open("filename");
5.RatingBar技巧
5.1.ratingBar实现:
<RatingBar android:id="@+id/ratingBar"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:rating = "3"
android:numStars="5"
android:stepSize = "0.5"/>
如果你的布局中有RatingBar,那么你的layout_width和layout_height最好要设置成wrap_content,至少layout_width是必须这么做的,因为如果没有这么做,那么很可能你的星星显示不出来,当然,你可以修改一下星星的大小,就可以显示更多的星星。那么,接下来,就是介绍RatingBar中的相关属性。
android:rating = "3.5",这一条是设置默认的分数,可以是浮点数,因为我们的RatingBar其实是评分条,所以星星的数量其实就是用来显示分数的数量,而默认的分数就是应用一开始出现的星星的数量。
android:numStars="5",这个是设置显示的星星数量,理论上,是任何整数都可以,但是我的建议就是最好就是5,因为如果多于5的话,我试过,就我的手机,3.7寸大的屏幕,最多只能显示5.8,为什么是这么怪的数据,因为那个第六个星星根本就还有一角没有显示出来。
android:stepSize = "0.5“,这是显示步长的。什么是步长,就是当你的分数增加时,是按照多大的分数增加的,就像这里,步长是0.5,那么你的手机上显示的星星是可以用你的手指点击来增加分数的,而这里就会按照一次点击增加0.5的步长,就是半颗星星。
但是,这里有点必须要注意,就是我们有时候,不,应该是大部分情况,都不希望我们的RatingBar是可以改动的,是固定的显示分数的,那么,这时我们应该怎样做呢?就是再增加一条属性,就是android:isIndicator="true",这样分数就会固定,不会改变,所以,步长的设定就完全没有必要。
.RatingBar样式的修改
很多时候,默认的RatingBar并不能满足我们的要求,因为我们的应用的需求是各种各样的,默认的样式实在是太过于单调了。这时就需要修改RatingBar的属性了。一般而言,我们都只会修改RatingBar的大小,图样,颜色,等等。所以,这里我就只挑几种比较常见的,就是上面说到的三种。
1.大小。
默认的RatingBar的星星大小,老实说,实在太大了,因为有时候我们呢,会想要将RatingBar放在其他组件上,如ListView,所以,默认的大小肯定不符合我们的要求。那么,我们需要将星星变小一点,于是就需要在RatingBar的布局中添加这么一句:style="?android:attr/ratingBarStyleSmall"这样,星星的大小就会变小,效果图如下:
很抱歉,就我目前收集到的资料来看,星星的大小就只有默认和变小这两种模式,没有其他的情况,但是就我目前的使用情况来说,已经足够了,如果你们有其他要求,那么,我的建议就是换掉默认的星星图案吧。
接下来就是颜色和图样的改变。为什么这两条要放在一块讲呢?因为这两条的修改就是自定义自己的RatingBar,所谓的自定义,其实就是用自己的图样换掉默认的图案,这样是最好的情况,因为包括大小,颜色等等你都能使用自己满意的样式。因为我实在是没有找到什么相关的方法和资料能够解决这个问题,基本上,网上都是选择替换掉图案,因为系统中的星星的图案是固定的,它就只是一张图片而已,所以应该真的是没法用代码进行修改。应该吧?因为以后可能就不一样了吧。方法如下:
2.RatingBar的自定义设置:
我们还是要在我们的RatingBar的布局中添加这么一句:style="@style/myRatingBar",然后就是开始创建我们的myRatingBar的xml文件了。在res/values目录下创建一个xml文件,然后下面是代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/myRatingBar</item>
<item name="android:minHeight">15dip</item>
<item name="android:maxHeight">15dip</item>
</style>
</resources>
item name="android:minHeight"和item name="android:maxHeight"可以自己定义自己的RatingBar的大小。
接着是在res/drawable下创建我们的myRatingBar.xml文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+android:id/background"
android:drawable="@drawable/rating" />
<item android:id="@+android:id/progress"
android:drawable="@drawable/rating_show" />
</layer-list>
这里面,第一个item是设置背景图案的,第二个item是设置RatingBar图案的。
到了这里,基本上的设置已经搞定了,我们可以自定义属于自己的RatingBar了。由于本人手上没有什么图片资源,所以,就贴别人的效果图出来吧,如果有得罪该图的作者的话,还请见谅啊。
一、RatingBar如何更改填充星星的颜色呢?
解决方法:
1、在Android 5.0版本之后,RatingBar控件有一个 android:progressTint: 属性,在这里可以直接设置自己想要的颜色。
例如:
2、大家可以看到在方法一中,该条语句出现了黄条警告,这就是因为它只支持API 21以上的版本,那么低版本的要如何进行兼容呢?我们可以在填充该布局的Activity中写入如下语句:
例如:
经过以上的方法,无论我们的Android版本是哪一个,都可以实现我们更改颜色的目的。
二、如何自定义样式修改RatingBar的图标以及颜色?
解决方法:
步骤一:在res/values/style.xml文件下自定义我们所需要的RatingBar样式:
例如:
步骤二: 在res/drawable文件夹下新建 glimmerratingbar.xml 文件:
例如:
步骤三:以上的准备工作做好之后,就是在布局文件里面将RatingBar的style设置成我们自定义的样式:
例如:
这样就可以啦~
6.嵌套Fragment的使用
嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment.
使用时, 主要要依靠宿主Fragment的 getChildFragmentManager()
来获取FragmentManger.
7.studio配置so库引用
AndroidStudio中引用so库,只要把so库放在libs下即可:
然后在项目的build.gradle文件的android{ }内配置以下代码即可:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
8、android 正确获取屏幕像素大小
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(dm);
int widthPixels= dm.widthPixels;
int heightPixels= dm.heightPixels;
float density = dm.density;
float screenWidth = widthPixels * density ;
float screenHeight = heightPixels * density ;
9、Android 旋转本地图片并保存覆盖原图片
Android手机千变万化,适配真是个大问题。最近在做本地图片保存并上传服务器时,发现某些手机(三星)上传到服务器图片横向显示。特意上网去查了下,解决了问题。解决思路很简单:获取到图片之后看图片是否有旋转,并得到旋转的角度,再转回来。下面看实现逻辑:
第一步:获取指定路径指定大小的图片(500*500)这里暂时先规定500*500
/**
*
* 获取指定路径指定大小的图片(500*500)
*
* @param filePath
* @return Bitmap
* @exception 异常描述
* @see 需要参见的其它内容
* @since 从类的哪一个版本,此方法被添加进来。(可选)
* @deprecated该方法从类的那一个版本后,已经被其它方法替换。(可选)
*/
public static Bitmap getCompressBm(String filePath) {
Bitmap bm = null;
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, 500, 500);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
bm = BitmapFactory.decodeFile(filePath, options);
return bm;
}
第二步:获取图片旋转角度
/**
*
* 获取照片旋转角度
*
* @param rotate
* @return int
* @exception 异常描述
* @see 需要参见的其它内容
* @since 从类的哪一个版本,此方法被添加进来。(可选)
* @deprecated该方法从类的那一个版本后,已经被其它方法替换。(可选)
*/
public static int getCameraPhotoOrientation(String imagePath) {
int rotate = 0;
try {
File imageFile = new File(imagePath);
ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath());
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
}
// Log.v(TAG, "Exif orientation: " + orientation);
} catch (Exception e) {
e.printStackTrace();
}
return rotate;
}
第三步:旋转图片
/**
*
* 旋转图片
*
* @param bitmap
* rotate
* @return 返回类型
* @exception 异常描述
* @see 需要参见的其它内容
* @since 从类的哪一个版本,此方法被添加进来。(可选)
* @deprecated该方法从类的那一个版本后,已经被其它方法替换。(可选)
*/
public static Bitmap rotateBitmap(Bitmap bitmap, int rotate) {
if (bitmap == null)
return null;
int w = bitmap.getWidth();
int h = bitmap.getHeight();
// Setting post rotate to 90
Matrix mtx = new Matrix();
mtx.postRotate(rotate);
return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
}
case R.id.img_reportResult_leftRotate:
//showShortToast("左旋90度");
//旋转照片
Matrix matrixLeft = new Matrix();
matrixLeft.reset();
matrixLeft.setRotate(-90);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrixLeft, true);
imgResult.setImageBitmap(mBitmap);
//保存旋转后的图片,并覆盖原图
saveBmpToPath(mBitmap, mFilePath);
break;
case R.id.img_reportResult_rightRotate:
//showShortToast("右旋90度");
//旋转照片
Matrix matrixRight = new Matrix();
matrixRight.reset();
matrixRight.setRotate(90);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrixRight, true);
imgResult.setImageBitmap(mBitmap);
//保存旋转后的图片,并覆盖原图
saveBmpToPath(mBitmap, mFilePath);
break;
第四步:保存图片到指定路径并覆盖原图片
/**
* @Description 保存图片到指定路径
* @param bitmap
* 要保存的图片
* @param filePath
* 目标路径
* @return 是否成功
*/
@SuppressWarnings("finally")
public static boolean saveBmpToPath(final Bitmap bitmap, final String filePath) {
if (bitmap == null || filePath == null) {
return false;
}
boolean result = false; // 默认结果
File file = new File(filePath);
OutputStream outputStream = null; // 文件输出流
try {
outputStream = new FileOutputStream(file);
result = bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
outputStream); // 将图片压缩为JPEG格式写到文件输出流,100是最大的质量程度
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close(); // 关闭输出流
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
}
第五步:获取到修改过的图片进行上传,这里就不写上传了。